1*800a58d9SAndroid Build Coastguard Worker# Copyright 2018 - 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 avd_spec.""" 15*800a58d9SAndroid Build Coastguard Worker 16*800a58d9SAndroid Build Coastguard Workerimport glob 17*800a58d9SAndroid Build Coastguard Workerimport os 18*800a58d9SAndroid Build Coastguard Workerimport subprocess 19*800a58d9SAndroid Build Coastguard Workerimport unittest 20*800a58d9SAndroid Build Coastguard Worker 21*800a58d9SAndroid Build Coastguard Workerfrom unittest import mock 22*800a58d9SAndroid Build Coastguard Worker 23*800a58d9SAndroid Build Coastguard Workerfrom acloud import errors 24*800a58d9SAndroid Build Coastguard Workerfrom acloud.create import avd_spec 25*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal import constants 26*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import android_build_client 27*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import auth 28*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import driver_test_lib 29*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import utils 30*800a58d9SAndroid Build Coastguard Workerfrom acloud.list import list as list_instances 31*800a58d9SAndroid Build Coastguard Workerfrom acloud.public import config 32*800a58d9SAndroid Build Coastguard Worker 33*800a58d9SAndroid Build Coastguard Worker 34*800a58d9SAndroid Build Coastguard Worker# pylint: disable=invalid-name,protected-access 35*800a58d9SAndroid Build Coastguard Workerclass AvdSpecTest(driver_test_lib.BaseDriverTest): 36*800a58d9SAndroid Build Coastguard Worker """Test avd_spec methods.""" 37*800a58d9SAndroid Build Coastguard Worker 38*800a58d9SAndroid Build Coastguard Worker def setUp(self): 39*800a58d9SAndroid Build Coastguard Worker """Initialize new avd_spec.AVDSpec.""" 40*800a58d9SAndroid Build Coastguard Worker super().setUp() 41*800a58d9SAndroid Build Coastguard Worker self.args = mock.MagicMock() 42*800a58d9SAndroid Build Coastguard Worker self.args.flavor = "" 43*800a58d9SAndroid Build Coastguard Worker self.args.local_image = None 44*800a58d9SAndroid Build Coastguard Worker self.args.local_kernel_image = None 45*800a58d9SAndroid Build Coastguard Worker self.args.local_system_image = None 46*800a58d9SAndroid Build Coastguard Worker self.args.local_vendor_boot_image = None 47*800a58d9SAndroid Build Coastguard Worker self.args.config_file = "" 48*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "fake_build_target" 49*800a58d9SAndroid Build Coastguard Worker self.args.adb_port = None 50*800a58d9SAndroid Build Coastguard Worker self.args.launch_args = None 51*800a58d9SAndroid Build Coastguard Worker self.Patch(list_instances, "ChooseOneRemoteInstance", return_value=mock.MagicMock()) 52*800a58d9SAndroid Build Coastguard Worker self.Patch(list_instances, "GetInstancesFromInstanceNames", return_value=mock.MagicMock()) 53*800a58d9SAndroid Build Coastguard Worker 54*800a58d9SAndroid Build Coastguard Worker # Setup mock Acloud config for usage in tests. 55*800a58d9SAndroid Build Coastguard Worker self.mock_config = mock.MagicMock() 56*800a58d9SAndroid Build Coastguard Worker self.mock_config.launch_args = None 57*800a58d9SAndroid Build Coastguard Worker self.Patch(config, 'GetAcloudConfig', return_value=self.mock_config) 58*800a58d9SAndroid Build Coastguard Worker 59*800a58d9SAndroid Build Coastguard Worker self.AvdSpec = avd_spec.AVDSpec(self.args) 60*800a58d9SAndroid Build Coastguard Worker 61*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access 62*800a58d9SAndroid Build Coastguard Worker def testProcessLocalImageArgs(self): 63*800a58d9SAndroid Build Coastguard Worker """Test process args.local_image.""" 64*800a58d9SAndroid Build Coastguard Worker self.Patch(glob, "glob", return_value=["fake.img"]) 65*800a58d9SAndroid Build Coastguard Worker expected_image_artifact = "/path/cf_x86_phone-img-eng.user.zip" 66*800a58d9SAndroid Build Coastguard Worker expected_image_dir = "/path-to-image-dir" 67*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "exists", 68*800a58d9SAndroid Build Coastguard Worker side_effect=lambda path: path in (expected_image_artifact, 69*800a58d9SAndroid Build Coastguard Worker expected_image_dir)) 70*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "isdir", 71*800a58d9SAndroid Build Coastguard Worker side_effect=lambda path: path == expected_image_dir) 72*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "isfile", 73*800a58d9SAndroid Build Coastguard Worker side_effect=lambda path: path == expected_image_artifact) 74*800a58d9SAndroid Build Coastguard Worker 75*800a58d9SAndroid Build Coastguard Worker # Specified --local-image to a local zipped image file 76*800a58d9SAndroid Build Coastguard Worker self.args.local_image = "/path/cf_x86_phone-img-eng.user.zip" 77*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._avd_type = constants.TYPE_CF 78*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._instance_type = constants.INSTANCE_TYPE_REMOTE 79*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessLocalImageArgs(self.args) 80*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._local_image_artifact, 81*800a58d9SAndroid Build Coastguard Worker expected_image_artifact) 82*800a58d9SAndroid Build Coastguard Worker 83*800a58d9SAndroid Build Coastguard Worker # Specified --local-image to a dir contains images 84*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "GetBuildEnvironmentVariable", 85*800a58d9SAndroid Build Coastguard Worker return_value="test_cf_x86") 86*800a58d9SAndroid Build Coastguard Worker self.args.local_image = "/path-to-image-dir" 87*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._avd_type = constants.TYPE_CF 88*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._instance_type = constants.INSTANCE_TYPE_REMOTE 89*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessLocalImageArgs(self.args) 90*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._local_image_dir, expected_image_dir) 91*800a58d9SAndroid Build Coastguard Worker 92*800a58d9SAndroid Build Coastguard Worker # Specified local_image without arg 93*800a58d9SAndroid Build Coastguard Worker self.args.local_image = constants.FIND_IN_BUILD_ENV 94*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "GetBuildEnvironmentVariable", 95*800a58d9SAndroid Build Coastguard Worker side_effect=["cf_x86_auto", "test_environ", "test_environ"]) 96*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessLocalImageArgs(self.args) 97*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._local_image_dir, "test_environ") 98*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_image_artifact, expected_image_artifact) 99*800a58d9SAndroid Build Coastguard Worker 100*800a58d9SAndroid Build Coastguard Worker # Specified --avd-type=goldfish --local-image with a dir 101*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "GetBuildEnvironmentVariable", 102*800a58d9SAndroid Build Coastguard Worker return_value="test_environ") 103*800a58d9SAndroid Build Coastguard Worker self.args.local_image = "/path-to-image-dir" 104*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._avd_type = constants.TYPE_GF 105*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._instance_type = constants.INSTANCE_TYPE_LOCAL 106*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessLocalImageArgs(self.args) 107*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._local_image_dir, expected_image_dir) 108*800a58d9SAndroid Build Coastguard Worker 109*800a58d9SAndroid Build Coastguard Worker def testProcessLocalMixedImageArgs(self): 110*800a58d9SAndroid Build Coastguard Worker """Test process args.local_kernel_image and args.local_system_image.""" 111*800a58d9SAndroid Build Coastguard Worker expected_image_dir = "/path-to-image-dir" 112*800a58d9SAndroid Build Coastguard Worker expected_image_file = "/path-to-image-file" 113*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "exists", 114*800a58d9SAndroid Build Coastguard Worker side_effect=lambda path: path in (expected_image_file, 115*800a58d9SAndroid Build Coastguard Worker expected_image_dir)) 116*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "isdir", 117*800a58d9SAndroid Build Coastguard Worker side_effect=lambda path: path == expected_image_dir) 118*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "isfile", 119*800a58d9SAndroid Build Coastguard Worker side_effect=lambda path: path == expected_image_file) 120*800a58d9SAndroid Build Coastguard Worker 121*800a58d9SAndroid Build Coastguard Worker # Specified --local-*-image with dirs. 122*800a58d9SAndroid Build Coastguard Worker self.args.local_kernel_image = expected_image_dir 123*800a58d9SAndroid Build Coastguard Worker self.args.local_system_image = expected_image_dir 124*800a58d9SAndroid Build Coastguard Worker self.args.local_system_dlkm_image = expected_image_dir 125*800a58d9SAndroid Build Coastguard Worker self.args.local_vendor_image = expected_image_dir 126*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessImageArgs(self.args) 127*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_kernel_image, expected_image_dir) 128*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_system_image, expected_image_dir) 129*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_system_dlkm_image, expected_image_dir) 130*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_vendor_image, expected_image_dir) 131*800a58d9SAndroid Build Coastguard Worker 132*800a58d9SAndroid Build Coastguard Worker # Specified --local-*-image with files. 133*800a58d9SAndroid Build Coastguard Worker self.args.local_kernel_image = expected_image_file 134*800a58d9SAndroid Build Coastguard Worker self.args.local_system_image = expected_image_file 135*800a58d9SAndroid Build Coastguard Worker self.args.local_system_dlkm_image = expected_image_file 136*800a58d9SAndroid Build Coastguard Worker self.args.local_vendor_boot_image = expected_image_file 137*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessImageArgs(self.args) 138*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_kernel_image, expected_image_file) 139*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_system_image, expected_image_file) 140*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_system_dlkm_image, expected_image_file) 141*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_vendor_boot_image, expected_image_file) 142*800a58d9SAndroid Build Coastguard Worker 143*800a58d9SAndroid Build Coastguard Worker # Specified --local-*-image without args. 144*800a58d9SAndroid Build Coastguard Worker self.args.local_kernel_image = constants.FIND_IN_BUILD_ENV 145*800a58d9SAndroid Build Coastguard Worker self.args.local_system_image = constants.FIND_IN_BUILD_ENV 146*800a58d9SAndroid Build Coastguard Worker self.args.local_system_dlkm_image = constants.FIND_IN_BUILD_ENV 147*800a58d9SAndroid Build Coastguard Worker self.args.local_vendor_image = constants.FIND_IN_BUILD_ENV 148*800a58d9SAndroid Build Coastguard Worker with mock.patch("acloud.create.avd_spec.utils." 149*800a58d9SAndroid Build Coastguard Worker "GetBuildEnvironmentVariable", 150*800a58d9SAndroid Build Coastguard Worker return_value=expected_image_dir): 151*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessImageArgs(self.args) 152*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_kernel_image, expected_image_dir) 153*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_system_image, expected_image_dir) 154*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_system_dlkm_image, expected_image_dir) 155*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_vendor_image, expected_image_dir) 156*800a58d9SAndroid Build Coastguard Worker 157*800a58d9SAndroid Build Coastguard Worker def testProcessAutoconnect(self): 158*800a58d9SAndroid Build Coastguard Worker """Test process autoconnect.""" 159*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._autoconnect = False 160*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessAutoconnect() 161*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._autoconnect, False) 162*800a58d9SAndroid Build Coastguard Worker 163*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._avd_type = constants.TYPE_CF 164*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._autoconnect = "webrtc" 165*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessAutoconnect() 166*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._autoconnect, "webrtc") 167*800a58d9SAndroid Build Coastguard Worker 168*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._autoconnect = "vnc" 169*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessAutoconnect() 170*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._autoconnect, "vnc") 171*800a58d9SAndroid Build Coastguard Worker 172*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._avd_type = constants.TYPE_GF 173*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._autoconnect = "webrtc" 174*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessAutoconnect() 175*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._autoconnect, "vnc") 176*800a58d9SAndroid Build Coastguard Worker 177*800a58d9SAndroid Build Coastguard Worker def testProcessImageArgs(self): 178*800a58d9SAndroid Build Coastguard Worker """Test process image source.""" 179*800a58d9SAndroid Build Coastguard Worker self.Patch(glob, "glob", return_value=["fake.img"]) 180*800a58d9SAndroid Build Coastguard Worker # No specified local_image, image source is from remote 181*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessImageArgs(self.args) 182*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._image_source, constants.IMAGE_SRC_REMOTE) 183*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._local_image_dir, None) 184*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_kernel_image, None) 185*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.local_system_image, None) 186*800a58d9SAndroid Build Coastguard Worker 187*800a58d9SAndroid Build Coastguard Worker # Specified local_image with an arg for cf type 188*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "isfile", return_value=True) 189*800a58d9SAndroid Build Coastguard Worker self.args.local_image = "/test_path/cf_x86_phone-img-eng.user.zip" 190*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._avd_type = constants.TYPE_CF 191*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._instance_type = constants.INSTANCE_TYPE_REMOTE 192*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessImageArgs(self.args) 193*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._image_source, constants.IMAGE_SRC_LOCAL) 194*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._local_image_artifact, 195*800a58d9SAndroid Build Coastguard Worker "/test_path/cf_x86_phone-img-eng.user.zip") 196*800a58d9SAndroid Build Coastguard Worker 197*800a58d9SAndroid Build Coastguard Worker # Specified local_image with an arg for gce type 198*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "isfile", return_value=False) 199*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "exists", return_value=True) 200*800a58d9SAndroid Build Coastguard Worker self.args.local_image = "/test_path_to_dir/" 201*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._avd_type = constants.TYPE_GCE 202*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessImageArgs(self.args) 203*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._image_source, constants.IMAGE_SRC_LOCAL) 204*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._local_image_artifact, 205*800a58d9SAndroid Build Coastguard Worker "/test_path_to_dir/avd-system.tar.gz") 206*800a58d9SAndroid Build Coastguard Worker 207*800a58d9SAndroid Build Coastguard Worker @mock.patch.object(avd_spec.AVDSpec, "_GetGitRemote") 208*800a58d9SAndroid Build Coastguard Worker def testGetBranchFromRepo(self, mock_gitremote): 209*800a58d9SAndroid Build Coastguard Worker """Test get branch name from repo info.""" 210*800a58d9SAndroid Build Coastguard Worker # Check aosp repo gets proper branch prefix. 211*800a58d9SAndroid Build Coastguard Worker fake_subprocess = mock.MagicMock() 212*800a58d9SAndroid Build Coastguard Worker fake_subprocess.stdout = mock.MagicMock() 213*800a58d9SAndroid Build Coastguard Worker fake_subprocess.stdout.readline = mock.MagicMock(return_value='') 214*800a58d9SAndroid Build Coastguard Worker fake_subprocess.poll = mock.MagicMock(return_value=0) 215*800a58d9SAndroid Build Coastguard Worker fake_subprocess.returncode = 0 216*800a58d9SAndroid Build Coastguard Worker return_value = "Manifest branch: fake_branch" 217*800a58d9SAndroid Build Coastguard Worker fake_subprocess.communicate = mock.MagicMock(return_value=(return_value, '')) 218*800a58d9SAndroid Build Coastguard Worker self.Patch(subprocess, "Popen", return_value=fake_subprocess) 219*800a58d9SAndroid Build Coastguard Worker 220*800a58d9SAndroid Build Coastguard Worker mock_gitremote.return_value = "aosp" 221*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetBranchFromRepo(), "aosp-fake_branch") 222*800a58d9SAndroid Build Coastguard Worker 223*800a58d9SAndroid Build Coastguard Worker # Check default repo gets default branch prefix. 224*800a58d9SAndroid Build Coastguard Worker mock_gitremote.return_value = "" 225*800a58d9SAndroid Build Coastguard Worker return_value = "Manifest branch: fake_branch" 226*800a58d9SAndroid Build Coastguard Worker fake_subprocess.communicate = mock.MagicMock(return_value=(return_value, '')) 227*800a58d9SAndroid Build Coastguard Worker self.Patch(subprocess, "Popen", return_value=fake_subprocess) 228*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetBranchFromRepo(), "git_fake_branch") 229*800a58d9SAndroid Build Coastguard Worker 230*800a58d9SAndroid Build Coastguard Worker # Can't get branch from repo info, set it as default branch. 231*800a58d9SAndroid Build Coastguard Worker return_value = "Manifest branch:" 232*800a58d9SAndroid Build Coastguard Worker fake_subprocess.communicate = mock.MagicMock(return_value=(return_value, '')) 233*800a58d9SAndroid Build Coastguard Worker self.Patch(subprocess, "Popen", return_value=fake_subprocess) 234*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetBranchFromRepo(), "aosp-main") 235*800a58d9SAndroid Build Coastguard Worker 236*800a58d9SAndroid Build Coastguard Worker def testGetBuildBranch(self): 237*800a58d9SAndroid Build Coastguard Worker """Test GetBuildBranch function""" 238*800a58d9SAndroid Build Coastguard Worker # Test infer branch from build_id and build_target. 239*800a58d9SAndroid Build Coastguard Worker build_client = mock.MagicMock() 240*800a58d9SAndroid Build Coastguard Worker build_id = "fake_build_id" 241*800a58d9SAndroid Build Coastguard Worker build_target = "fake_build_target" 242*800a58d9SAndroid Build Coastguard Worker expected_branch = "fake_build_branch" 243*800a58d9SAndroid Build Coastguard Worker self.Patch(android_build_client, "AndroidBuildClient", 244*800a58d9SAndroid Build Coastguard Worker return_value=build_client) 245*800a58d9SAndroid Build Coastguard Worker self.Patch(auth, "CreateCredentials", return_value=mock.MagicMock()) 246*800a58d9SAndroid Build Coastguard Worker self.Patch(build_client, "GetBranch", return_value=expected_branch) 247*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetBuildBranch(build_id, build_target), 248*800a58d9SAndroid Build Coastguard Worker expected_branch) 249*800a58d9SAndroid Build Coastguard Worker # Infer branch from "repo info" when build_id and build_target is None. 250*800a58d9SAndroid Build Coastguard Worker self.Patch(self.AvdSpec, "_GetBranchFromRepo", return_value="repo_branch") 251*800a58d9SAndroid Build Coastguard Worker build_id = None 252*800a58d9SAndroid Build Coastguard Worker build_target = None 253*800a58d9SAndroid Build Coastguard Worker expected_branch = "repo_branch" 254*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetBuildBranch(build_id, build_target), 255*800a58d9SAndroid Build Coastguard Worker expected_branch) 256*800a58d9SAndroid Build Coastguard Worker 257*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access 258*800a58d9SAndroid Build Coastguard Worker def testGetBuildTarget(self): 259*800a58d9SAndroid Build Coastguard Worker """Test get build target name.""" 260*800a58d9SAndroid Build Coastguard Worker branch = "git_branch" 261*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._flavor = constants.FLAVOR_IOT 262*800a58d9SAndroid Build Coastguard Worker self.args.avd_type = constants.TYPE_GCE 263*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 264*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._GetBuildTarget(self.args, branch), 265*800a58d9SAndroid Build Coastguard Worker "gce_x86_64_iot-userdebug") 266*800a58d9SAndroid Build Coastguard Worker 267*800a58d9SAndroid Build Coastguard Worker branch = "aosp-master" 268*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._flavor = constants.FLAVOR_PHONE 269*800a58d9SAndroid Build Coastguard Worker self.args.avd_type = constants.TYPE_CF 270*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 271*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._GetBuildTarget(self.args, branch), 272*800a58d9SAndroid Build Coastguard Worker "aosp_cf_x86_64_phone-userdebug") 273*800a58d9SAndroid Build Coastguard Worker 274*800a58d9SAndroid Build Coastguard Worker branch = "aosp-main" 275*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._flavor = constants.FLAVOR_PHONE 276*800a58d9SAndroid Build Coastguard Worker self.args.avd_type = constants.TYPE_CF 277*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 278*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._GetBuildTarget(self.args, branch), 279*800a58d9SAndroid Build Coastguard Worker "aosp_cf_x86_64_phone-trunk_staging-userdebug") 280*800a58d9SAndroid Build Coastguard Worker 281*800a58d9SAndroid Build Coastguard Worker branch = "git_branch" 282*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._flavor = constants.FLAVOR_PHONE 283*800a58d9SAndroid Build Coastguard Worker self.args.avd_type = constants.TYPE_CF 284*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 285*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._GetBuildTarget(self.args, branch), 286*800a58d9SAndroid Build Coastguard Worker "cf_x86_64_phone-userdebug") 287*800a58d9SAndroid Build Coastguard Worker 288*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access 289*800a58d9SAndroid Build Coastguard Worker def testProcessHWPropertyWithInvalidArgs(self): 290*800a58d9SAndroid Build Coastguard Worker """Test _ProcessHWPropertyArgs with invalid args.""" 291*800a58d9SAndroid Build Coastguard Worker # Checking wrong resolution. 292*800a58d9SAndroid Build Coastguard Worker args = mock.MagicMock() 293*800a58d9SAndroid Build Coastguard Worker args.hw_property = "cpu:3,resolution:1280" 294*800a58d9SAndroid Build Coastguard Worker args.reuse_instance_name = None 295*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.InvalidHWPropertyError): 296*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessHWPropertyArgs(args) 297*800a58d9SAndroid Build Coastguard Worker 298*800a58d9SAndroid Build Coastguard Worker # Checking property should be int. 299*800a58d9SAndroid Build Coastguard Worker args = mock.MagicMock() 300*800a58d9SAndroid Build Coastguard Worker args.hw_property = "cpu:3,dpi:fake" 301*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.InvalidHWPropertyError): 302*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessHWPropertyArgs(args) 303*800a58d9SAndroid Build Coastguard Worker 304*800a58d9SAndroid Build Coastguard Worker # Checking disk property should be with 'g' suffix. 305*800a58d9SAndroid Build Coastguard Worker args = mock.MagicMock() 306*800a58d9SAndroid Build Coastguard Worker args.hw_property = "cpu:3,disk:2" 307*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.InvalidHWPropertyError): 308*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessHWPropertyArgs(args) 309*800a58d9SAndroid Build Coastguard Worker 310*800a58d9SAndroid Build Coastguard Worker # Checking memory property should be with 'g' suffix. 311*800a58d9SAndroid Build Coastguard Worker args = mock.MagicMock() 312*800a58d9SAndroid Build Coastguard Worker args.hw_property = "cpu:3,memory:2" 313*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.InvalidHWPropertyError): 314*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessHWPropertyArgs(args) 315*800a58d9SAndroid Build Coastguard Worker 316*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access 317*800a58d9SAndroid Build Coastguard Worker @mock.patch.object(utils, "PrintColorString") 318*800a58d9SAndroid Build Coastguard Worker def testCheckCFBuildTarget(self, print_warning): 319*800a58d9SAndroid Build Coastguard Worker """Test _CheckCFBuildTarget.""" 320*800a58d9SAndroid Build Coastguard Worker # patch correct env variable. 321*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "GetBuildEnvironmentVariable", 322*800a58d9SAndroid Build Coastguard Worker return_value="cf_x86_phone-userdebug") 323*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._CheckCFBuildTarget(constants.INSTANCE_TYPE_REMOTE) 324*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._CheckCFBuildTarget(constants.INSTANCE_TYPE_LOCAL) 325*800a58d9SAndroid Build Coastguard Worker 326*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "GetBuildEnvironmentVariable", 327*800a58d9SAndroid Build Coastguard Worker return_value="aosp_cf_arm64_auto-userdebug") 328*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._CheckCFBuildTarget(constants.INSTANCE_TYPE_HOST) 329*800a58d9SAndroid Build Coastguard Worker # patch wrong env variable. 330*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "GetBuildEnvironmentVariable", 331*800a58d9SAndroid Build Coastguard Worker return_value="test_environ") 332*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._CheckCFBuildTarget(constants.INSTANCE_TYPE_REMOTE) 333*800a58d9SAndroid Build Coastguard Worker 334*800a58d9SAndroid Build Coastguard Worker print_warning.assert_called_once() 335*800a58d9SAndroid Build Coastguard Worker 336*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access 337*800a58d9SAndroid Build Coastguard Worker def testParseHWPropertyStr(self): 338*800a58d9SAndroid Build Coastguard Worker """Test _ParseHWPropertyStr.""" 339*800a58d9SAndroid Build Coastguard Worker expected_dict = {"cpu": "2", "x_res": "1080", "y_res": "1920", 340*800a58d9SAndroid Build Coastguard Worker "dpi": "240", "memory": "4096", "disk": "4096"} 341*800a58d9SAndroid Build Coastguard Worker args_str = "cpu:2,resolution:1080x1920,dpi:240,memory:4g,disk:4g" 342*800a58d9SAndroid Build Coastguard Worker result_dict = self.AvdSpec._ParseHWPropertyStr(args_str) 343*800a58d9SAndroid Build Coastguard Worker self.assertTrue(expected_dict == result_dict) 344*800a58d9SAndroid Build Coastguard Worker 345*800a58d9SAndroid Build Coastguard Worker expected_dict = {"cpu": "2", "x_res": "1080", "y_res": "1920", 346*800a58d9SAndroid Build Coastguard Worker "dpi": "240", "memory": "512", "disk": "4096"} 347*800a58d9SAndroid Build Coastguard Worker args_str = "cpu:2,resolution:1080x1920,dpi:240,memory:512m,disk:4g" 348*800a58d9SAndroid Build Coastguard Worker result_dict = self.AvdSpec._ParseHWPropertyStr(args_str) 349*800a58d9SAndroid Build Coastguard Worker self.assertTrue(expected_dict == result_dict) 350*800a58d9SAndroid Build Coastguard Worker 351*800a58d9SAndroid Build Coastguard Worker def testGetFlavorFromBuildTargetString(self): 352*800a58d9SAndroid Build Coastguard Worker """Test _GetFlavorFromLocalImage.""" 353*800a58d9SAndroid Build Coastguard Worker img_path = "/fack_path/cf_x86_tv-img-eng.user.zip" 354*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetFlavorFromString(img_path), 355*800a58d9SAndroid Build Coastguard Worker "tv") 356*800a58d9SAndroid Build Coastguard Worker 357*800a58d9SAndroid Build Coastguard Worker build_target_str = "aosp_cf_x86_auto" 358*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetFlavorFromString( 359*800a58d9SAndroid Build Coastguard Worker build_target_str), "auto") 360*800a58d9SAndroid Build Coastguard Worker 361*800a58d9SAndroid Build Coastguard Worker # Flavor is not supported. 362*800a58d9SAndroid Build Coastguard Worker img_path = "/fack_path/cf_x86_error-img-eng.user.zip" 363*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetFlavorFromString(img_path), 364*800a58d9SAndroid Build Coastguard Worker None) 365*800a58d9SAndroid Build Coastguard Worker 366*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access,too-many-statements 367*800a58d9SAndroid Build Coastguard Worker def testProcessRemoteBuildArgs(self): 368*800a58d9SAndroid Build Coastguard Worker """Test _ProcessRemoteBuildArgs.""" 369*800a58d9SAndroid Build Coastguard Worker self.args.branch = "git_master" 370*800a58d9SAndroid Build Coastguard Worker self.args.build_id = "1234" 371*800a58d9SAndroid Build Coastguard Worker self.args.launch_args = None 372*800a58d9SAndroid Build Coastguard Worker 373*800a58d9SAndroid Build Coastguard Worker # Verify auto-assigned avd_type if build_targe contains "_gce_". 374*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "aosp_gce_x86_phone-userdebug" 375*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 376*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.avd_type == "gce") 377*800a58d9SAndroid Build Coastguard Worker 378*800a58d9SAndroid Build Coastguard Worker # Verify auto-assigned avd_type if build_targe contains "gce_". 379*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "gce_x86_phone-userdebug" 380*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 381*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.avd_type == "gce") 382*800a58d9SAndroid Build Coastguard Worker 383*800a58d9SAndroid Build Coastguard Worker # Verify auto-assigned avd_type if build_targe contains "_cf_". 384*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "aosp_cf_x86_64_phone-userdebug" 385*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 386*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.avd_type == "cuttlefish") 387*800a58d9SAndroid Build Coastguard Worker 388*800a58d9SAndroid Build Coastguard Worker # Verify auto-assigned avd_type if build_targe contains "cf_". 389*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "cf_x86_phone-userdebug" 390*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 391*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.avd_type == "cuttlefish") 392*800a58d9SAndroid Build Coastguard Worker 393*800a58d9SAndroid Build Coastguard Worker # Verify auto-assigned avd_type if build_targe contains "sdk_". 394*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "sdk_phone_armv7-sdk" 395*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 396*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.avd_type == "goldfish") 397*800a58d9SAndroid Build Coastguard Worker 398*800a58d9SAndroid Build Coastguard Worker # Verify auto-assigned avd_type if build_targe contains "_sdk_". 399*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "aosp_sdk_phone_armv7-sdk" 400*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 401*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.avd_type == "goldfish") 402*800a58d9SAndroid Build Coastguard Worker 403*800a58d9SAndroid Build Coastguard Worker # Verify auto-assigned avd_type if build_target contains "_trusty_". 404*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "qemu_trusty_arm64-trunk_staging-userdebug" 405*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 406*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.avd_type == "trusty") 407*800a58d9SAndroid Build Coastguard Worker 408*800a58d9SAndroid Build Coastguard Worker # Verify extra build info. 409*800a58d9SAndroid Build Coastguard Worker self.args.system_branch = "system_branch" 410*800a58d9SAndroid Build Coastguard Worker self.args.system_build_target = "system_build_target" 411*800a58d9SAndroid Build Coastguard Worker self.args.system_build_id = "system_build_id" 412*800a58d9SAndroid Build Coastguard Worker self.args.ota_branch = "ota_branch" 413*800a58d9SAndroid Build Coastguard Worker self.args.ota_build_target = "ota_build_target" 414*800a58d9SAndroid Build Coastguard Worker self.args.ota_build_id = "ota_build_id" 415*800a58d9SAndroid Build Coastguard Worker self.args.kernel_branch = "kernel_branch" 416*800a58d9SAndroid Build Coastguard Worker self.args.kernel_build_target = "kernel_build_target" 417*800a58d9SAndroid Build Coastguard Worker self.args.kernel_build_id = "kernel_build_id" 418*800a58d9SAndroid Build Coastguard Worker self.args.boot_branch = "boot_branch" 419*800a58d9SAndroid Build Coastguard Worker self.args.boot_build_target = "boot_build_target" 420*800a58d9SAndroid Build Coastguard Worker self.args.boot_build_id = "boot_build_id" 421*800a58d9SAndroid Build Coastguard Worker self.args.boot_artifact = "boot_artifact" 422*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 423*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 424*800a58d9SAndroid Build Coastguard Worker {constants.BUILD_BRANCH: "system_branch", 425*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: "system_build_target", 426*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: "system_build_id"}, 427*800a58d9SAndroid Build Coastguard Worker self.AvdSpec.system_build_info) 428*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 429*800a58d9SAndroid Build Coastguard Worker {constants.BUILD_BRANCH: "kernel_branch", 430*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: "kernel_build_target", 431*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: "kernel_build_id"}, 432*800a58d9SAndroid Build Coastguard Worker self.AvdSpec.kernel_build_info) 433*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 434*800a58d9SAndroid Build Coastguard Worker {constants.BUILD_BRANCH: "boot_branch", 435*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: "boot_build_target", 436*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: "boot_build_id", 437*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ARTIFACT: "boot_artifact"}, 438*800a58d9SAndroid Build Coastguard Worker self.AvdSpec.boot_build_info) 439*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 440*800a58d9SAndroid Build Coastguard Worker {constants.BUILD_BRANCH: "ota_branch", 441*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: "ota_build_target", 442*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: "ota_build_id"}, 443*800a58d9SAndroid Build Coastguard Worker self.AvdSpec.ota_build_info) 444*800a58d9SAndroid Build Coastguard Worker 445*800a58d9SAndroid Build Coastguard Worker # Verify auto-assigned avd_type if no match, default as cuttlefish. 446*800a58d9SAndroid Build Coastguard Worker self.args.build_target = "mini_emulator_arm64-userdebug" 447*800a58d9SAndroid Build Coastguard Worker self.args.avd_type = "cuttlefish" 448*800a58d9SAndroid Build Coastguard Worker # reset args.avd_type default value as cuttlefish. 449*800a58d9SAndroid Build Coastguard Worker self.AvdSpec = avd_spec.AVDSpec(self.args) 450*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessRemoteBuildArgs(self.args) 451*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.avd_type == "cuttlefish") 452*800a58d9SAndroid Build Coastguard Worker 453*800a58d9SAndroid Build Coastguard Worker def testEscapeAnsi(self): 454*800a58d9SAndroid Build Coastguard Worker """Test EscapeAnsi.""" 455*800a58d9SAndroid Build Coastguard Worker test_string = "\033[1;32;40m Manifest branch:" 456*800a58d9SAndroid Build Coastguard Worker expected_result = " Manifest branch:" 457*800a58d9SAndroid Build Coastguard Worker self.assertEqual(avd_spec.EscapeAnsi(test_string), expected_result) 458*800a58d9SAndroid Build Coastguard Worker 459*800a58d9SAndroid Build Coastguard Worker def testGetGceLocalImagePath(self): 460*800a58d9SAndroid Build Coastguard Worker """Test get gce local image path.""" 461*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "isfile", return_value=True) 462*800a58d9SAndroid Build Coastguard Worker # Verify when specify --local-image ~/XXX.tar.gz. 463*800a58d9SAndroid Build Coastguard Worker fake_image_path = "~/gce_local_image_dir/gce_image.tar.gz" 464*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "exists", return_value=True) 465*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetGceLocalImagePath(fake_image_path), 466*800a58d9SAndroid Build Coastguard Worker "~/gce_local_image_dir/gce_image.tar.gz") 467*800a58d9SAndroid Build Coastguard Worker 468*800a58d9SAndroid Build Coastguard Worker # Verify when specify --local-image ~/XXX.img. 469*800a58d9SAndroid Build Coastguard Worker fake_image_path = "~/gce_local_image_dir/gce_image.img" 470*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetGceLocalImagePath(fake_image_path), 471*800a58d9SAndroid Build Coastguard Worker "~/gce_local_image_dir/gce_image.img") 472*800a58d9SAndroid Build Coastguard Worker 473*800a58d9SAndroid Build Coastguard Worker # Verify if exist argument --local-image as a directory. 474*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "isfile", return_value=False) 475*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "exists", return_value=True) 476*800a58d9SAndroid Build Coastguard Worker fake_image_path = "~/gce_local_image_dir/" 477*800a58d9SAndroid Build Coastguard Worker # Default to find */avd-system.tar.gz if exist then return the path. 478*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetGceLocalImagePath(fake_image_path), 479*800a58d9SAndroid Build Coastguard Worker "~/gce_local_image_dir/avd-system.tar.gz") 480*800a58d9SAndroid Build Coastguard Worker 481*800a58d9SAndroid Build Coastguard Worker # Otherwise choose raw file */android_system_disk_syslinux.img if 482*800a58d9SAndroid Build Coastguard Worker # exist then return the path. 483*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "exists", side_effect=[False, True]) 484*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._GetGceLocalImagePath(fake_image_path), 485*800a58d9SAndroid Build Coastguard Worker "~/gce_local_image_dir/android_system_disk_syslinux.img") 486*800a58d9SAndroid Build Coastguard Worker 487*800a58d9SAndroid Build Coastguard Worker # Both _GCE_LOCAL_IMAGE_CANDIDATE could not be found then raise error. 488*800a58d9SAndroid Build Coastguard Worker self.Patch(os.path, "exists", side_effect=[False, False]) 489*800a58d9SAndroid Build Coastguard Worker self.assertRaises(errors.ImgDoesNotExist, 490*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._GetGceLocalImagePath, fake_image_path) 491*800a58d9SAndroid Build Coastguard Worker 492*800a58d9SAndroid Build Coastguard Worker def testProcessMiscArgs(self): 493*800a58d9SAndroid Build Coastguard Worker """Test process misc args.""" 494*800a58d9SAndroid Build Coastguard Worker self.args.remote_host = None 495*800a58d9SAndroid Build Coastguard Worker self.args.local_instance = None 496*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 497*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._instance_type, constants.INSTANCE_TYPE_REMOTE) 498*800a58d9SAndroid Build Coastguard Worker 499*800a58d9SAndroid Build Coastguard Worker self.args.remote_host = None 500*800a58d9SAndroid Build Coastguard Worker self.args.local_instance = 0 501*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 502*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._instance_type, constants.INSTANCE_TYPE_LOCAL) 503*800a58d9SAndroid Build Coastguard Worker 504*800a58d9SAndroid Build Coastguard Worker self.args.remote_host = "1.1.1.1" 505*800a58d9SAndroid Build Coastguard Worker self.args.local_instance = None 506*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 507*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._instance_type, constants.INSTANCE_TYPE_HOST) 508*800a58d9SAndroid Build Coastguard Worker 509*800a58d9SAndroid Build Coastguard Worker self.args.remote_host = "1.1.1.1" 510*800a58d9SAndroid Build Coastguard Worker self.args.local_instance = 1 511*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 512*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec._instance_type, constants.INSTANCE_TYPE_HOST) 513*800a58d9SAndroid Build Coastguard Worker 514*800a58d9SAndroid Build Coastguard Worker self.args.oxygen = True 515*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 516*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec._oxygen) 517*800a58d9SAndroid Build Coastguard Worker 518*800a58d9SAndroid Build Coastguard Worker # Test avd_spec.autoconnect 519*800a58d9SAndroid Build Coastguard Worker self.args.autoconnect = False 520*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 521*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.autoconnect, False) 522*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_adb, False) 523*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_vnc, False) 524*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_webrtc, False) 525*800a58d9SAndroid Build Coastguard Worker 526*800a58d9SAndroid Build Coastguard Worker self.args.autoconnect = constants.INS_KEY_VNC 527*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 528*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.autoconnect, True) 529*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_adb, True) 530*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_vnc, True) 531*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_webrtc, False) 532*800a58d9SAndroid Build Coastguard Worker 533*800a58d9SAndroid Build Coastguard Worker self.args.autoconnect = constants.INS_KEY_ADB 534*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 535*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.autoconnect, True) 536*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_adb, True) 537*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_vnc, False) 538*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_webrtc, False) 539*800a58d9SAndroid Build Coastguard Worker 540*800a58d9SAndroid Build Coastguard Worker self.args.autoconnect = constants.INS_KEY_WEBRTC 541*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 542*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.autoconnect, True) 543*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_adb, True) 544*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_vnc, False) 545*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.connect_webrtc, True) 546*800a58d9SAndroid Build Coastguard Worker 547*800a58d9SAndroid Build Coastguard Worker # Test stable host image name. 548*800a58d9SAndroid Build Coastguard Worker self.args.stable_host_image_name = "fake_host_image" 549*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 550*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.stable_host_image_name, "fake_host_image") 551*800a58d9SAndroid Build Coastguard Worker 552*800a58d9SAndroid Build Coastguard Worker # Setup acloud config with betty_image spec 553*800a58d9SAndroid Build Coastguard Worker self.mock_config.betty_image = 'from-config' 554*800a58d9SAndroid Build Coastguard Worker # --betty-image from cmdline should override config 555*800a58d9SAndroid Build Coastguard Worker self.args.cheeps_betty_image = 'from-cmdline' 556*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 557*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.cheeps_betty_image, 'from-cmdline') 558*800a58d9SAndroid Build Coastguard Worker # acloud config value is used otherwise 559*800a58d9SAndroid Build Coastguard Worker self.args.cheeps_betty_image = None 560*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 561*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.cheeps_betty_image, 'from-config') 562*800a58d9SAndroid Build Coastguard Worker 563*800a58d9SAndroid Build Coastguard Worker # Verify cheeps_features is assigned from args. 564*800a58d9SAndroid Build Coastguard Worker self.args.cheeps_features = ['a', 'b', 'c'] 565*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 566*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.args.cheeps_features, ['a', 'b', 'c']) 567*800a58d9SAndroid Build Coastguard Worker 568*800a58d9SAndroid Build Coastguard Worker # Verify connect_hostname 569*800a58d9SAndroid Build Coastguard Worker self.mock_config.connect_hostname = True 570*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 571*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.connect_hostname) 572*800a58d9SAndroid Build Coastguard Worker self.args.connect_hostname = True 573*800a58d9SAndroid Build Coastguard Worker self.mock_config.connect_hostname = False 574*800a58d9SAndroid Build Coastguard Worker self.assertTrue(self.AvdSpec.connect_hostname) 575*800a58d9SAndroid Build Coastguard Worker 576*800a58d9SAndroid Build Coastguard Worker # Verify fetch_cvd_version 577*800a58d9SAndroid Build Coastguard Worker self.args.fetch_cvd_build_id = None 578*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 579*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.fetch_cvd_version, "LKGB") 580*800a58d9SAndroid Build Coastguard Worker 581*800a58d9SAndroid Build Coastguard Worker self.args.fetch_cvd_build_id = "23456" 582*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 583*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.AvdSpec.fetch_cvd_version, "23456") 584*800a58d9SAndroid Build Coastguard Worker 585*800a58d9SAndroid Build Coastguard Worker self.args.trusty_branch = "trusty_branch" 586*800a58d9SAndroid Build Coastguard Worker self.args.trusty_build_id = "trusty_build_id" 587*800a58d9SAndroid Build Coastguard Worker self.args.trusty_build_target = "trusty_build_target" 588*800a58d9SAndroid Build Coastguard Worker self.AvdSpec._ProcessMiscArgs(self.args) 589*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 590*800a58d9SAndroid Build Coastguard Worker {constants.BUILD_BRANCH: "trusty_branch", 591*800a58d9SAndroid Build Coastguard Worker constants.BUILD_TARGET: "trusty_build_target", 592*800a58d9SAndroid Build Coastguard Worker constants.BUILD_ID: "trusty_build_id"}, 593*800a58d9SAndroid Build Coastguard Worker self.AvdSpec.trusty_build_info) 594*800a58d9SAndroid Build Coastguard Worker 595*800a58d9SAndroid Build Coastguard Worker 596*800a58d9SAndroid Build Coastguard Workerif __name__ == "__main__": 597*800a58d9SAndroid Build Coastguard Worker unittest.main() 598