1#!/usr/bin/env python 2# 3# Copyright 2018 - The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16"""Tests for acloud.internal.lib.goldfish_compute_client.""" 17import unittest 18 19from unittest import mock 20 21from acloud.internal.lib import driver_test_lib 22from acloud.internal.lib import gcompute_client 23from acloud.internal.lib import goldfish_compute_client 24 25 26class GoldfishComputeClientTest(driver_test_lib.BaseDriverTest): 27 """Test GoldfishComputeClient.""" 28 29 SSH_PUBLIC_KEY_PATH = "" 30 INSTANCE = "fake-instance" 31 IMAGE = "fake-image" 32 IMAGE_PROJECT = "fake-iamge-project" 33 MACHINE_TYPE = "fake-machine-type" 34 NETWORK = "fake-network" 35 ZONE = "fake-zone" 36 BRANCH = "fake-branch" 37 TARGET = "sdk_phone_x86_64-sdk" 38 BUILD_ID = "2263051" 39 KERNEL_BRANCH = "kernel-p-dev-android-goldfish-4.14-x86-64" 40 KERNEL_BUILD_ID = "112233" 41 KERNEL_BUILD_TARGET = "kernel_x86_64" 42 KERNEL_BUILD_ARTIFACT = "bzImage" 43 EMULATOR_BRANCH = "aosp-emu-master-dev" 44 EMULATOR_BUILD_ID = "1234567" 45 DPI = 160 46 X_RES = 720 47 Y_RES = 1280 48 METADATA = {"metadata_key": "metadata_value"} 49 EXTRA_DATA_DISK_SIZE_GB = 4 50 BOOT_DISK_SIZE_GB = 10 51 GPU = "nvidia-tesla-k80" 52 EXTRA_SCOPES = "scope1" 53 TAGS = ['http-server'] 54 LAUNCH_ARGS = "fake-args" 55 56 def _GetFakeConfig(self): 57 """Create a fake configuration object. 58 59 Returns: 60 A fake configuration mock object. 61 """ 62 fake_cfg = mock.MagicMock() 63 fake_cfg.ssh_public_key_path = self.SSH_PUBLIC_KEY_PATH 64 fake_cfg.machine_type = self.MACHINE_TYPE 65 fake_cfg.network = self.NETWORK 66 fake_cfg.zone = self.ZONE 67 fake_cfg.resolution = "{x}x{y}x32x{dpi}".format( 68 x=self.X_RES, y=self.Y_RES, dpi=self.DPI) 69 fake_cfg.metadata_variable = self.METADATA 70 fake_cfg.extra_data_disk_size_gb = self.EXTRA_DATA_DISK_SIZE_GB 71 fake_cfg.extra_scopes = self.EXTRA_SCOPES 72 fake_cfg.launch_args = self.LAUNCH_ARGS 73 return fake_cfg 74 75 def setUp(self): 76 """Set up the test.""" 77 super().setUp() 78 self.Patch(goldfish_compute_client.GoldfishComputeClient, 79 "InitResourceHandle") 80 self.goldfish_compute_client = ( 81 goldfish_compute_client.GoldfishComputeClient( 82 self._GetFakeConfig(), mock.MagicMock())) 83 self.Patch( 84 gcompute_client.ComputeClient, 85 "CompareMachineSize", 86 return_value=1) 87 self.Patch( 88 gcompute_client.ComputeClient, 89 "GetImage", 90 return_value={"diskSizeGb": 10}) 91 self.Patch(gcompute_client.ComputeClient, "CreateInstance") 92 self.Patch( 93 goldfish_compute_client.GoldfishComputeClient, 94 "_GetDiskArgs", 95 return_value=[{ 96 "fake_arg": "fake_value" 97 }]) 98 self.Patch(goldfish_compute_client.GoldfishComputeClient, 99 "_VerifyZoneByQuota", 100 return_value=True) 101 102 @mock.patch("getpass.getuser", return_value="fake_user") 103 def testCreateInstance(self, _mock_user): 104 """Test CreateInstance.""" 105 106 expected_metadata = { 107 "user": "fake_user", 108 "avd_type": "goldfish", 109 "cvd_01_fetch_android_build_target": self.TARGET, 110 "cvd_01_fetch_android_bid": 111 "{branch}/{build_id}".format( 112 branch=self.BRANCH, build_id=self.BUILD_ID), 113 "cvd_01_fetch_kernel_bid": 114 "{branch}/{build_id}".format( 115 branch=self.KERNEL_BRANCH, build_id=self.KERNEL_BUILD_ID), 116 "cvd_01_fetch_kernel_build_target": self.KERNEL_BUILD_TARGET, 117 "cvd_01_fetch_kernel_build_artifact": self.KERNEL_BUILD_ARTIFACT, 118 "cvd_01_use_custom_kernel": "true", 119 "cvd_01_fetch_emulator_bid": 120 "{branch}/{build_id}".format( 121 branch=self.EMULATOR_BRANCH, 122 build_id=self.EMULATOR_BUILD_ID), 123 "cvd_01_launch": "1", 124 "cvd_01_dpi": str(self.DPI), 125 "cvd_01_x_res": str(self.X_RES), 126 "cvd_01_y_res": str(self.Y_RES), 127 "launch_args" : self.LAUNCH_ARGS, 128 } 129 expected_metadata.update(self.METADATA) 130 expected_disk_args = [{"fake_arg": "fake_value"}] 131 132 self.goldfish_compute_client.CreateInstance( 133 self.INSTANCE, self.IMAGE, self.IMAGE_PROJECT, self.TARGET, 134 self.BRANCH, self.BUILD_ID, 135 self.KERNEL_BRANCH, 136 self.KERNEL_BUILD_ID, 137 self.KERNEL_BUILD_TARGET, 138 self.EMULATOR_BRANCH, 139 self.EMULATOR_BUILD_ID, self.EXTRA_DATA_DISK_SIZE_GB, self.GPU, 140 extra_scopes=self.EXTRA_SCOPES, 141 tags=self.TAGS, 142 launch_args=self.LAUNCH_ARGS) 143 144 # pylint: disable=no-member 145 gcompute_client.ComputeClient.CreateInstance.assert_called_with( 146 self.goldfish_compute_client, 147 instance=self.INSTANCE, 148 image_name=self.IMAGE, 149 image_project=self.IMAGE_PROJECT, 150 disk_args=expected_disk_args, 151 metadata=expected_metadata, 152 machine_type=self.MACHINE_TYPE, 153 network=self.NETWORK, 154 zone=self.ZONE, 155 gpu=self.GPU, 156 tags=self.TAGS, 157 extra_scopes=self.EXTRA_SCOPES) 158 159 160if __name__ == "__main__": 161 unittest.main() 162