def test_main_with_no_flags( self, mock_listener: mock.Mock, mock_executor_pool: mock.Mock, mock_acceptor_pool: mock.Mock, mock_event_manager: mock.Mock, mock_initialize: mock.Mock, mock_sleep: mock.Mock, ) -> None: mock_sleep.side_effect = KeyboardInterrupt() mock_initialize.return_value.local_executor = 0 mock_initialize.return_value.enable_events = False mock_initialize.return_value.port_file = None mock_initialize.return_value.enable_ssh_tunnel = False main() mock_event_manager.assert_not_called() mock_listener.assert_called_once_with( flags=mock_initialize.return_value, ) mock_executor_pool.assert_called_once_with( flags=mock_initialize.return_value, event_queue=None, ) mock_acceptor_pool.assert_called_once_with( flags=mock_initialize.return_value, listener=mock_listener.return_value, executor_queues=mock_executor_pool.return_value.work_queues, executor_pids=mock_executor_pool.return_value.work_pids, executor_locks=mock_executor_pool.return_value.work_locks, event_queue=None, ) mock_acceptor_pool.return_value.setup.assert_called_once() mock_acceptor_pool.return_value.shutdown.assert_called_once() mock_listener.return_value.shutdown.assert_called_once() mock_sleep.assert_called()
def test_enable_devtools( self, mock_listener: mock.Mock, mock_executor_pool: mock.Mock, mock_acceptor_pool: mock.Mock, mock_event_manager: mock.Mock, mock_parse_args: mock.Mock, mock_load_plugins: mock.Mock, mock_sleep: mock.Mock, ) -> None: mock_sleep.side_effect = KeyboardInterrupt() mock_args = mock_parse_args.return_value self.mock_default_args(mock_args) mock_args.enable_devtools = True mock_args.local_executor = 0 main(enable_devtools=True, local_executor=0) mock_load_plugins.assert_called() self.assertEqual( mock_load_plugins.call_args_list[0][0][0], [ bytes_(PLUGIN_DEVTOOLS_PROTOCOL), bytes_(PLUGIN_WEB_SERVER), bytes_(PLUGIN_HTTP_PROXY), ], ) mock_parse_args.assert_called_once() # Currently --enable-devtools flag alone doesn't enable eventing core mock_event_manager.assert_not_called() if _env_threadless_compliant(): mock_executor_pool.assert_called_once() mock_executor_pool.return_value.setup.assert_called_once() mock_acceptor_pool.assert_called_once() mock_acceptor_pool.return_value.setup.assert_called_once() mock_listener.return_value.setup.assert_called_once()
def test_main_py2_exit(self, mock_is_py3: mock.Mock, mock_print: mock.Mock) -> None: mock_is_py3.return_value = False with self.assertRaises(SystemExit) as e: main(num_workers=1) mock_print.assert_called_with(PY2_DEPRECATION_MESSAGE) self.assertEqual(e.exception.code, 1) mock_is_py3.assert_called()
def test_basic_auth(self, mock_acceptor_pool: mock.Mock, mock_sleep: mock.Mock) -> None: mock_sleep.side_effect = KeyboardInterrupt() input_args = ['--basic-auth', 'user:pass'] flgs = Proxy.initialize(input_args) main(input_args=input_args) mock_acceptor_pool.assert_called_once() self.assertEqual(flgs.auth_code, b'dXNlcjpwYXNz')
def test_basic_auth(self, mock_acceptor_pool: mock.Mock, mock_flags: mock.Mock, mock_sleep: mock.Mock) -> None: mock_sleep.side_effect = KeyboardInterrupt() input_args = ['--basic-auth', 'user:pass'] flags = Flags.initialize(input_args=input_args) mock_flags.initialize = lambda *args, **kwargs: flags main(input_args=input_args) mock_acceptor_pool.assert_called_with(flags=flags, work_klass=HttpProtocolHandler) self.assertEqual(flags.auth_code, b'Basic dXNlcjpwYXNz')
def test_main_py2_exit(self, mock_is_py3: mock.Mock, mock_print: mock.Mock) -> None: mock_is_py3.return_value = False with self.assertRaises(SystemExit) as e: main(num_workers=1) mock_print.assert_called_with( 'DEPRECATION: "develop" branch no longer supports Python 2.7. Kindly upgrade to Python 3+. ' 'If for some reasons you cannot upgrade, consider using "master" branch or simply ' '"pip install proxy.py==0.3".' '\n\n' 'DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. ' 'Please upgrade your Python as Python 2.7 won\'t be maintained after that date. ' 'A future version of pip will drop support for Python 2.7.') self.assertEqual(e.exception.code, 1) mock_is_py3.assert_called()
def test_init_with_no_arguments(self, mock_logging_config: mock.Mock, mock_acceptor_pool: mock.Mock, mock_initialize: mock.Mock, mock_sleep: mock.Mock) -> None: mock_sleep.side_effect = KeyboardInterrupt() input_args: List[str] = [] main(input_args) mock_acceptor_pool.assert_called_with( flags=mock_initialize.return_value, work_klass=HttpProtocolHandler, ) mock_acceptor_pool.return_value.setup.assert_called() mock_acceptor_pool.return_value.shutdown.assert_called() mock_sleep.assert_called()
def test_main_py3_runs(self, mock_is_py3: mock.Mock, mock_acceptor_pool: mock.Mock, mock_print: mock.Mock, mock_sleep: mock.Mock) -> None: mock_sleep.side_effect = KeyboardInterrupt() input_args = ['--basic-auth', 'user:pass'] mock_is_py3.return_value = True main(input_args, num_workers=1) mock_is_py3.assert_called() mock_print.assert_not_called() mock_acceptor_pool.assert_called_once() mock_acceptor_pool.return_value.setup.assert_called()
def test_main_py3_runs(self, mock_is_py3: mock.Mock, mock_acceptor_pool: mock.Mock, mock_flags: mock.Mock, mock_print: mock.Mock, mock_sleep: mock.Mock) -> None: mock_sleep.side_effect = KeyboardInterrupt() input_args = ['--basic-auth', 'user:pass'] flags = Flags.initialize(input_args=input_args) mock_flags.initialize = lambda *args, **kwargs: flags mock_is_py3.return_value = True main(num_workers=1) mock_is_py3.assert_called() mock_print.assert_not_called() mock_acceptor_pool.assert_called() mock_acceptor_pool.return_value.setup.assert_called()
def test_pid_file_is_written_and_removed(self, mock_parse_args: mock.Mock, mock_acceptor_pool: mock.Mock, mock_open: mock.Mock, mock_exists: mock.Mock, mock_remove: mock.Mock, mock_sleep: mock.Mock) -> None: pid_file = get_temp_file('pid') mock_sleep.side_effect = KeyboardInterrupt() mock_args = mock_parse_args.return_value self.mock_default_args(mock_args) mock_args.pid_file = pid_file main(['--pid-file', pid_file]) mock_acceptor_pool.assert_called() mock_acceptor_pool.return_value.setup.assert_called() mock_open.assert_called_with(pid_file, 'wb') mock_open.return_value.__enter__.return_value.write.assert_called_with( bytes_(os.getpid())) mock_exists.assert_called_with(pid_file) mock_remove.assert_called_with(pid_file)
def test_enable_ssh_tunnel( self, mock_ssh_tunnel_listener: mock.Mock, mock_ssh_http_proto_handler: mock.Mock, mock_listener: mock.Mock, mock_executor_pool: mock.Mock, mock_acceptor_pool: mock.Mock, mock_event_manager: mock.Mock, mock_parse_args: mock.Mock, mock_load_plugins: mock.Mock, mock_sleep: mock.Mock, ) -> None: mock_sleep.side_effect = KeyboardInterrupt() mock_args = mock_parse_args.return_value self.mock_default_args(mock_args) mock_args.enable_ssh_tunnel = True mock_args.local_executor = 0 main(enable_ssh_tunnel=True, local_executor=0) mock_load_plugins.assert_called() self.assertEqual( mock_load_plugins.call_args_list[0][0][0], [ bytes_(PLUGIN_HTTP_PROXY), ], ) mock_parse_args.assert_called_once() mock_event_manager.assert_not_called() if _env_threadless_compliant(): mock_executor_pool.assert_called_once() mock_executor_pool.return_value.setup.assert_called_once() mock_acceptor_pool.assert_called_once() mock_acceptor_pool.return_value.setup.assert_called_once() mock_listener.return_value.setup.assert_called_once() mock_ssh_http_proto_handler.assert_called_once() mock_ssh_tunnel_listener.assert_called_once() mock_ssh_tunnel_listener.return_value.setup.assert_called_once() mock_ssh_tunnel_listener.return_value.start_port_forward.assert_called_once( ) mock_ssh_tunnel_listener.return_value.shutdown.assert_called_once() # shutdown will internally call stop port forward mock_ssh_tunnel_listener.return_value.stop_port_forward.assert_not_called( )
def test_init_with_no_arguments(self, mock_logging_config: mock.Mock, mock_acceptor_pool: mock.Mock, mock_flags: mock.Mock, mock_sleep: mock.Mock) -> None: mock_sleep.side_effect = KeyboardInterrupt() input_args: List[str] = [] flags = Flags.initialize(input_args=input_args) mock_flags.initialize = lambda *args, **kwargs: flags main() mock_logging_config.assert_called_with(level=logging.INFO, format=DEFAULT_LOG_FORMAT) mock_acceptor_pool.assert_called_with( flags=flags, work_klass=HttpProtocolHandler, ) mock_acceptor_pool.return_value.setup.assert_called() mock_acceptor_pool.return_value.shutdown.assert_called() mock_sleep.assert_called()
def test_enable_dashboard( self, mock_listener: mock.Mock, mock_executor_pool: mock.Mock, mock_acceptor_pool: mock.Mock, mock_event_manager: mock.Mock, mock_parse_args: mock.Mock, mock_load_plugins: mock.Mock, mock_sleep: mock.Mock, ) -> None: mock_sleep.side_effect = KeyboardInterrupt() mock_args = mock_parse_args.return_value self.mock_default_args(mock_args) mock_args.enable_dashboard = True mock_args.local_executor = 0 main(enable_dashboard=True, local_executor=0) mock_load_plugins.assert_called() self.assertEqual( mock_load_plugins.call_args_list[0][0][0], [ bytes_(PLUGIN_WEB_SERVER), bytes_(PLUGIN_DASHBOARD), bytes_(PLUGIN_WEBSOCKET_TRANSPORT), bytes_(PLUGIN_INSPECT_TRAFFIC), bytes_(PLUGIN_DEVTOOLS_PROTOCOL), bytes_(PLUGIN_HTTP_PROXY), ], ) # TODO: Assert arguments passed to parse_arg mock_parse_args.assert_called_once() # dashboard will also enable eventing mock_event_manager.assert_called_once() mock_event_manager.return_value.setup.assert_called_once() mock_event_manager.return_value.shutdown.assert_called_once() if _env_threadless_compliant(): mock_executor_pool.assert_called_once() mock_executor_pool.return_value.setup.assert_called_once() mock_acceptor_pool.assert_called_once() mock_acceptor_pool.return_value.setup.assert_called_once() mock_listener.return_value.setup.assert_called_once()
def test_main_version(self, mock_print: mock.Mock) -> None: with self.assertRaises(SystemExit) as e: main(['--version']) mock_print.assert_called_with(__version__) self.assertEqual(e.exception.code, 0)