1*800a58d9SAndroid Build Coastguard Worker# Copyright 2019 - 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 Worker 16*800a58d9SAndroid Build Coastguard Workerimport os 17*800a58d9SAndroid Build Coastguard Workerimport subprocess 18*800a58d9SAndroid Build Coastguard Workerimport unittest 19*800a58d9SAndroid Build Coastguard Worker 20*800a58d9SAndroid Build Coastguard Workerfrom unittest import mock 21*800a58d9SAndroid Build Coastguard Worker 22*800a58d9SAndroid Build Coastguard Workerfrom acloud import errors 23*800a58d9SAndroid Build Coastguard Workerfrom acloud.create import avd_spec 24*800a58d9SAndroid Build Coastguard Workerfrom acloud.create import create 25*800a58d9SAndroid Build Coastguard Workerfrom acloud.create import gce_local_image_remote_instance 26*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal import constants 27*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import driver_test_lib 28*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.lib import utils 29*800a58d9SAndroid Build Coastguard Workerfrom acloud.public import config 30*800a58d9SAndroid Build Coastguard Workerfrom acloud.setup import gcp_setup_runner 31*800a58d9SAndroid Build Coastguard Workerfrom acloud.setup import host_setup_runner 32*800a58d9SAndroid Build Coastguard Workerfrom acloud.setup import setup 33*800a58d9SAndroid Build Coastguard Worker 34*800a58d9SAndroid Build Coastguard Worker 35*800a58d9SAndroid Build Coastguard Worker# pylint: disable=invalid-name,protected-access,too-many-statements 36*800a58d9SAndroid Build Coastguard Workerclass CreateTest(driver_test_lib.BaseDriverTest): 37*800a58d9SAndroid Build Coastguard Worker """Test create functions.""" 38*800a58d9SAndroid Build Coastguard Worker 39*800a58d9SAndroid Build Coastguard Worker def testGetAvdCreatorClass(self): 40*800a58d9SAndroid Build Coastguard Worker """Test GetAvdCreatorClass.""" 41*800a58d9SAndroid Build Coastguard Worker # Checking wrong avd arg. 42*800a58d9SAndroid Build Coastguard Worker avd_type = "unknown type" 43*800a58d9SAndroid Build Coastguard Worker ins_type = "unknown ins" 44*800a58d9SAndroid Build Coastguard Worker image_source = "unknown image" 45*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.UnsupportedInstanceImageType): 46*800a58d9SAndroid Build Coastguard Worker create.GetAvdCreatorClass(avd_type, ins_type, image_source) 47*800a58d9SAndroid Build Coastguard Worker 48*800a58d9SAndroid Build Coastguard Worker # Checking right avd arg. 49*800a58d9SAndroid Build Coastguard Worker avd_creator_class = create.GetAvdCreatorClass( 50*800a58d9SAndroid Build Coastguard Worker constants.TYPE_GCE, 51*800a58d9SAndroid Build Coastguard Worker constants.INSTANCE_TYPE_REMOTE, 52*800a58d9SAndroid Build Coastguard Worker constants.IMAGE_SRC_LOCAL) 53*800a58d9SAndroid Build Coastguard Worker self.assertEqual(avd_creator_class, 54*800a58d9SAndroid Build Coastguard Worker gce_local_image_remote_instance.GceLocalImageRemoteInstance) 55*800a58d9SAndroid Build Coastguard Worker 56*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access 57*800a58d9SAndroid Build Coastguard Worker def testCheckForAutoconnect(self): 58*800a58d9SAndroid Build Coastguard Worker """Test CheckForAutoconnect.""" 59*800a58d9SAndroid Build Coastguard Worker args = mock.MagicMock() 60*800a58d9SAndroid Build Coastguard Worker args.autoconnect = True 61*800a58d9SAndroid Build Coastguard Worker args.no_prompt = False 62*800a58d9SAndroid Build Coastguard Worker 63*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "InteractWithQuestion", return_value="Y") 64*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "FindExecutable", return_value=None) 65*800a58d9SAndroid Build Coastguard Worker 66*800a58d9SAndroid Build Coastguard Worker # Checking autoconnect should be false if ANDROID_BUILD_TOP is not set. 67*800a58d9SAndroid Build Coastguard Worker self.Patch(os.environ, "get", return_value=None) 68*800a58d9SAndroid Build Coastguard Worker create._CheckForAutoconnect(args) 69*800a58d9SAndroid Build Coastguard Worker self.assertEqual(args.autoconnect, False) 70*800a58d9SAndroid Build Coastguard Worker 71*800a58d9SAndroid Build Coastguard Worker # checking autoconnect should be True after user make adb from src. 72*800a58d9SAndroid Build Coastguard Worker args.autoconnect = True 73*800a58d9SAndroid Build Coastguard Worker self.Patch(subprocess, "check_call", return_value=True) 74*800a58d9SAndroid Build Coastguard Worker self.Patch(os.environ, "get", return_value="/fake_dir2") 75*800a58d9SAndroid Build Coastguard Worker create._CheckForAutoconnect(args) 76*800a58d9SAndroid Build Coastguard Worker self.assertEqual(args.autoconnect, True) 77*800a58d9SAndroid Build Coastguard Worker 78*800a58d9SAndroid Build Coastguard Worker # checking autoconnect should be False if adb is not built. 79*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "InteractWithQuestion", return_value="N") 80*800a58d9SAndroid Build Coastguard Worker create._CheckForAutoconnect(args) 81*800a58d9SAndroid Build Coastguard Worker self.assertEqual(args.autoconnect, False) 82*800a58d9SAndroid Build Coastguard Worker 83*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access,no-member 84*800a58d9SAndroid Build Coastguard Worker def testCheckForSetup(self): 85*800a58d9SAndroid Build Coastguard Worker """Test _CheckForSetup.""" 86*800a58d9SAndroid Build Coastguard Worker args = mock.MagicMock() 87*800a58d9SAndroid Build Coastguard Worker args.autoconnect = constants.INS_KEY_WEBRTC 88*800a58d9SAndroid Build Coastguard Worker args.local_instance = None 89*800a58d9SAndroid Build Coastguard Worker args.args.config_file = "fake_path" 90*800a58d9SAndroid Build Coastguard Worker self.Patch(gcp_setup_runner.GcpTaskRunner, 91*800a58d9SAndroid Build Coastguard Worker "ShouldRun", 92*800a58d9SAndroid Build Coastguard Worker return_value=False) 93*800a58d9SAndroid Build Coastguard Worker self.Patch(host_setup_runner.HostBasePkgInstaller, 94*800a58d9SAndroid Build Coastguard Worker "ShouldRun", 95*800a58d9SAndroid Build Coastguard Worker return_value=False) 96*800a58d9SAndroid Build Coastguard Worker self.Patch(host_setup_runner.LocalCAHostSetup, 97*800a58d9SAndroid Build Coastguard Worker "ShouldRun", 98*800a58d9SAndroid Build Coastguard Worker return_value=False) 99*800a58d9SAndroid Build Coastguard Worker self.Patch(host_setup_runner.CuttlefishHostSetup, 100*800a58d9SAndroid Build Coastguard Worker "ShouldRun", 101*800a58d9SAndroid Build Coastguard Worker return_value=False) 102*800a58d9SAndroid Build Coastguard Worker self.Patch(config, "AcloudConfigManager") 103*800a58d9SAndroid Build Coastguard Worker self.Patch(config.AcloudConfigManager, "Load") 104*800a58d9SAndroid Build Coastguard Worker self.Patch(setup, "Run") 105*800a58d9SAndroid Build Coastguard Worker self.Patch(utils, "InteractWithQuestion", return_value="Y") 106*800a58d9SAndroid Build Coastguard Worker 107*800a58d9SAndroid Build Coastguard Worker # Checking Setup.Run should not be called if all runner's ShouldRun func 108*800a58d9SAndroid Build Coastguard Worker # return False 109*800a58d9SAndroid Build Coastguard Worker create._CheckForSetup(args) 110*800a58d9SAndroid Build Coastguard Worker gcp_setup_runner.GcpTaskRunner.ShouldRun.assert_called_once() 111*800a58d9SAndroid Build Coastguard Worker host_setup_runner.HostBasePkgInstaller.ShouldRun.assert_called_once() 112*800a58d9SAndroid Build Coastguard Worker host_setup_runner.LocalCAHostSetup.ShouldRun.assert_called_once() 113*800a58d9SAndroid Build Coastguard Worker setup.Run.assert_not_called() 114*800a58d9SAndroid Build Coastguard Worker 115*800a58d9SAndroid Build Coastguard Worker # Checking Setup.Run should be called if runner's ShouldRun func return 116*800a58d9SAndroid Build Coastguard Worker # True 117*800a58d9SAndroid Build Coastguard Worker self.Patch(gcp_setup_runner.GcpTaskRunner, 118*800a58d9SAndroid Build Coastguard Worker "ShouldRun", 119*800a58d9SAndroid Build Coastguard Worker return_value=True) 120*800a58d9SAndroid Build Coastguard Worker create._CheckForSetup(args) 121*800a58d9SAndroid Build Coastguard Worker setup.Run.assert_called_once() 122*800a58d9SAndroid Build Coastguard Worker 123*800a58d9SAndroid Build Coastguard Worker # Should or not run gcp_setup or install packages. 124*800a58d9SAndroid Build Coastguard Worker # Test with remote instance remote image case. 125*800a58d9SAndroid Build Coastguard Worker self.Patch(gcp_setup_runner.GcpTaskRunner, 126*800a58d9SAndroid Build Coastguard Worker "ShouldRun") 127*800a58d9SAndroid Build Coastguard Worker self.Patch(host_setup_runner.AvdPkgInstaller, 128*800a58d9SAndroid Build Coastguard Worker "ShouldRun") 129*800a58d9SAndroid Build Coastguard Worker self.Patch(host_setup_runner.CuttlefishHostSetup, 130*800a58d9SAndroid Build Coastguard Worker "ShouldRun") 131*800a58d9SAndroid Build Coastguard Worker args.local_instance = None 132*800a58d9SAndroid Build Coastguard Worker args.local_image = None 133*800a58d9SAndroid Build Coastguard Worker create._CheckForSetup(args) 134*800a58d9SAndroid Build Coastguard Worker self.assertEqual(gcp_setup_runner.GcpTaskRunner.ShouldRun.call_count, 1) 135*800a58d9SAndroid Build Coastguard Worker self.assertEqual(host_setup_runner.AvdPkgInstaller.ShouldRun.call_count, 0) 136*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 137*800a58d9SAndroid Build Coastguard Worker host_setup_runner.CuttlefishHostSetup.ShouldRun.call_count, 0) 138*800a58d9SAndroid Build Coastguard Worker gcp_setup_runner.GcpTaskRunner.ShouldRun.reset_mock() 139*800a58d9SAndroid Build Coastguard Worker host_setup_runner.AvdPkgInstaller.ShouldRun.reset_mock() 140*800a58d9SAndroid Build Coastguard Worker host_setup_runner.CuttlefishHostSetup.ShouldRun.reset_mock() 141*800a58d9SAndroid Build Coastguard Worker 142*800a58d9SAndroid Build Coastguard Worker # Test with remote instance local image case. 143*800a58d9SAndroid Build Coastguard Worker args.local_instance = None 144*800a58d9SAndroid Build Coastguard Worker args.local_image = "" 145*800a58d9SAndroid Build Coastguard Worker create._CheckForSetup(args) 146*800a58d9SAndroid Build Coastguard Worker self.assertEqual(gcp_setup_runner.GcpTaskRunner.ShouldRun.call_count, 1) 147*800a58d9SAndroid Build Coastguard Worker self.assertEqual(host_setup_runner.AvdPkgInstaller.ShouldRun.call_count, 0) 148*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 149*800a58d9SAndroid Build Coastguard Worker host_setup_runner.CuttlefishHostSetup.ShouldRun.call_count, 0) 150*800a58d9SAndroid Build Coastguard Worker gcp_setup_runner.GcpTaskRunner.ShouldRun.reset_mock() 151*800a58d9SAndroid Build Coastguard Worker host_setup_runner.AvdPkgInstaller.ShouldRun.reset_mock() 152*800a58d9SAndroid Build Coastguard Worker host_setup_runner.CuttlefishHostSetup.ShouldRun.reset_mock() 153*800a58d9SAndroid Build Coastguard Worker 154*800a58d9SAndroid Build Coastguard Worker # Test with local instance remote image case. 155*800a58d9SAndroid Build Coastguard Worker args.local_instance = 0 156*800a58d9SAndroid Build Coastguard Worker args.local_image = None 157*800a58d9SAndroid Build Coastguard Worker create._CheckForSetup(args) 158*800a58d9SAndroid Build Coastguard Worker self.assertEqual(gcp_setup_runner.GcpTaskRunner.ShouldRun.call_count, 1) 159*800a58d9SAndroid Build Coastguard Worker self.assertEqual(host_setup_runner.AvdPkgInstaller.ShouldRun.call_count, 1) 160*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 161*800a58d9SAndroid Build Coastguard Worker host_setup_runner.CuttlefishHostSetup.ShouldRun.call_count, 1) 162*800a58d9SAndroid Build Coastguard Worker gcp_setup_runner.GcpTaskRunner.ShouldRun.reset_mock() 163*800a58d9SAndroid Build Coastguard Worker host_setup_runner.AvdPkgInstaller.ShouldRun.reset_mock() 164*800a58d9SAndroid Build Coastguard Worker host_setup_runner.CuttlefishHostSetup.ShouldRun.reset_mock() 165*800a58d9SAndroid Build Coastguard Worker 166*800a58d9SAndroid Build Coastguard Worker # Test with local instance local image case. 167*800a58d9SAndroid Build Coastguard Worker args.local_instance = 0 168*800a58d9SAndroid Build Coastguard Worker args.local_image = "" 169*800a58d9SAndroid Build Coastguard Worker create._CheckForSetup(args) 170*800a58d9SAndroid Build Coastguard Worker self.assertEqual(gcp_setup_runner.GcpTaskRunner.ShouldRun.call_count, 0) 171*800a58d9SAndroid Build Coastguard Worker self.assertEqual(host_setup_runner.AvdPkgInstaller.ShouldRun.call_count, 1) 172*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 173*800a58d9SAndroid Build Coastguard Worker host_setup_runner.CuttlefishHostSetup.ShouldRun.call_count, 1) 174*800a58d9SAndroid Build Coastguard Worker gcp_setup_runner.GcpTaskRunner.ShouldRun.reset_mock() 175*800a58d9SAndroid Build Coastguard Worker host_setup_runner.AvdPkgInstaller.ShouldRun.reset_mock() 176*800a58d9SAndroid Build Coastguard Worker host_setup_runner.CuttlefishHostSetup.ShouldRun.reset_mock() 177*800a58d9SAndroid Build Coastguard Worker 178*800a58d9SAndroid Build Coastguard Worker # pylint: disable=no-member 179*800a58d9SAndroid Build Coastguard Worker def testRun(self): 180*800a58d9SAndroid Build Coastguard Worker """Test Run.""" 181*800a58d9SAndroid Build Coastguard Worker args = mock.MagicMock() 182*800a58d9SAndroid Build Coastguard Worker spec = mock.MagicMock() 183*800a58d9SAndroid Build Coastguard Worker spec.avd_type = constants.TYPE_GCE 184*800a58d9SAndroid Build Coastguard Worker spec.instance_type = constants.INSTANCE_TYPE_REMOTE 185*800a58d9SAndroid Build Coastguard Worker spec.image_source = constants.IMAGE_SRC_LOCAL 186*800a58d9SAndroid Build Coastguard Worker self.Patch(avd_spec, "AVDSpec", return_value=spec) 187*800a58d9SAndroid Build Coastguard Worker self.Patch(config, "GetAcloudConfig") 188*800a58d9SAndroid Build Coastguard Worker self.Patch(create, "PreRunCheck") 189*800a58d9SAndroid Build Coastguard Worker self.Patch(gce_local_image_remote_instance.GceLocalImageRemoteInstance, 190*800a58d9SAndroid Build Coastguard Worker "Create") 191*800a58d9SAndroid Build Coastguard Worker 192*800a58d9SAndroid Build Coastguard Worker # Checking PreRunCheck func should be called if not skip_pre_run_check 193*800a58d9SAndroid Build Coastguard Worker args.skip_pre_run_check = False 194*800a58d9SAndroid Build Coastguard Worker create.Run(args) 195*800a58d9SAndroid Build Coastguard Worker create.PreRunCheck.assert_called_once() 196*800a58d9SAndroid Build Coastguard Worker 197*800a58d9SAndroid Build Coastguard Worker # Checking PreRunCheck func should not be called if skip_pre_run_check 198*800a58d9SAndroid Build Coastguard Worker args.skip_pre_run_check = True 199*800a58d9SAndroid Build Coastguard Worker self.Patch(create, "PreRunCheck") 200*800a58d9SAndroid Build Coastguard Worker create.Run(args) 201*800a58d9SAndroid Build Coastguard Worker create.PreRunCheck.assert_not_called() 202*800a58d9SAndroid Build Coastguard Worker 203*800a58d9SAndroid Build Coastguard Worker 204*800a58d9SAndroid Build Coastguard Workerif __name__ == "__main__": 205*800a58d9SAndroid Build Coastguard Worker unittest.main() 206