aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorThomas Kriechbaumer <thomas@kriechbaumer.name>2017-02-19 12:37:50 +0100
committerThomas Kriechbaumer <thomas@kriechbaumer.name>2017-02-19 14:29:09 +0100
commit36352c95397351f4e69d857fcd8110fe125388f7 (patch)
treeb12a7a193d27262eb921e161a849dbbf3e974932 /test
parent3ee5227cca9e67df50310447efb6bc7c557d34bb (diff)
downloadmitmproxy-36352c95397351f4e69d857fcd8110fe125388f7.tar.gz
mitmproxy-36352c95397351f4e69d857fcd8110fe125388f7.tar.bz2
mitmproxy-36352c95397351f4e69d857fcd8110fe125388f7.zip
protobuf: coverage++
Diffstat (limited to 'test')
-rw-r--r--test/mitmproxy/contentviews/test_protobuf.py52
1 files changed, 45 insertions, 7 deletions
diff --git a/test/mitmproxy/contentviews/test_protobuf.py b/test/mitmproxy/contentviews/test_protobuf.py
index 1224b8db..31e382ec 100644
--- a/test/mitmproxy/contentviews/test_protobuf.py
+++ b/test/mitmproxy/contentviews/test_protobuf.py
@@ -1,12 +1,50 @@
+from unittest import mock
+import pytest
+
from mitmproxy.contentviews import protobuf
from mitmproxy.test import tutils
from . import full_eval
-if protobuf.ViewProtobuf.is_available():
- def test_view_protobuf_request():
- v = full_eval(protobuf.ViewProtobuf())
- p = tutils.test_data.path("mitmproxy/data/protobuf01")
- content_type, output = v(open(p, "rb").read())
- assert content_type == "Protobuf"
- assert output.next()[0][1] == '1: "3bbc333c-e61c-433b-819a-0b9a8cc103b8"'
+def test_view_protobuf_request():
+ v = full_eval(protobuf.ViewProtobuf())
+ p = tutils.test_data.path("mitmproxy/data/protobuf01")
+
+ with mock.patch('mitmproxy.contentviews.protobuf.ViewProtobuf.is_available'):
+ with mock.patch('subprocess.Popen') as n:
+ m = mock.Mock()
+ attrs = {'communicate.return_value': (b'1: "3bbc333c-e61c-433b-819a-0b9a8cc103b8"', True)}
+ m.configure_mock(**attrs)
+ n.return_value = m
+
+ content_type, output = v(open(p, "rb").read())
+ assert content_type == "Protobuf"
+ assert output[0] == [('text', b'1: "3bbc333c-e61c-433b-819a-0b9a8cc103b8"')]
+
+ m.communicate = mock.MagicMock()
+ m.communicate.return_value = (None, None)
+ with pytest.raises(ValueError, matches="Failed to parse input."):
+ v(b'foobar')
+
+
+def test_view_protobuf_availability():
+ with mock.patch('subprocess.Popen') as n:
+ m = mock.Mock()
+ attrs = {'communicate.return_value': (b'libprotoc fake version', True)}
+ m.configure_mock(**attrs)
+ n.return_value = m
+ assert protobuf.ViewProtobuf().is_available()
+
+ m = mock.Mock()
+ attrs = {'communicate.return_value': (b'command not found', True)}
+ m.configure_mock(**attrs)
+ n.return_value = m
+ assert not protobuf.ViewProtobuf().is_available()
+
+
+def test_view_protobuf_fallback():
+ with mock.patch('subprocess.Popen.communicate') as m:
+ m.side_effect = OSError()
+ v = full_eval(protobuf.ViewProtobuf())
+ with pytest.raises(NotImplementedError, matches='protoc not found'):
+ v(b'foobar')