예제 #1
0
    def test_create_sl4a_manager_return_already_created_manager(self):
        """Tests sl4a_manager.create_sl4a_manager().

        Tests that a second call to create_sl4a_manager() does not create a
        new Sl4aManager, and returns the first created Sl4aManager instead.
        """
        adb = mock.Mock()
        adb.serial = 'SERIAL'
        first_manager = sl4a_manager.create_sl4a_manager(adb)

        adb_same_serial = mock.Mock()
        adb_same_serial.serial = 'SERIAL'
        second_manager = sl4a_manager.create_sl4a_manager(adb)

        self.assertEqual(first_manager, second_manager)
예제 #2
0
    def test_create_sl4a_manager_multiple_devices_with_one_manager_each(self):
        """Tests sl4a_manager.create_sl4a_manager().

        Tests that when create_s4l4a_manager() is called for different devices,
        each device gets its own Sl4aManager object.
        """
        adb_1 = mock.Mock()
        adb_1.serial = 'SERIAL'
        first_manager = sl4a_manager.create_sl4a_manager(adb_1)

        adb_2 = mock.Mock()
        adb_2.serial = 'DIFFERENT_SERIAL_NUMBER'
        second_manager = sl4a_manager.create_sl4a_manager(adb_2)

        self.assertNotEqual(first_manager, second_manager)
예제 #3
0
    def test_create_session_uses_oldest_server_port(self):
        """Tests sl4a_manager.Sl4aManager.create_session().

        Tests that when no port is given, the oldest server port opened is used
        as the server port for a new session. The oldest server port can be
        found by getting the oldest session's server port.
        """
        adb = mock.Mock()

        manager = sl4a_manager.create_sl4a_manager(adb)
        # Ignore starting SL4A.
        manager.start_sl4a_service = lambda: None

        session_1 = mock.Mock()
        session_1.server_port = 12345
        session_2 = mock.Mock()
        session_2.server_port = 67890
        session_3 = mock.Mock()
        session_3.server_port = 67890

        manager.sessions[3] = session_3
        manager.sessions[1] = session_1
        manager.sessions[2] = session_2

        with mock.patch.object(rpc_client.RpcClient,
                               '__init__',
                               return_value=None):
            created_session = manager.create_session()

        self.assertEqual(created_session.server_port, session_1.server_port)
예제 #4
0
    def test_is_sl4a_installed_is_false(self):
        """Tests sl4a_manager.Sl4aManager.is_sl4a_installed().

        Tests is_sl4a_installed() returns true when pm returns data
        """
        adb = mock.Mock()
        adb.shell = lambda _, **kwargs: ''
        manager = sl4a_manager.create_sl4a_manager(adb)
        self.assertFalse(manager.is_sl4a_installed())
예제 #5
0
    def test_create_manager(self):
        """Tests sl4a_manager.create_sl4a_manager().

        Tests that a new Sl4aManager is returned without an error.
        """
        adb = mock.Mock()
        adb.serial = 'SERIAL'
        sl4a_man = sl4a_manager.create_sl4a_manager(adb)
        self.assertEqual(sl4a_man.adb, adb)
예제 #6
0
    def test_get_open_listening_port_no_port_found(self):
        """Tests sl4a_manager.Sl4aManager._get_open_listening_port().

        Tests to ensure None is returned if no open port is found.
        """
        adb = mock.Mock()
        adb.shell = lambda _: ''

        manager = sl4a_manager.create_sl4a_manager(adb)
        self.assertIsNone(manager._get_open_listening_port())
예제 #7
0
    def test_get_open_listening_port_port_is_avaiable(self):
        """Tests sl4a_manager.Sl4aManager._get_open_listening_port().

        Tests to ensure a port is returned if a port is found and has not been
        marked as used.
        """
        adb = mock.Mock()
        adb.shell = lambda _: '12345 67890'

        manager = sl4a_manager.create_sl4a_manager(adb)
        manager._sl4a_ports = {'12345'}
        self.assertEqual(manager._get_open_listening_port(), 67890)
예제 #8
0
    def test_get_open_listening_port_no_new_port_found(self):
        """Tests sl4a_manager.Sl4aManager._get_open_listening_port().

        Tests to ensure None is returned if the ports returned have all been
        marked as in used.
        """
        adb = mock.Mock()
        adb.shell = lambda _: '12345 67890'

        manager = sl4a_manager.create_sl4a_manager(adb)
        manager._sl4a_ports = {'12345', '67890'}
        self.assertIsNone(manager._get_open_listening_port())
예제 #9
0
    def test_get_all_ports_command_uses_root_cmd(self):
        """Tests sl4a_manager.Sl4aManager._get_all_ports_command().

        Tests that _get_all_ports_command calls the root command when root is
        available.
        """
        adb = mock.Mock()
        adb.is_root = lambda: True
        command = 'ngo45hke3b4vie3mv5ni93,vfu3j'
        sl4a_manager._SL4A_ROOT_FIND_PORT_CMD = command

        manager = sl4a_manager.create_sl4a_manager(adb)
        self.assertEqual(manager._get_all_ports_command(), command)
예제 #10
0
    def test_start_sl4a_throws_error_on_sl4a_not_installed(self):
        """Tests sl4a_manager.Sl4aManager.start_sl4a_service().

        Tests that a MissingSl4aError is thrown when SL4A is not installed.
        """
        adb = mock.Mock()

        manager = sl4a_manager.create_sl4a_manager(adb)
        manager.is_sl4a_installed = lambda: False
        try:
            manager.start_sl4a_service()
            self.fail('An error should have been thrown.')
        except rpc_client.MissingSl4AError:
            pass
예제 #11
0
    def test_get_all_ports_command_escalates_to_root(self):
        """Tests sl4a_manager.Sl4aManager._call_get_ports_command().

        Tests that _call_get_ports_command calls the root command when adb is
        user but can escalate to root.
        """
        adb = mock.Mock()
        adb.is_root = lambda: False
        adb.ensure_root = lambda: True
        command = 'ngo45hke3b4vie3mv5ni93,vfu3j'
        sl4a_manager._SL4A_ROOT_FIND_PORT_CMD = command

        manager = sl4a_manager.create_sl4a_manager(adb)
        self.assertEqual(manager._get_all_ports_command(), command)
예제 #12
0
    def test_start_sl4a_starts_sl4a_if_not_running(self):
        """Tests sl4a_manager.Sl4aManager.start_sl4a_service().

        Tests that SL4A is started if it was not already running.
        """
        adb = mock.Mock()
        adb.shell = mock.Mock(side_effect=['', '', ''])

        manager = sl4a_manager.create_sl4a_manager(adb)
        manager.is_sl4a_installed = lambda: True
        try:
            manager.start_sl4a_service()
        except rpc_client.MissingSl4AError:
            self.fail('An error should not have been thrown.')
        adb.shell.assert_called_with(sl4a_manager._SL4A_START_SERVICE_CMD)
예제 #13
0
    def test_create_session_uses_random_port_when_no_session_exists(self):
        """Tests sl4a_manager.Sl4aManager.create_session().

        Tests that when no port is given, and no SL4A server exists, the server
        port for the session is set to 0.
        """
        adb = mock.Mock()

        manager = sl4a_manager.create_sl4a_manager(adb)
        # Ignore starting SL4A.
        manager.start_sl4a_service = lambda: None

        with mock.patch.object(
                rpc_client.RpcClient, '__init__', return_value=None):
            created_session = manager.create_session()

        self.assertEqual(created_session.server_port, 0)
예제 #14
0
    def test_start_sl4a_server_fails_all_retries(self, _):
        """Tests sl4a_manager.Sl4aManager.start_sl4a_server().

        Tests to ensure that start_sl4a_server throws an error if all retries
        fail.
        """
        adb = mock.Mock()
        adb.shell = lambda _, **kwargs: ''

        side_effects = []
        for _ in range(int(sl4a_manager.MAX_WAIT_ON_SERVER_SECONDS /
                           sl4a_manager.ATTEMPT_INTERVAL)):
            side_effects.append(None)

        manager = sl4a_manager.create_sl4a_manager(adb)
        manager._get_open_listening_port = mock.Mock(side_effect=side_effects)
        try:
            manager.start_sl4a_server(0)
            self.fail('Sl4aConnectionError was not thrown.')
        except rpc_client.Sl4aConnectionError:
            pass
예제 #15
0
    def test_start_sl4a_server_uses_all_retries(self, _):
        """Tests sl4a_manager.Sl4aManager.start_sl4a_server().

        Tests to ensure that _start_sl4a_server retries and successfully returns
        a port.
        """
        adb = mock.Mock()
        adb.shell = lambda _, **kwargs: ''

        side_effects = []
        expected_port = 12345
        for _ in range(int(sl4a_manager.MAX_WAIT_ON_SERVER_SECONDS /
                           sl4a_manager.ATTEMPT_INTERVAL) - 1):
            side_effects.append(None)
        side_effects.append(expected_port)

        manager = sl4a_manager.create_sl4a_manager(adb)
        manager._get_open_listening_port = mock.Mock(side_effect=side_effects)
        try:
            found_port = manager.start_sl4a_server(0)
            self.assertTrue(found_port)
        except rpc_client.Sl4aConnectionError:
            self.fail('start_sl4a_server failed to respect FIND_PORT_RETRIES.')