From 63838a0509831b4e379f3ce7637879ac1541b6cd Mon Sep 17 00:00:00 2001 From: Dhruv Agarwal Date: Sat, 5 Mar 2016 19:09:24 +0530 Subject: [PATCH 1/3] init tests for translator.process_arguments --- .coveragerc | 7 +++++++ requirements.txt | 1 + tests/test_translator.py | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 .coveragerc create mode 100644 requirements.txt diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..544e225 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,7 @@ +[report] +omit = + *argparse* + *mock* + *funcsigs* + *pbr* + *six* diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b4c1474 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +mock==1.3.0 diff --git a/tests/test_translator.py b/tests/test_translator.py index 4761de1..50b6bdf 100644 --- a/tests/test_translator.py +++ b/tests/test_translator.py @@ -1,4 +1,7 @@ import unittest +import argparse + +import mock from http_request_translator import translator @@ -277,6 +280,42 @@ def test_parse_raw_request_no_path(self): with self.assertRaises(ValueError): translator.parse_raw_request(raw_request) + def test_process_arguments_with_no_arguments(self): + # Arguments + args = argparse.Namespace( + interactive=False, + language=None, + proxy=None, + data=None, + request=None, + search_regex=None, + search_string=None, + file=None + ) + + with self.assertRaises(SystemExit) as exc: + translator.process_arguments(args) + + self.assertEqual(exc.exception.code, -1) + + def test_process_arguments_with_interactive_mode(self): + args = argparse.Namespace( + interactive=True, + language="bash", + proxy=None, + data=None, + request=None, + search_regex=None, + search_string=None, + file=None + ) + + with self.assertRaises(SystemExit) as exc: + with mock.patch('http_request_translator.translator.take_headers', side_effect=KeyboardInterrupt): + translator.process_arguments(args) + + self.assertEqual(exc.exception.code, 0) + if __name__ == '__main__': unittest.main() From 316b65ad15d5ab5ffda319ed5e2fc0273c8c7fc1 Mon Sep 17 00:00:00 2001 From: Dhruv Agarwal Date: Sat, 5 Mar 2016 20:26:21 +0530 Subject: [PATCH 2/3] add tests for translator.process_arguments --- tests/test_translator.py | 193 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 192 insertions(+), 1 deletion(-) diff --git a/tests/test_translator.py b/tests/test_translator.py index 50b6bdf..284fc95 100644 --- a/tests/test_translator.py +++ b/tests/test_translator.py @@ -1,5 +1,6 @@ -import unittest import argparse +import os +import unittest import mock @@ -316,6 +317,196 @@ def test_process_arguments_with_interactive_mode(self): self.assertEqual(exc.exception.code, 0) + def test_process_arguments_with_request(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["bash"], + proxy=None, + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + self.assertEqual(type(translator.process_arguments(args)), type({})) + + def test_process_arguments_with_file(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + with open('temp', 'w+') as f: + f.write(request_data) + f.close() + + args = argparse.Namespace( + interactive=False, + language=["bash"], + proxy=None, + data=None, + request=None, + search_regex=None, + search_string=None, + file='temp' + ) + self.assertEqual(type(translator.process_arguments(args)), type({})) + os.remove('temp') + + def test_process_arguments_with_no_language(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=None, + proxy=None, + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + self.assertEqual(type(translator.process_arguments(args)), type({})) + + def test_process_arguments_with_multiple_language(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["bash", "php", "python"], + proxy=None, + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + self.assertEqual(type(translator.process_arguments(args)), type({})) + + def test_process_arguments_with_wrong_language(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["lua"], + proxy=None, + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + with self.assertRaises(ValueError): + translator.process_arguments(args) + + def test_process_arguments_with_data(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["bash"], + proxy=None, + data="sample=1", + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + self.assertEqual(type(translator.process_arguments(args)), type({})) + + def test_process_arguments_with_proxy_with_scheme(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["bash"], + proxy="http://someproxy.com", + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + self.assertEqual(type(translator.process_arguments(args)), type({})) + + def test_process_arguments_with_proxy_without_scheme_without_port(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["bash"], + proxy="127.0.0.1", + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + self.assertEqual(type(translator.process_arguments(args)), type({})) + + def test_process_arguments_with_proxy_without_scheme_with_port(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["bash"], + proxy="127.0.0.1:1337", + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + self.assertEqual(type(translator.process_arguments(args)), type({})) + + def test_process_arguments_with_invalid_proxy_without_scheme(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["bash"], + proxy="127.0.0.", + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + with self.assertRaises(ValueError): + translator.process_arguments(args) + + def test_process_arguments_with_invalid_proxy_with_scheme(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = argparse.Namespace( + interactive=False, + language=["bash"], + proxy="http://127.0.0.", + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + with self.assertRaises(ValueError): + translator.process_arguments(args) + + def test_process_arguments_with_no_data_and_method_post(self): + request_data = """POST HTTP/1.1\nHost: google.com""" + args = argparse.Namespace( + interactive=False, + language=None, + proxy=None, + data=None, + request=request_data, + search_regex=None, + search_string=None, + file=None + ) + + with self.assertRaises(SystemExit) as exc: + translator.process_arguments(args) + + self.assertEqual(exc.exception.code, -1) + if __name__ == '__main__': unittest.main() From 8865e921875f2571acef3659c59f1b4faf85a5ec Mon Sep 17 00:00:00 2001 From: Dhruv Agarwal Date: Sat, 5 Mar 2016 22:45:14 +0530 Subject: [PATCH 3/3] refactor args loading, add util function to load required args to be passed to process_arguments method --- tests/test_translator.py | 161 +++++---------------------------------- tests/utils.py | 18 +++++ 2 files changed, 35 insertions(+), 144 deletions(-) create mode 100644 tests/utils.py diff --git a/tests/test_translator.py b/tests/test_translator.py index 284fc95..242d336 100644 --- a/tests/test_translator.py +++ b/tests/test_translator.py @@ -1,10 +1,10 @@ -import argparse import os import unittest import mock from http_request_translator import translator +from .utils import load_args class TestTranslator(unittest.TestCase): @@ -282,17 +282,7 @@ def test_parse_raw_request_no_path(self): translator.parse_raw_request(raw_request) def test_process_arguments_with_no_arguments(self): - # Arguments - args = argparse.Namespace( - interactive=False, - language=None, - proxy=None, - data=None, - request=None, - search_regex=None, - search_string=None, - file=None - ) + args = load_args() with self.assertRaises(SystemExit) as exc: translator.process_arguments(args) @@ -300,16 +290,7 @@ def test_process_arguments_with_no_arguments(self): self.assertEqual(exc.exception.code, -1) def test_process_arguments_with_interactive_mode(self): - args = argparse.Namespace( - interactive=True, - language="bash", - proxy=None, - data=None, - request=None, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash"], interactive=True) with self.assertRaises(SystemExit) as exc: with mock.patch('http_request_translator.translator.take_headers', side_effect=KeyboardInterrupt): @@ -319,16 +300,7 @@ def test_process_arguments_with_interactive_mode(self): def test_process_arguments_with_request(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["bash"], - proxy=None, - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash"], request=request_data) self.assertEqual(type(translator.process_arguments(args)), type({})) @@ -336,171 +308,72 @@ def test_process_arguments_with_file(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" with open('temp', 'w+') as f: f.write(request_data) - f.close() - - args = argparse.Namespace( - interactive=False, - language=["bash"], - proxy=None, - data=None, - request=None, - search_regex=None, - search_string=None, - file='temp' - ) + + args = load_args(language=["bash"], file='temp') + self.assertEqual(type(translator.process_arguments(args)), type({})) os.remove('temp') def test_process_arguments_with_no_language(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=None, - proxy=None, - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(request=request_data) self.assertEqual(type(translator.process_arguments(args)), type({})) def test_process_arguments_with_multiple_language(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["bash", "php", "python"], - proxy=None, - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash", "php", "python"], request=request_data) self.assertEqual(type(translator.process_arguments(args)), type({})) def test_process_arguments_with_wrong_language(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["lua"], - proxy=None, - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["lua"], request=request_data) with self.assertRaises(ValueError): translator.process_arguments(args) def test_process_arguments_with_data(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["bash"], - proxy=None, - data="sample=1", - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash"], data="sample=1", request=request_data) self.assertEqual(type(translator.process_arguments(args)), type({})) def test_process_arguments_with_proxy_with_scheme(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["bash"], - proxy="http://someproxy.com", - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash"], proxy="http://someproxy.com", request=request_data) self.assertEqual(type(translator.process_arguments(args)), type({})) def test_process_arguments_with_proxy_without_scheme_without_port(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["bash"], - proxy="127.0.0.1", - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash"], proxy="127.0.0.1", request=request_data) self.assertEqual(type(translator.process_arguments(args)), type({})) def test_process_arguments_with_proxy_without_scheme_with_port(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["bash"], - proxy="127.0.0.1:1337", - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash"], proxy="127.0.0.1:1337", request=request_data) self.assertEqual(type(translator.process_arguments(args)), type({})) def test_process_arguments_with_invalid_proxy_without_scheme(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["bash"], - proxy="127.0.0.", - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash"], proxy="127.0.0.", request=request_data) with self.assertRaises(ValueError): translator.process_arguments(args) def test_process_arguments_with_invalid_proxy_with_scheme(self): request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" - args = argparse.Namespace( - interactive=False, - language=["bash"], - proxy="http://127.0.0.", - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(language=["bash"], proxy="http://127.0.0.", request=request_data) with self.assertRaises(ValueError): translator.process_arguments(args) def test_process_arguments_with_no_data_and_method_post(self): request_data = """POST HTTP/1.1\nHost: google.com""" - args = argparse.Namespace( - interactive=False, - language=None, - proxy=None, - data=None, - request=request_data, - search_regex=None, - search_string=None, - file=None - ) + args = load_args(request=request_data) with self.assertRaises(SystemExit) as exc: translator.process_arguments(args) diff --git a/tests/utils.py b/tests/utils.py new file mode 100644 index 0000000..7939441 --- /dev/null +++ b/tests/utils.py @@ -0,0 +1,18 @@ +import argparse + + +def load_args(**kwargs): + args = argparse.Namespace( + data=None, + file=None, + interactive=False, + language=None, + proxy=None, + request=None, + search_regex=None, + search_string=None + ) + for key, value in kwargs.iteritems(): + setattr(args, key, value) + + return args