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