コード例 #1
0
 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()
コード例 #2
0
 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()
コード例 #3
0
ファイル: test_main.py プロジェクト: yunhaoling/proxy.py
 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()
コード例 #4
0
ファイル: test_main.py プロジェクト: yunhaoling/proxy.py
    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')
コード例 #5
0
    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')
コード例 #6
0
 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()
コード例 #7
0
ファイル: test_main.py プロジェクト: yunhaoling/proxy.py
    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()
コード例 #8
0
ファイル: test_main.py プロジェクト: yunhaoling/proxy.py
    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()
コード例 #9
0
    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()
コード例 #10
0
ファイル: test_main.py プロジェクト: yunhaoling/proxy.py
 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)
コード例 #11
0
 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(
     )
コード例 #12
0
    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()
コード例 #13
0
 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()
コード例 #14
0
 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)