tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_server_unittests.py (3471B)


      1 #!/usr/bin/env vpython3
      2 # Copyright 2022 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 """File for testing test_server.py."""
      6 
      7 import unittest
      8 import unittest.mock as mock
      9 
     10 from subprocess import CalledProcessError
     11 
     12 import test_server
     13 
     14 # TODO(crbug.com/40935291): Specifying fuchsia-port is unsupported yet.
     15 _FUCHSIA_PORT = 0
     16 _TARGET_ADDR = '127.0.0.1:33333'
     17 _HOST_PORT = 55555
     18 
     19 port_pair = (_FUCHSIA_PORT, _HOST_PORT)
     20 
     21 # Test names should be self-explained.
     22 # pylint: disable=missing-function-docstring
     23 
     24 class TestServerTest(unittest.TestCase):
     25    """Unittests for test_server.py."""
     26 
     27    def setUp(self) -> None:
     28        self._subprocess_patcher = mock.patch('test_server.subprocess.run')
     29        self._log_patcher = mock.patch('test_server.logging.debug')
     30        self._subprocess_mock = self._subprocess_patcher.start()
     31        self._log_mock = self._log_patcher.start()
     32        self.addCleanup(self._log_mock.stop)
     33        self.addCleanup(self._subprocess_mock.stop)
     34 
     35        self._cmd_mock = mock.Mock()
     36        self._cmd_mock.returncode = 0
     37        self._cmd_mock.stdout = str(port_pair[0])
     38        self._subprocess_mock.return_value = self._cmd_mock
     39 
     40        self._forwarder = test_server.SSHPortForwarder(_TARGET_ADDR)
     41        self._forwarder.Map([port_pair])
     42 
     43    def test_ssh_port_forwarder(self) -> None:
     44        self.assertEqual(self._subprocess_mock.call_count, 2)
     45        self.assertEqual(
     46            self._forwarder.GetDevicePortForHostPort(port_pair[1]),
     47            port_pair[0])
     48 
     49    def test_ssh_port_forwarder_unmapped(self) -> None:
     50        self._forwarder.Unmap(port_pair[0])
     51        # Unmap should raise an exception if no ports are mapped.
     52        with self.assertRaises(Exception):
     53            self._forwarder.Unmap(port_pair[0])
     54 
     55    def test_ssh_port_forwarder_ssh_exception(self) -> None:
     56        # Unmap should also raise an exception if the unmap command fails.
     57        self._subprocess_mock.side_effect = [
     58            self._cmd_mock,
     59            CalledProcessError(cmd='ssh', returncode=1)
     60        ]
     61        with self.assertRaises(Exception):
     62            self._forwarder.Unmap(port_pair[0])
     63        self.assertEqual(self._subprocess_mock.call_count, 4)
     64 
     65    def test_ssh_port_forward_unmap(self) -> None:
     66        self._cmd_mock.returncode = 0
     67        self._forwarder.Unmap(port_pair[0])
     68        self.assertEqual(self._subprocess_mock.call_count, 4)
     69 
     70    def test_port_forward_exception(self) -> None:
     71        """Tests that exception is raised if |port_forward| command fails."""
     72        cmd_mock = mock.Mock()
     73        cmd_mock.returncode = 1
     74        self._subprocess_mock.return_value = cmd_mock
     75        with self.assertRaises(Exception):
     76            test_server.port_forward(_TARGET_ADDR, _FUCHSIA_PORT)
     77 
     78    @mock.patch('test_server.chrome_test_server_spawner.SpawningServer')
     79    @mock.patch('test_server.port_forward')
     80    def test_setup_test_server(self, forward_mock, server_mock) -> None:
     81        """Test |setup_test_server|."""
     82 
     83        forward_mock.return_value = _FUCHSIA_PORT
     84        server = test_server.chrome_test_server_spawner.SpawningServer
     85        server.Start = mock.Mock()
     86        server_mock.return_value = server
     87        with mock.patch('test_server.get_ssh_address'):
     88            _, url = test_server.setup_test_server(_TARGET_ADDR, 4)
     89        self.assertTrue(str(_FUCHSIA_PORT) in url)
     90 
     91 
     92 if __name__ == '__main__':
     93    unittest.main()