xref: /aosp_15_r20/tools/acloud/create/create_args_test.py (revision 800a58d989c669b8eb8a71d8df53b1ba3d411444)
1# Copyright 2020 - The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14"""Tests for create."""
15import os
16
17import unittest
18
19from unittest import mock
20
21from acloud import errors
22from acloud.create import create_args
23from acloud.internal import constants
24from acloud.internal.lib import driver_test_lib
25
26
27def _CreateArgs():
28    """set default pass in arguments."""
29    mock_args = mock.MagicMock(
30        flavor=None,
31        num=1,
32        adb_port=None,
33        hw_property=None,
34        stable_cheeps_host_image_name=None,
35        stable_cheeps_host_image_project=None,
36        username=None,
37        password=None,
38        cheeps_betty_image=None,
39        cheeps_features=[],
40        local_image=None,
41        local_kernel_image=None,
42        local_system_image=None,
43        local_instance_dir=None,
44        local_vendor_boot_image=None,
45        local_trusty_image=None,
46        trusty_host_package=None,
47        trusty_build_id=None,
48        trusty_branch=None,
49        trusty_build_target=None,
50        kernel_branch=None,
51        kernel_build_id=None,
52        kernel_build_target="kernel",
53        boot_branch=None,
54        boot_build_id=None,
55        boot_build_target=None,
56        boot_artifact=None,
57        system_branch=None,
58        system_build_id=None,
59        system_build_target=None,
60        bootloader_branch=None,
61        bootloader_build_id=None,
62        bootloader_build_target=None,
63        android_efi_loader_build_id=None,
64        android_efi_loader_artifact=None,
65        ota_branch=None,
66        ota_build_id=None,
67        ota_build_target=None,
68        local_instance=None,
69        remote_host=None,
70        remote_image_dir=None,
71        host_user=constants.GCE_USER,
72        host_ssh_private_key_path=None,
73        emulator_build_id=None,
74        emulator_build_target=None,
75        emulator_zip=None,
76        avd_type=constants.TYPE_CF,
77        autoconnect=constants.INS_KEY_WEBRTC)
78    return mock_args
79
80
81# pylint: disable=invalid-name,protected-access
82class CreateArgsTest(driver_test_lib.BaseDriverTest):
83    """Test create_args functions."""
84
85    def testVerifyArgs(self):
86        """test VerifyArgs."""
87        mock_args = _CreateArgs()
88        # Test args default setting shouldn't raise error.
89        self.assertEqual(None, create_args.VerifyArgs(mock_args))
90
91    def testVerifyArgs_Goldfish(self):
92        """test goldfish arguments."""
93        # emulator_build_id with wrong avd_type.
94        mock_args = _CreateArgs()
95        mock_args.emulator_build_id = "123456"
96        self.assertRaises(errors.UnsupportedCreateArgs,
97                          create_args.VerifyArgs, mock_args)
98        # Valid emulator_build_id.
99        mock_args.avd_type = constants.TYPE_GF
100        create_args.VerifyArgs(mock_args)
101        # emulator_build_target with wrong avd_type.
102        mock_args.avd_type = constants.TYPE_CF
103        mock_args.emulator_build_id = None
104        mock_args.emulator_build_target = "emulator-linux_x64_nolocationui"
105        mock_args.remote_host = "192.0.2.2"
106        self.assertRaises(errors.UnsupportedCreateArgs,
107                          create_args.VerifyArgs, mock_args)
108        mock_args.emulator_build_target = None
109        # Incomplete system build info.
110        mock_args.avd_type = constants.TYPE_GF
111        mock_args.system_build_target = "aosp_x86_64-userdebug"
112        mock_args.remote_host = "192.0.2.2"
113        self.assertRaises(errors.UnsupportedCreateArgs,
114                          create_args.VerifyArgs, mock_args)
115        mock_args.system_build_target = None
116        # Incomplete boot build info.
117        mock_args.avd_type = constants.TYPE_GF
118        mock_args.boot_build_target = "gki_x86_64-userdebug"
119        mock_args.remote_host = "192.0.2.2"
120        self.assertRaises(errors.UnsupportedCreateArgs,
121                          create_args.VerifyArgs, mock_args)
122        mock_args.boot_build_target = None
123        # System build info without remote_host.
124        mock_args.system_branch = "aosp-master"
125        mock_args.system_build_target = "aosp_x86_64-userdebug"
126        mock_args.system_build_id = "123456"
127        mock_args.remote_host = None
128        self.assertRaises(errors.UnsupportedCreateArgs,
129                          create_args.VerifyArgs, mock_args)
130        # Valid build info.
131        mock_args.emulator_build_target = "emulator-linux_x64_nolocationui"
132        mock_args.system_branch = "aosp-master"
133        mock_args.system_build_target = "aosp_x86_64-userdebug"
134        mock_args.system_build_id = "123456"
135        mock_args.boot_branch = "aosp-master"
136        mock_args.boot_build_target = "aosp_x86_64-userdebug"
137        mock_args.boot_build_id = "123456"
138        mock_args.boot_artifact = "boot-5.10.img"
139        mock_args.remote_host = "192.0.2.2"
140        create_args.VerifyArgs(mock_args)
141
142    def testVerifyTrustyArgs(self):
143        """test trusty arguments."""
144        self.Patch(os.path, "exists", return_value=True)
145
146        # wrong avd_type.
147        mock_args = _CreateArgs()
148        mock_args.local_trusty_image = "trusty_image_package.tar.gz"
149        self.assertRaises(errors.UnsupportedCreateArgs,
150                          create_args.VerifyArgs, mock_args)
151        mock_args = _CreateArgs()
152        mock_args.trusty_host_package = "trusty-host_package.tar.gz"
153        self.assertRaises(errors.UnsupportedCreateArgs,
154                          create_args.VerifyArgs, mock_args)
155        mock_args.local_trusty_image = "trusty_image_package.tar.gz"
156        # valid args for Trusty avd type.
157        mock_args.avd_type = constants.TYPE_TRUSTY
158        create_args.VerifyArgs(mock_args)
159        # remote image requires an explicit build target
160        mock_args.build_target = None
161        mock_args.local_image = None
162        self.assertRaises(errors.UnsupportedCreateArgs,
163                          create_args.VerifyArgs, mock_args)
164
165    def testVerifyArgs_ConnectWebRTC(self):
166        """test VerifyArgs args.autconnect webrtc.
167
168        WebRTC only apply to remote cuttlefish instance
169
170        """
171        mock_args = _CreateArgs()
172        mock_args.autoconnect = constants.INS_KEY_WEBRTC
173        # Test remote instance and avd_type cuttlefish(default)
174        # Test args.autoconnect webrtc shouldn't raise error.
175        self.assertEqual(None, create_args.VerifyArgs(mock_args))
176
177    def testVerifyLocalArgs(self):
178        """Test _VerifyLocalArgs."""
179        mock_args = _CreateArgs()
180        # verify local image case.
181        mock_args.local_image = "/tmp/local_image_dir"
182        self.Patch(os.path, "exists", return_value=False)
183        self.assertRaises(errors.CheckPathError,
184                          create_args._VerifyLocalArgs, mock_args)
185
186        # verify local instance
187        mock_args = _CreateArgs()
188        mock_args.local_instance_dir = "/tmp/local_instance_dir"
189        self.Patch(os.path, "exists", return_value=False)
190        self.assertRaises(errors.CheckPathError,
191                          create_args._VerifyLocalArgs, mock_args)
192
193        # verify local system image
194        mock_args = _CreateArgs()
195        mock_args.local_system_image = "/tmp/local_system_image_dir"
196        mock_args.avd_type = "cheeps"
197        self.assertRaises(errors.UnsupportedCreateArgs,
198                          create_args._VerifyLocalArgs, mock_args)
199        mock_args.avd_type = "cuttlefish"
200        self.Patch(os.path, "exists", return_value=False)
201        self.assertRaises(errors.CheckPathError,
202                          create_args._VerifyLocalArgs, mock_args)
203
204        # unsupport local-image with kernel build
205        mock_args = _CreateArgs()
206        mock_args.local_instance = None
207        mock_args.local_image = "/tmp/local_image_dir"
208        self.Patch(os.path, "exists", return_value=True)
209        mock_args.kernel_branch = "common-android12-5.4"
210        self.assertRaises(errors.UnsupportedCreateArgs,
211                          create_args._VerifyLocalArgs, mock_args)
212        mock_args.kernel_branch = None
213        mock_args.kernel_build_id = "fake_kernel_1234567"
214        self.assertRaises(errors.UnsupportedCreateArgs,
215                          create_args._VerifyLocalArgs, mock_args)
216
217
218if __name__ == "__main__":
219    unittest.main()
220