• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2018 - The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14"""Tests for list."""
15import unittest
16
17import mock
18
19from acloud import errors
20from acloud.internal.lib import driver_test_lib
21from acloud.list import list as list_instance
22
23
24class InstanceObject(object):
25    """Mock to store data of instance."""
26
27    def __init__(self, name):
28        self.name = name
29
30
31class ListTest(driver_test_lib.BaseDriverTest):
32    """Test list."""
33
34    def testGetInstancesFromInstanceNames(self):
35        """test get instances from instance names."""
36        cfg = mock.MagicMock()
37        instance_names = ["alive_instance1", "alive_local_instance"]
38
39        alive_instance1 = InstanceObject("alive_instance1")
40        alive_instance2 = InstanceObject("alive_instance2")
41        alive_local_instance = InstanceObject("alive_local_instance")
42
43        instance_alive = [alive_instance1, alive_instance2, alive_local_instance]
44        self.Patch(list_instance, "GetInstances", return_value=instance_alive)
45        instances_list = list_instance.GetInstancesFromInstanceNames(cfg, instance_names)
46        instances_name_in_list = [instance_object.name for instance_object in instances_list]
47        self.assertEqual(instances_name_in_list.sort(), instance_names.sort())
48
49        instance_names = ["alive_instance1", "alive_local_instance", "alive_local_instance"]
50        instances_list = list_instance.GetInstancesFromInstanceNames(cfg, instance_names)
51        instances_name_in_list = [instance_object.name for instance_object in instances_list]
52        self.assertEqual(instances_name_in_list.sort(), instance_names.sort())
53
54        # test get instance from instance name error with invalid input.
55        instance_names = ["miss2_local_instance", "alive_instance1"]
56        miss_instance_names = ["miss2_local_instance"]
57        self.assertRaisesRegexp(
58            errors.NoInstancesFound,
59            "Did not find the following instances: %s" % ' '.join(miss_instance_names),
60            list_instance.GetInstancesFromInstanceNames,
61            cfg=cfg,
62            instance_names=instance_names)
63
64    # pylint: disable=attribute-defined-outside-init
65    def testGetInstanceFromAdbPort(self):
66        """test GetInstanceFromAdbPort."""
67        cfg = mock.MagicMock()
68        alive_instance1 = InstanceObject("alive_instance1")
69        alive_instance1.forwarding_adb_port = 1111
70        alive_instance1.fullname = "device serial: 127.0.0.1:1111 alive_instance1"
71        expected_instance = [alive_instance1]
72        self.Patch(list_instance, "GetInstances", return_value=[alive_instance1])
73        # Test to find instance by adb port number.
74        self.assertEqual(expected_instance,
75                         list_instance.GetInstanceFromAdbPort(cfg, 1111))
76        # Test for instance can't be found by adb port number.
77        with self.assertRaises(errors.NoInstancesFound):
78            list_instance.GetInstanceFromAdbPort(cfg, 2222)
79
80
81if __name__ == "__main__":
82    unittest.main()
83