1# Copyright 2020 - 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 create.""" 15import os 16 17import unittest 18 19from unittest import mock 20 21from acloud import errors 22from acloud.create import create_args 23from acloud.internal import constants 24from acloud.internal.lib import driver_test_lib 25 26 27def _CreateArgs(): 28 """set default pass in arguments.""" 29 mock_args = mock.MagicMock( 30 flavor=None, 31 num=1, 32 adb_port=None, 33 hw_property=None, 34 stable_cheeps_host_image_name=None, 35 stable_cheeps_host_image_project=None, 36 username=None, 37 password=None, 38 cheeps_betty_image=None, 39 cheeps_features=[], 40 local_image=None, 41 local_kernel_image=None, 42 local_system_image=None, 43 local_instance_dir=None, 44 local_vendor_boot_image=None, 45 local_trusty_image=None, 46 trusty_host_package=None, 47 trusty_build_id=None, 48 trusty_branch=None, 49 trusty_build_target=None, 50 kernel_branch=None, 51 kernel_build_id=None, 52 kernel_build_target="kernel", 53 boot_branch=None, 54 boot_build_id=None, 55 boot_build_target=None, 56 boot_artifact=None, 57 system_branch=None, 58 system_build_id=None, 59 system_build_target=None, 60 bootloader_branch=None, 61 bootloader_build_id=None, 62 bootloader_build_target=None, 63 android_efi_loader_build_id=None, 64 android_efi_loader_artifact=None, 65 ota_branch=None, 66 ota_build_id=None, 67 ota_build_target=None, 68 local_instance=None, 69 remote_host=None, 70 remote_image_dir=None, 71 host_user=constants.GCE_USER, 72 host_ssh_private_key_path=None, 73 emulator_build_id=None, 74 emulator_build_target=None, 75 emulator_zip=None, 76 avd_type=constants.TYPE_CF, 77 autoconnect=constants.INS_KEY_WEBRTC) 78 return mock_args 79 80 81# pylint: disable=invalid-name,protected-access 82class CreateArgsTest(driver_test_lib.BaseDriverTest): 83 """Test create_args functions.""" 84 85 def testVerifyArgs(self): 86 """test VerifyArgs.""" 87 mock_args = _CreateArgs() 88 # Test args default setting shouldn't raise error. 89 self.assertEqual(None, create_args.VerifyArgs(mock_args)) 90 91 def testVerifyArgs_Goldfish(self): 92 """test goldfish arguments.""" 93 # emulator_build_id with wrong avd_type. 94 mock_args = _CreateArgs() 95 mock_args.emulator_build_id = "123456" 96 self.assertRaises(errors.UnsupportedCreateArgs, 97 create_args.VerifyArgs, mock_args) 98 # Valid emulator_build_id. 99 mock_args.avd_type = constants.TYPE_GF 100 create_args.VerifyArgs(mock_args) 101 # emulator_build_target with wrong avd_type. 102 mock_args.avd_type = constants.TYPE_CF 103 mock_args.emulator_build_id = None 104 mock_args.emulator_build_target = "emulator-linux_x64_nolocationui" 105 mock_args.remote_host = "192.0.2.2" 106 self.assertRaises(errors.UnsupportedCreateArgs, 107 create_args.VerifyArgs, mock_args) 108 mock_args.emulator_build_target = None 109 # Incomplete system build info. 110 mock_args.avd_type = constants.TYPE_GF 111 mock_args.system_build_target = "aosp_x86_64-userdebug" 112 mock_args.remote_host = "192.0.2.2" 113 self.assertRaises(errors.UnsupportedCreateArgs, 114 create_args.VerifyArgs, mock_args) 115 mock_args.system_build_target = None 116 # Incomplete boot build info. 117 mock_args.avd_type = constants.TYPE_GF 118 mock_args.boot_build_target = "gki_x86_64-userdebug" 119 mock_args.remote_host = "192.0.2.2" 120 self.assertRaises(errors.UnsupportedCreateArgs, 121 create_args.VerifyArgs, mock_args) 122 mock_args.boot_build_target = None 123 # System build info without remote_host. 124 mock_args.system_branch = "aosp-master" 125 mock_args.system_build_target = "aosp_x86_64-userdebug" 126 mock_args.system_build_id = "123456" 127 mock_args.remote_host = None 128 self.assertRaises(errors.UnsupportedCreateArgs, 129 create_args.VerifyArgs, mock_args) 130 # Valid build info. 131 mock_args.emulator_build_target = "emulator-linux_x64_nolocationui" 132 mock_args.system_branch = "aosp-master" 133 mock_args.system_build_target = "aosp_x86_64-userdebug" 134 mock_args.system_build_id = "123456" 135 mock_args.boot_branch = "aosp-master" 136 mock_args.boot_build_target = "aosp_x86_64-userdebug" 137 mock_args.boot_build_id = "123456" 138 mock_args.boot_artifact = "boot-5.10.img" 139 mock_args.remote_host = "192.0.2.2" 140 create_args.VerifyArgs(mock_args) 141 142 def testVerifyTrustyArgs(self): 143 """test trusty arguments.""" 144 self.Patch(os.path, "exists", return_value=True) 145 146 # wrong avd_type. 147 mock_args = _CreateArgs() 148 mock_args.local_trusty_image = "trusty_image_package.tar.gz" 149 self.assertRaises(errors.UnsupportedCreateArgs, 150 create_args.VerifyArgs, mock_args) 151 mock_args = _CreateArgs() 152 mock_args.trusty_host_package = "trusty-host_package.tar.gz" 153 self.assertRaises(errors.UnsupportedCreateArgs, 154 create_args.VerifyArgs, mock_args) 155 mock_args.local_trusty_image = "trusty_image_package.tar.gz" 156 # valid args for Trusty avd type. 157 mock_args.avd_type = constants.TYPE_TRUSTY 158 create_args.VerifyArgs(mock_args) 159 # remote image requires an explicit build target 160 mock_args.build_target = None 161 mock_args.local_image = None 162 self.assertRaises(errors.UnsupportedCreateArgs, 163 create_args.VerifyArgs, mock_args) 164 165 def testVerifyArgs_ConnectWebRTC(self): 166 """test VerifyArgs args.autconnect webrtc. 167 168 WebRTC only apply to remote cuttlefish instance 169 170 """ 171 mock_args = _CreateArgs() 172 mock_args.autoconnect = constants.INS_KEY_WEBRTC 173 # Test remote instance and avd_type cuttlefish(default) 174 # Test args.autoconnect webrtc shouldn't raise error. 175 self.assertEqual(None, create_args.VerifyArgs(mock_args)) 176 177 def testVerifyLocalArgs(self): 178 """Test _VerifyLocalArgs.""" 179 mock_args = _CreateArgs() 180 # verify local image case. 181 mock_args.local_image = "/tmp/local_image_dir" 182 self.Patch(os.path, "exists", return_value=False) 183 self.assertRaises(errors.CheckPathError, 184 create_args._VerifyLocalArgs, mock_args) 185 186 # verify local instance 187 mock_args = _CreateArgs() 188 mock_args.local_instance_dir = "/tmp/local_instance_dir" 189 self.Patch(os.path, "exists", return_value=False) 190 self.assertRaises(errors.CheckPathError, 191 create_args._VerifyLocalArgs, mock_args) 192 193 # verify local system image 194 mock_args = _CreateArgs() 195 mock_args.local_system_image = "/tmp/local_system_image_dir" 196 mock_args.avd_type = "cheeps" 197 self.assertRaises(errors.UnsupportedCreateArgs, 198 create_args._VerifyLocalArgs, mock_args) 199 mock_args.avd_type = "cuttlefish" 200 self.Patch(os.path, "exists", return_value=False) 201 self.assertRaises(errors.CheckPathError, 202 create_args._VerifyLocalArgs, mock_args) 203 204 # unsupport local-image with kernel build 205 mock_args = _CreateArgs() 206 mock_args.local_instance = None 207 mock_args.local_image = "/tmp/local_image_dir" 208 self.Patch(os.path, "exists", return_value=True) 209 mock_args.kernel_branch = "common-android12-5.4" 210 self.assertRaises(errors.UnsupportedCreateArgs, 211 create_args._VerifyLocalArgs, mock_args) 212 mock_args.kernel_branch = None 213 mock_args.kernel_build_id = "fake_kernel_1234567" 214 self.assertRaises(errors.UnsupportedCreateArgs, 215 create_args._VerifyLocalArgs, mock_args) 216 217 218if __name__ == "__main__": 219 unittest.main() 220