xref: /aosp_15_r20/tools/acloud/public/config_test.py (revision 800a58d989c669b8eb8a71d8df53b1ba3d411444)
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