| #!/usr/bin/env python |
| # |
| # Copyright (C) 2017 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| import threading |
| import unittest |
| import time |
| |
| try: |
| from unittest import mock |
| except ImportError: |
| import mock |
| |
| from host_controller import tfc_host_controller |
| from host_controller.tfc import command_task |
| from host_controller.tfc import device_info |
| |
| |
| class HostControllerTest(unittest.TestCase): |
| """A test for tfc_host_controller.HostController. |
| |
| Args: |
| _remote_client: A mock remote_client.RemoteClient. |
| _tfc_client: A mock tfc_client.TfcClient. |
| _host_controller: The HostController being tested. |
| """ |
| _AVAILABLE_DEVICE = device_info.DeviceInfo( |
| device_serial="ABC001", |
| run_target="sailfish", |
| state="Available") |
| _ALLOCATED_DEVICE = device_info.DeviceInfo( |
| device_serial="ABC002", |
| run_target="sailfish", |
| state="Allocated") |
| _STUB_DEVICE = device_info.DeviceInfo( |
| device_serial="emulator-5554", |
| run_target="unknown", |
| state="Available", |
| stub=True) |
| _DEVICES = [_AVAILABLE_DEVICE, _ALLOCATED_DEVICE, _STUB_DEVICE] |
| _TASKS = [command_task.CommandTask(task_id="1-0", |
| command_line="vts -m SampleShellTest", |
| device_serials=["ABC001"])] |
| |
| def setUp(self): |
| """Creates the HostController.""" |
| self._remote_client = mock.Mock() |
| self._tfc_client = mock.Mock() |
| self._host_controller = tfc_host_controller.HostController( |
| self._remote_client, self._tfc_client, "host1", ["cluster1"]) |
| |
| @mock.patch("host_controller.invocation_thread." |
| "InvocationThread.run") |
| def testDeviceStateDuringInvocation(self, mock_run): |
| """Tests LeaseHostTasks and ListAvailableDevices.""" |
| self._remote_client.ListDevices.return_value = self._DEVICES |
| self._tfc_client.LeaseHostTasks.return_value = self._TASKS |
| run_event = threading.Event() |
| mock_run.side_effect = lambda: run_event.wait() |
| |
| self._host_controller.LeaseCommandTasks() |
| devices = self._host_controller.ListAvailableDevices() |
| self.assertEqual([], devices) |
| run_event.set() |
| # Wait for thread termination |
| time.sleep(0.2) |
| devices = self._host_controller.ListAvailableDevices() |
| self.assertEqual([self._AVAILABLE_DEVICE], devices) |
| |
| def testListDevices(self): |
| """Tests ListDevices.""" |
| self._remote_client.ListDevices.return_value = self._DEVICES |
| devices = self._host_controller.ListDevices() |
| self.assertEqual([self._AVAILABLE_DEVICE, self._ALLOCATED_DEVICE], |
| devices) |
| |
| |
| if __name__ == "__main__": |
| unittest.main() |