1*800a58d9SAndroid Build Coastguard Worker#!/usr/bin/env python 2*800a58d9SAndroid Build Coastguard Worker# 3*800a58d9SAndroid Build Coastguard Worker# Copyright 2016 - The Android Open Source Project 4*800a58d9SAndroid Build Coastguard Worker# 5*800a58d9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*800a58d9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*800a58d9SAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*800a58d9SAndroid Build Coastguard Worker# 9*800a58d9SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*800a58d9SAndroid Build Coastguard Worker# 11*800a58d9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*800a58d9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*800a58d9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*800a58d9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*800a58d9SAndroid Build Coastguard Worker# limitations under the License. 16*800a58d9SAndroid Build Coastguard Worker 17*800a58d9SAndroid Build Coastguard Worker"""Tests for acloud.public.config.""" 18*800a58d9SAndroid Build Coastguard Workerimport unittest 19*800a58d9SAndroid Build Coastguard Workerimport os 20*800a58d9SAndroid Build Coastguard Workerimport tempfile 21*800a58d9SAndroid Build Coastguard Worker 22*800a58d9SAndroid Build Coastguard Workerfrom unittest import mock 23*800a58d9SAndroid Build Coastguard Worker 24*800a58d9SAndroid Build Coastguard Worker# pylint: disable=no-name-in-module,import-error 25*800a58d9SAndroid Build Coastguard Workerfrom acloud import errors 26*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.proto import internal_config_pb2 27*800a58d9SAndroid Build Coastguard Workerfrom acloud.internal.proto import user_config_pb2 28*800a58d9SAndroid Build Coastguard Workerfrom acloud.public import config 29*800a58d9SAndroid Build Coastguard Worker 30*800a58d9SAndroid Build Coastguard Worker 31*800a58d9SAndroid Build Coastguard Workerclass AcloudConfigManagerTest(unittest.TestCase): 32*800a58d9SAndroid Build Coastguard Worker """Test acloud configuration manager.""" 33*800a58d9SAndroid Build Coastguard Worker 34*800a58d9SAndroid Build Coastguard Worker USER_CONFIG = """ 35*800a58d9SAndroid Build Coastguard Workerservice_account_name: "[email protected]" 36*800a58d9SAndroid Build Coastguard Workerservice_account_private_key_path: "/path/to/service/account/key" 37*800a58d9SAndroid Build Coastguard Workerservice_account_json_private_key_path: "/path/to/service/account/json_key" 38*800a58d9SAndroid Build Coastguard Workerproject: "fake-project" 39*800a58d9SAndroid Build Coastguard Workerzone: "us-central1-f" 40*800a58d9SAndroid Build Coastguard Workermachine_type: "n1-standard-1" 41*800a58d9SAndroid Build Coastguard Workernetwork: "default" 42*800a58d9SAndroid Build Coastguard Workerssh_private_key_path: "/path/to/ssh/key" 43*800a58d9SAndroid Build Coastguard Workerstorage_bucket_name: "fake_bucket" 44*800a58d9SAndroid Build Coastguard Workerorientation: "portrait" 45*800a58d9SAndroid Build Coastguard Workerresolution: "1200x1200x1200x1200" 46*800a58d9SAndroid Build Coastguard Workerclient_id: "fake_client_id" 47*800a58d9SAndroid Build Coastguard Workerclient_secret: "fake_client_secret" 48*800a58d9SAndroid Build Coastguard Workerextra_args_ssh_tunnel: "fake_extra_args_ssh_tunnel" 49*800a58d9SAndroid Build Coastguard Workermetadata_variable { 50*800a58d9SAndroid Build Coastguard Worker key: "metadata_1" 51*800a58d9SAndroid Build Coastguard Worker value: "metadata_value_1" 52*800a58d9SAndroid Build Coastguard Worker} 53*800a58d9SAndroid Build Coastguard Workerhw_property: "cpu:3,resolution:1080x1920,dpi:480,memory:4g,disk:10g" 54*800a58d9SAndroid Build Coastguard Workerextra_scopes: "scope1" 55*800a58d9SAndroid Build Coastguard Workerextra_scopes: "scope2" 56*800a58d9SAndroid Build Coastguard Workerbetty_image: "fake_betty_image" 57*800a58d9SAndroid Build Coastguard Worker""" 58*800a58d9SAndroid Build Coastguard Worker 59*800a58d9SAndroid Build Coastguard Worker INTERNAL_CONFIG = """ 60*800a58d9SAndroid Build Coastguard Workermin_machine_size: "n1-standard-1" 61*800a58d9SAndroid Build Coastguard Workerdisk_image_name: "avd-system.tar.gz" 62*800a58d9SAndroid Build Coastguard Workerdisk_image_mime_type: "application/x-tar" 63*800a58d9SAndroid Build Coastguard Workerdisk_image_extension: ".tar.gz" 64*800a58d9SAndroid Build Coastguard Workerdisk_raw_image_name: "disk.raw" 65*800a58d9SAndroid Build Coastguard Workerdisk_raw_image_extension: ".img" 66*800a58d9SAndroid Build Coastguard Workercreds_cache_file: ".fake_oauth2.dat" 67*800a58d9SAndroid Build Coastguard Workeruser_agent: "fake_user_agent" 68*800a58d9SAndroid Build Coastguard Workerkernel_build_target: "kernel" 69*800a58d9SAndroid Build Coastguard Workeremulator_build_target: "emulator-linux_x64_nolocationui" 70*800a58d9SAndroid Build Coastguard Worker 71*800a58d9SAndroid Build Coastguard Workerdefault_usr_cfg { 72*800a58d9SAndroid Build Coastguard Worker machine_type: "n1-standard-1" 73*800a58d9SAndroid Build Coastguard Worker network: "default" 74*800a58d9SAndroid Build Coastguard Worker stable_host_image_name: "fake_stable_host_image_name" 75*800a58d9SAndroid Build Coastguard Worker stable_host_image_project: "fake_stable_host_image_project" 76*800a58d9SAndroid Build Coastguard Worker stable_goldfish_host_image_name: "fake_stable_goldfish_host_image_name" 77*800a58d9SAndroid Build Coastguard Worker stable_goldfish_host_image_project: "fake_stable_goldfish_host_image_project" 78*800a58d9SAndroid Build Coastguard Worker instance_name_pattern: "fake_instance_name_pattern" 79*800a58d9SAndroid Build Coastguard Worker stable_cheeps_host_image_name: "fake_stable_cheeps_host_image_name" 80*800a58d9SAndroid Build Coastguard Worker stable_cheeps_host_image_project: "fake_stable_cheeps_host_image_project" 81*800a58d9SAndroid Build Coastguard Worker metadata_variable { 82*800a58d9SAndroid Build Coastguard Worker key: "metadata_1" 83*800a58d9SAndroid Build Coastguard Worker value: "metadata_value_1" 84*800a58d9SAndroid Build Coastguard Worker } 85*800a58d9SAndroid Build Coastguard Worker 86*800a58d9SAndroid Build Coastguard Worker metadata_variable { 87*800a58d9SAndroid Build Coastguard Worker key: "metadata_2" 88*800a58d9SAndroid Build Coastguard Worker value: "metadata_value_2" 89*800a58d9SAndroid Build Coastguard Worker } 90*800a58d9SAndroid Build Coastguard Worker} 91*800a58d9SAndroid Build Coastguard Worker 92*800a58d9SAndroid Build Coastguard Workerdevice_resolution_map { 93*800a58d9SAndroid Build Coastguard Worker key: "nexus5" 94*800a58d9SAndroid Build Coastguard Worker value: "1080x1920x32x480" 95*800a58d9SAndroid Build Coastguard Worker} 96*800a58d9SAndroid Build Coastguard Worker 97*800a58d9SAndroid Build Coastguard Workerdevice_default_orientation_map { 98*800a58d9SAndroid Build Coastguard Worker key: "nexus5" 99*800a58d9SAndroid Build Coastguard Worker value: "portrait" 100*800a58d9SAndroid Build Coastguard Worker} 101*800a58d9SAndroid Build Coastguard Worker 102*800a58d9SAndroid Build Coastguard Workervalid_branch_and_min_build_id { 103*800a58d9SAndroid Build Coastguard Worker key: "aosp-master" 104*800a58d9SAndroid Build Coastguard Worker value: 0 105*800a58d9SAndroid Build Coastguard Worker} 106*800a58d9SAndroid Build Coastguard Worker 107*800a58d9SAndroid Build Coastguard Workercommon_hw_property_map { 108*800a58d9SAndroid Build Coastguard Worker key: "phone" 109*800a58d9SAndroid Build Coastguard Worker value: "cpu:2,resolution:1080x1920,dpi:420,memory:4g,disk:8g" 110*800a58d9SAndroid Build Coastguard Worker} 111*800a58d9SAndroid Build Coastguard Worker 112*800a58d9SAndroid Build Coastguard Workercommon_hw_property_map { 113*800a58d9SAndroid Build Coastguard Worker key: "auto" 114*800a58d9SAndroid Build Coastguard Worker value: "cpu:4,resolution:1280x800,dpi:160,memory:4g" 115*800a58d9SAndroid Build Coastguard Worker} 116*800a58d9SAndroid Build Coastguard Worker""" 117*800a58d9SAndroid Build Coastguard Worker 118*800a58d9SAndroid Build Coastguard Worker def setUp(self): 119*800a58d9SAndroid Build Coastguard Worker self.config_file = mock.MagicMock() 120*800a58d9SAndroid Build Coastguard Worker # initial config with test config. 121*800a58d9SAndroid Build Coastguard Worker self.config_file.read.return_value = self.INTERNAL_CONFIG 122*800a58d9SAndroid Build Coastguard Worker internal_cfg = config.AcloudConfigManager.LoadConfigFromProtocolBuffer( 123*800a58d9SAndroid Build Coastguard Worker self.config_file, internal_config_pb2.InternalConfig) 124*800a58d9SAndroid Build Coastguard Worker self.config_file.read.return_value = self.USER_CONFIG 125*800a58d9SAndroid Build Coastguard Worker usr_cfg = config.AcloudConfigManager.LoadConfigFromProtocolBuffer( 126*800a58d9SAndroid Build Coastguard Worker self.config_file, user_config_pb2.UserConfig) 127*800a58d9SAndroid Build Coastguard Worker self.cfg = config.AcloudConfig(usr_cfg, internal_cfg) 128*800a58d9SAndroid Build Coastguard Worker 129*800a58d9SAndroid Build Coastguard Worker # pylint: disable=no-member 130*800a58d9SAndroid Build Coastguard Worker def testLoadUserConfig(self): 131*800a58d9SAndroid Build Coastguard Worker """Test loading user config.""" 132*800a58d9SAndroid Build Coastguard Worker self.config_file.read.return_value = self.USER_CONFIG 133*800a58d9SAndroid Build Coastguard Worker cfg = config.AcloudConfigManager.LoadConfigFromProtocolBuffer( 134*800a58d9SAndroid Build Coastguard Worker self.config_file, user_config_pb2.UserConfig) 135*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.service_account_name, 136*800a58d9SAndroid Build Coastguard Worker "[email protected]") 137*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.service_account_private_key_path, 138*800a58d9SAndroid Build Coastguard Worker "/path/to/service/account/key") 139*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.service_account_json_private_key_path, 140*800a58d9SAndroid Build Coastguard Worker "/path/to/service/account/json_key") 141*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.project, "fake-project") 142*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.zone, "us-central1-f") 143*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.machine_type, "n1-standard-1") 144*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.network, "default") 145*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.ssh_private_key_path, "/path/to/ssh/key") 146*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.storage_bucket_name, "fake_bucket") 147*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.orientation, "portrait") 148*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.resolution, "1200x1200x1200x1200") 149*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.client_id, "fake_client_id") 150*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.client_secret, "fake_client_secret") 151*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.extra_args_ssh_tunnel, "fake_extra_args_ssh_tunnel") 152*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 153*800a58d9SAndroid Build Coastguard Worker dict(cfg.metadata_variable.items()), 154*800a58d9SAndroid Build Coastguard Worker {"metadata_1": "metadata_value_1"}) 155*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.hw_property, 156*800a58d9SAndroid Build Coastguard Worker "cpu:3,resolution:1080x1920,dpi:480,memory:4g," 157*800a58d9SAndroid Build Coastguard Worker "disk:10g") 158*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.extra_scopes, ["scope1", "scope2"]) 159*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.betty_image, "fake_betty_image") 160*800a58d9SAndroid Build Coastguard Worker 161*800a58d9SAndroid Build Coastguard Worker # pylint: disable=protected-access 162*800a58d9SAndroid Build Coastguard Worker @mock.patch("os.makedirs") 163*800a58d9SAndroid Build Coastguard Worker @mock.patch("os.path.exists") 164*800a58d9SAndroid Build Coastguard Worker def testLoadUserConfigLogic(self, mock_file_exist, _mock_makedirs): 165*800a58d9SAndroid Build Coastguard Worker """Test load user config logic. 166*800a58d9SAndroid Build Coastguard Worker 167*800a58d9SAndroid Build Coastguard Worker Load user config with some special design. 168*800a58d9SAndroid Build Coastguard Worker 1. User specified user config: 169*800a58d9SAndroid Build Coastguard Worker If user config didn't exist: Raise exception. 170*800a58d9SAndroid Build Coastguard Worker 2. User didn't specify user config, use default config: 171*800a58d9SAndroid Build Coastguard Worker If default config didn't exist: Initialize empty data. 172*800a58d9SAndroid Build Coastguard Worker """ 173*800a58d9SAndroid Build Coastguard Worker config_specify = config.AcloudConfigManager(self.config_file) 174*800a58d9SAndroid Build Coastguard Worker self.config_file.read.return_value = self.USER_CONFIG 175*800a58d9SAndroid Build Coastguard Worker self.assertEqual(config_specify.user_config_path, self.config_file) 176*800a58d9SAndroid Build Coastguard Worker mock_file_exist.return_value = False 177*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.ConfigError): 178*800a58d9SAndroid Build Coastguard Worker config_specify.Load() 179*800a58d9SAndroid Build Coastguard Worker # Test default config 180*800a58d9SAndroid Build Coastguard Worker config_unspecify = config.AcloudConfigManager(None) 181*800a58d9SAndroid Build Coastguard Worker cfg = config_unspecify.Load() 182*800a58d9SAndroid Build Coastguard Worker self.assertEqual(config_unspecify.user_config_path, 183*800a58d9SAndroid Build Coastguard Worker config.GetDefaultConfigFile()) 184*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.project, "") 185*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.zone, "") 186*800a58d9SAndroid Build Coastguard Worker 187*800a58d9SAndroid Build Coastguard Worker # Test default user config exist 188*800a58d9SAndroid Build Coastguard Worker mock_file_exist.return_value = True 189*800a58d9SAndroid Build Coastguard Worker # Write the config data into a tmp file and have GetDefaultConfigFile 190*800a58d9SAndroid Build Coastguard Worker # return that. 191*800a58d9SAndroid Build Coastguard Worker _, temp_cfg_file_path = tempfile.mkstemp() 192*800a58d9SAndroid Build Coastguard Worker with open(temp_cfg_file_path, "w") as cfg_file: 193*800a58d9SAndroid Build Coastguard Worker cfg_file.writelines(self.USER_CONFIG) 194*800a58d9SAndroid Build Coastguard Worker default_patcher = mock.patch.object(config, "GetDefaultConfigFile", 195*800a58d9SAndroid Build Coastguard Worker return_value=temp_cfg_file_path) 196*800a58d9SAndroid Build Coastguard Worker default_patcher.start() 197*800a58d9SAndroid Build Coastguard Worker try: 198*800a58d9SAndroid Build Coastguard Worker config_exist = config.AcloudConfigManager(None) 199*800a58d9SAndroid Build Coastguard Worker cfg = config_exist.Load() 200*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.project, "fake-project") 201*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.zone, "us-central1-f") 202*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.client_id, "fake_client_id") 203*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.client_secret, "fake_client_secret") 204*800a58d9SAndroid Build Coastguard Worker finally: 205*800a58d9SAndroid Build Coastguard Worker # Delete tmp file 206*800a58d9SAndroid Build Coastguard Worker os.remove(temp_cfg_file_path) 207*800a58d9SAndroid Build Coastguard Worker default_patcher.stop() 208*800a58d9SAndroid Build Coastguard Worker 209*800a58d9SAndroid Build Coastguard Worker def testLoadInternalConfig(self): 210*800a58d9SAndroid Build Coastguard Worker """Test loading internal config.""" 211*800a58d9SAndroid Build Coastguard Worker self.config_file.read.return_value = self.INTERNAL_CONFIG 212*800a58d9SAndroid Build Coastguard Worker cfg = config.AcloudConfigManager.LoadConfigFromProtocolBuffer( 213*800a58d9SAndroid Build Coastguard Worker self.config_file, internal_config_pb2.InternalConfig) 214*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.min_machine_size, "n1-standard-1") 215*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.disk_image_name, "avd-system.tar.gz") 216*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.disk_image_mime_type, "application/x-tar") 217*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.disk_image_extension, ".tar.gz") 218*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.disk_raw_image_name, "disk.raw") 219*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.disk_raw_image_extension, ".img") 220*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.creds_cache_file, ".fake_oauth2.dat") 221*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.user_agent, "fake_user_agent") 222*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.machine_type, "n1-standard-1") 223*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.network, "default") 224*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 225*800a58d9SAndroid Build Coastguard Worker dict(cfg.default_usr_cfg.metadata_variable.items()), 226*800a58d9SAndroid Build Coastguard Worker {"metadata_1": "metadata_value_1", 227*800a58d9SAndroid Build Coastguard Worker "metadata_2": "metadata_value_2"}) 228*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 229*800a58d9SAndroid Build Coastguard Worker dict(cfg.device_resolution_map.items()), 230*800a58d9SAndroid Build Coastguard Worker {"nexus5": "1080x1920x32x480"}) 231*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 232*800a58d9SAndroid Build Coastguard Worker dict(cfg.device_default_orientation_map.items()), 233*800a58d9SAndroid Build Coastguard Worker {"nexus5": "portrait"}) 234*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 235*800a58d9SAndroid Build Coastguard Worker dict(cfg.valid_branch_and_min_build_id.items()), 236*800a58d9SAndroid Build Coastguard Worker {"aosp-master": 0}) 237*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.stable_host_image_name, 238*800a58d9SAndroid Build Coastguard Worker "fake_stable_host_image_name") 239*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.stable_host_image_project, 240*800a58d9SAndroid Build Coastguard Worker "fake_stable_host_image_project") 241*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.kernel_build_target, "kernel") 242*800a58d9SAndroid Build Coastguard Worker 243*800a58d9SAndroid Build Coastguard Worker # Emulator related 244*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.stable_goldfish_host_image_name, 245*800a58d9SAndroid Build Coastguard Worker "fake_stable_goldfish_host_image_name") 246*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.stable_goldfish_host_image_project, 247*800a58d9SAndroid Build Coastguard Worker "fake_stable_goldfish_host_image_project") 248*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.emulator_build_target, "emulator-linux_x64_nolocationui") 249*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.instance_name_pattern, 250*800a58d9SAndroid Build Coastguard Worker "fake_instance_name_pattern") 251*800a58d9SAndroid Build Coastguard Worker 252*800a58d9SAndroid Build Coastguard Worker # Cheeps related 253*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.stable_cheeps_host_image_name, 254*800a58d9SAndroid Build Coastguard Worker "fake_stable_cheeps_host_image_name") 255*800a58d9SAndroid Build Coastguard Worker self.assertEqual(cfg.default_usr_cfg.stable_cheeps_host_image_project, 256*800a58d9SAndroid Build Coastguard Worker "fake_stable_cheeps_host_image_project") 257*800a58d9SAndroid Build Coastguard Worker 258*800a58d9SAndroid Build Coastguard Worker # hw property 259*800a58d9SAndroid Build Coastguard Worker self.assertEqual( 260*800a58d9SAndroid Build Coastguard Worker dict(cfg.common_hw_property_map.items()), 261*800a58d9SAndroid Build Coastguard Worker {"phone": "cpu:2,resolution:1080x1920,dpi:420,memory:4g,disk:8g", 262*800a58d9SAndroid Build Coastguard Worker "auto": "cpu:4,resolution:1280x800,dpi:160,memory:4g"}) 263*800a58d9SAndroid Build Coastguard Worker 264*800a58d9SAndroid Build Coastguard Worker def testLoadConfigFails(self): 265*800a58d9SAndroid Build Coastguard Worker """Test loading a bad file.""" 266*800a58d9SAndroid Build Coastguard Worker self.config_file.read.return_value = "malformed text" 267*800a58d9SAndroid Build Coastguard Worker with self.assertRaises(errors.ConfigError): 268*800a58d9SAndroid Build Coastguard Worker config.AcloudConfigManager.LoadConfigFromProtocolBuffer( 269*800a58d9SAndroid Build Coastguard Worker self.config_file, internal_config_pb2.InternalConfig) 270*800a58d9SAndroid Build Coastguard Worker 271*800a58d9SAndroid Build Coastguard Worker def testOverrideWithArgs(self): 272*800a58d9SAndroid Build Coastguard Worker """Test OverrideWithArgs.""" 273*800a58d9SAndroid Build Coastguard Worker # test override zone. 274*800a58d9SAndroid Build Coastguard Worker self.cfg.zone = "us-central1-f" 275*800a58d9SAndroid Build Coastguard Worker args = mock.MagicMock() 276*800a58d9SAndroid Build Coastguard Worker args.which = "create" 277*800a58d9SAndroid Build Coastguard Worker args.flavor = "phone" 278*800a58d9SAndroid Build Coastguard Worker args.zone = "us-central1-b" 279*800a58d9SAndroid Build Coastguard Worker self.cfg.OverrideWithArgs(args) 280*800a58d9SAndroid Build Coastguard Worker self.assertEqual(self.cfg.zone, "us-central1-b") 281*800a58d9SAndroid Build Coastguard Worker 282*800a58d9SAndroid Build Coastguard Worker def testGetDefaultHwProperty(self): 283*800a58d9SAndroid Build Coastguard Worker """Test GetDefaultHwProperty.""" 284*800a58d9SAndroid Build Coastguard Worker # test with "phone" flavor 285*800a58d9SAndroid Build Coastguard Worker expected = "cpu:2,resolution:1080x1920,dpi:420,memory:4g,disk:8g" 286*800a58d9SAndroid Build Coastguard Worker self.assertEqual(expected, self.cfg.GetDefaultHwProperty("phone")) 287*800a58d9SAndroid Build Coastguard Worker 288*800a58d9SAndroid Build Coastguard Worker # test with "auto" flavor 289*800a58d9SAndroid Build Coastguard Worker expected = "cpu:4,resolution:1280x800,dpi:160,memory:4g" 290*800a58d9SAndroid Build Coastguard Worker self.assertEqual(expected, self.cfg.GetDefaultHwProperty("auto")) 291*800a58d9SAndroid Build Coastguard Worker 292*800a58d9SAndroid Build Coastguard Worker def testGetMissingFields(self): 293*800a58d9SAndroid Build Coastguard Worker """Test GetMissingFields.""" 294*800a58d9SAndroid Build Coastguard Worker fields = ["project", "zone", "hw_property"] 295*800a58d9SAndroid Build Coastguard Worker self.cfg.hw_property = "" 296*800a58d9SAndroid Build Coastguard Worker expected = ["hw_property"] 297*800a58d9SAndroid Build Coastguard Worker self.assertEqual(expected, self.cfg.GetMissingFields(fields)) 298*800a58d9SAndroid Build Coastguard Worker 299*800a58d9SAndroid Build Coastguard Worker 300*800a58d9SAndroid Build Coastguard Workerif __name__ == "__main__": 301*800a58d9SAndroid Build Coastguard Worker unittest.main() 302