diff options
| author | anneborcherding <55282902+anneborcherding@users.noreply.github.com> | 2020-05-04 10:37:13 +0200 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-04 10:37:13 +0200 | 
| commit | 7fdcbb09e6034ab1f76724965cfdf45f3d775129 (patch) | |
| tree | 9adaa530173c70d374680a510402b958ad669277 /test/examples/webscanner_helper/test_mapping.py | |
| parent | f4aa3ee11c01d5b8f260e57bfd7e084b7767c08e (diff) | |
| download | mitmproxy-7fdcbb09e6034ab1f76724965cfdf45f3d775129.tar.gz mitmproxy-7fdcbb09e6034ab1f76724965cfdf45f3d775129.tar.bz2 mitmproxy-7fdcbb09e6034ab1f76724965cfdf45f3d775129.zip  | |
added add-ons that enhance the performance of web application scanners. (#3961)
* added add-ons that enhance the performance of web application scanners.
Co-authored-by: weichweich <14820950+weichweich@users.noreply.github.com>
Diffstat (limited to 'test/examples/webscanner_helper/test_mapping.py')
| -rw-r--r-- | test/examples/webscanner_helper/test_mapping.py | 165 | 
1 files changed, 165 insertions, 0 deletions
diff --git a/test/examples/webscanner_helper/test_mapping.py b/test/examples/webscanner_helper/test_mapping.py new file mode 100644 index 00000000..e4d519fc --- /dev/null +++ b/test/examples/webscanner_helper/test_mapping.py @@ -0,0 +1,165 @@ +from typing import TextIO, Callable +from unittest import mock +from unittest.mock import MagicMock + +from mitmproxy.test import tflow +from mitmproxy.test import tutils + +from examples.complex.webscanner_helper.mapping import MappingAddon, MappingAddonConfig + + +class TestConfig: + +    def test_config(self): +        assert MappingAddonConfig.HTML_PARSER == "html.parser" + + +url = "http://10.10.10.10" +new_content = "My Text" +mapping_content = f'{{"{url}": {{"body": "{new_content}"}}}}' + + +class TestMappingAddon: + +    def test_init(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile) +        assert "My Text" in str(mapping.mapping_templates._dump()) + +    def test_load(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile) +        loader = MagicMock() + +        mapping.load(loader) +        assert 'mapping_file' in str(loader.add_option.call_args_list) +        assert 'map_persistent' in str(loader.add_option.call_args_list) + +    def test_configure(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile) +        new_filename = "My new filename" +        updated = {str(mapping.OPT_MAPPING_FILE): new_filename, str(mapping.OPT_MAP_PERSISTENT): True} + +        open_mock = mock.mock_open(read_data="{}") +        with mock.patch("builtins.open", open_mock): +            mapping.configure(updated) +        assert new_filename in str(open_mock.mock_calls) +        assert mapping.filename == new_filename +        assert mapping.persistent + +    def test_response_filtered(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile) +        f = tflow.tflow(resp=tutils.tresp()) +        test_content = b"Test" +        f.response.content = test_content + +        mapping.response(f) +        assert f.response.content == test_content + +    def test_response(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile) +        f = tflow.tflow(resp=tutils.tresp()) +        test_content = b"<body> Test </body>" +        f.response.content = test_content +        f.request.url = url + +        mapping.response(f) +        assert f.response.content.decode("utf-8") == new_content + +    def test_response_content_type(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile) +        f = tflow.tflow(resp=tutils.tresp()) +        test_content = b"<body> Test </body>" +        f.response.content = test_content +        f.request.url = url +        f.response.headers.add("content-type", "content-type") + +        mapping.response(f) +        assert f.response.content == test_content + +    def test_response_not_existing(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile) +        f = tflow.tflow(resp=tutils.tresp()) +        test_content = b"<title> Test </title>" +        f.response.content = test_content +        f.request.url = url +        mapping.response(f) +        assert f.response.content == test_content + +    def test_persistance_false(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile) + +        open_mock = mock.mock_open(read_data="{}") +        with mock.patch("builtins.open", open_mock): +            mapping.done() +        assert len(open_mock.mock_calls) == 0 + +    def test_persistance_true(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile, persistent=True) + +        open_mock = mock.mock_open(read_data="{}") +        with mock.patch("builtins.open", open_mock): +            mapping.done() +        with open(tmpfile, "r") as tfile: +            results = tfile.read() +        assert len(open_mock.mock_calls) != 0 +        assert results == mapping_content + +    def test_persistance_true_add_content(self, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write(mapping_content) +        mapping = MappingAddon(tmpfile, persistent=True) + +        f = tflow.tflow(resp=tutils.tresp()) +        test_content = b"<title> Test </title>" +        f.response.content = test_content +        f.request.url = url + +        mapping.response(f) +        mapping.done() +        with open(tmpfile, "r") as tfile: +            results = tfile.read() +        assert mapping_content in results + +    def mock_dump(self, f: TextIO, value_dumper: Callable): +        assert value_dumper(None) == "None" +        try: +            value_dumper("Test") +        except RuntimeError: +            assert True +        else: +            assert False + +    def test_dump(selfself, tmpdir): +        tmpfile = tmpdir.join("tmpfile") +        with open(tmpfile, "w") as tfile: +            tfile.write("{}") +        mapping = MappingAddon(tmpfile, persistent=True) +        with mock.patch('examples.complex.webscanner_helper.urldict.URLDict.dump', selfself.mock_dump): +            mapping.done()  | 
