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