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..242d336 100644 --- a/tests/test_translator.py +++ b/tests/test_translator.py @@ -1,6 +1,10 @@ +import os import unittest +import mock + from http_request_translator import translator +from .utils import load_args class TestTranslator(unittest.TestCase): @@ -277,6 +281,105 @@ 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): + args = load_args() + + 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 = load_args(language=["bash"], interactive=True) + + 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) + + def test_process_arguments_with_request(self): + request_data = """GET HTTP/1.1\nHost: google.com\nCache-Control: no-cache""" + args = load_args(language=["bash"], request=request_data) + + 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) + + 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = load_args(request=request_data) + + with self.assertRaises(SystemExit) as exc: + translator.process_arguments(args) + + self.assertEqual(exc.exception.code, -1) + if __name__ == '__main__': unittest.main() 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