diff options
Diffstat (limited to 'create/local_image_local_instance_test.py')
-rw-r--r-- | create/local_image_local_instance_test.py | 112 |
1 files changed, 64 insertions, 48 deletions
diff --git a/create/local_image_local_instance_test.py b/create/local_image_local_instance_test.py index 22dfcf5b..7baf9711 100644 --- a/create/local_image_local_instance_test.py +++ b/create/local_image_local_instance_test.py @@ -15,6 +15,7 @@ # limitations under the License. """Tests for LocalImageLocalInstance.""" +import builtins import os import subprocess import tempfile @@ -36,37 +37,37 @@ class LocalImageLocalInstanceTest(driver_test_lib.BaseDriverTest): LAUNCH_CVD_CMD_WITH_DISK = """sg group1 <<EOF sg group2 -launch_cvd -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -cpus fake -x_res fake -y_res fake -dpi fake -memory_mb fake -blank_data_image_mb fake -data_policy always_create -start_vnc_server=true +bin/cvd start -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -cpus fake -x_res fake -y_res fake -dpi fake -memory_mb fake -blank_data_image_mb fake -data_policy always_create -start_vnc_server=true EOF""" LAUNCH_CVD_CMD_NO_DISK = """sg group1 <<EOF sg group2 -launch_cvd -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -cpus fake -x_res fake -y_res fake -dpi fake -memory_mb fake -start_vnc_server=true +bin/cvd start -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -cpus fake -x_res fake -y_res fake -dpi fake -memory_mb fake -start_vnc_server=true EOF""" LAUNCH_CVD_CMD_NO_DISK_WITH_GPU = """sg group1 <<EOF sg group2 -launch_cvd -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -cpus fake -x_res fake -y_res fake -dpi fake -memory_mb fake -start_vnc_server=true +bin/cvd start -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -cpus fake -x_res fake -y_res fake -dpi fake -memory_mb fake -start_vnc_server=true EOF""" LAUNCH_CVD_CMD_WITH_WEBRTC = """sg group1 <<EOF sg group2 -launch_cvd -daemon -config=auto -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -start_webrtc=true +bin/cvd start -daemon -config=auto -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -start_webrtc=true EOF""" LAUNCH_CVD_CMD_WITH_MIXED_IMAGES = """sg group1 <<EOF sg group2 -launch_cvd -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -start_vnc_server=true -super_image=fake_super_image -boot_image=fake_boot_image +bin/cvd start -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -start_vnc_server=true -super_image=fake_super_image -boot_image=fake_boot_image -vendor_boot_image=fake_vendor_boot_image EOF""" LAUNCH_CVD_CMD_WITH_ARGS = """sg group1 <<EOF sg group2 -launch_cvd -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -start_vnc_server=true -setupwizard_mode=REQUIRED +bin/cvd start -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -start_vnc_server=true -setupwizard_mode=REQUIRED EOF""" LAUNCH_CVD_CMD_WITH_OPENWRT = """sg group1 <<EOF sg group2 -launch_cvd -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -start_vnc_server=true -console=true +bin/launch_cvd -daemon -config=phone -system_image_dir fake_image_dir -instance_dir fake_cvd_dir -undefok=report_anonymous_usage_stats,config -report_anonymous_usage_stats=y -start_vnc_server=true -console=true EOF""" _EXPECTED_DEVICES_IN_REPORT = [ @@ -117,7 +118,8 @@ EOF""" """Test _CreateAVD.""" mock_utils.IsSupportedPlatform.return_value = True mock_get_image.return_value = local_image_local_instance.ArtifactPaths( - "/image/path", "/host/bin/path", "host/usr/path", None, None, None, None) + "/image/path", "/host/bin/path", "host/usr/path", + None, None, None, None, None) mock_check_running_cvd.return_value = True mock_avd_spec = mock.Mock() mock_lock = mock.Mock() @@ -198,7 +200,8 @@ EOF""" "/instances/cvd/config") artifact_paths = local_image_local_instance.ArtifactPaths( "/image/path", "/host/bin/path", "/host/usr/path", "/misc/info/path", - "/ota/tools/dir", "/system/image/path", "/boot/image/path") + "/ota/tools/dir", "/system/image/path", "/boot/image/path", + "/vendor_boot/image/path") mock_ota_tools_object = mock.Mock() mock_ota_tools.OtaTools.return_value = mock_ota_tools_object mock_avd_spec = mock.Mock( @@ -287,24 +290,29 @@ EOF""" mock_avd_spec) mock_ota_tools.FindOtaToolsDir.assert_not_called() - self.assertEqual(paths, (image_dir, cvd_dir, cvd_dir, None, None, None, None)) + self.assertEqual(paths, (image_dir, cvd_dir, cvd_dir, + None, None, None, None, None)) @mock.patch("acloud.create.local_image_local_instance.ota_tools") - def testGetImageFromBuildEnvironment(self, mock_ota_tools): + @mock.patch("acloud.create.local_image_local_instance.cvd_utils") + def testGetImageFromBuildEnvironment(self, mock_cvd_utils, mock_ota_tools): """Test GetImageArtifactsPath with files in build environment.""" + boot_image_path = "/mock/boot.img" + vendor_boot_image_path = "/mock/vendor_boot.img" + mock_cvd_utils.FindBootImages.return_value = (boot_image_path, + vendor_boot_image_path) + with tempfile.TemporaryDirectory() as temp_dir: image_dir = os.path.join(temp_dir, "image") cvd_dir = os.path.join(temp_dir, "cvd-host_package") mock_ota_tools.FindOtaToolsDir.return_value = cvd_dir extra_image_dir = os.path.join(temp_dir, "extra_image") system_image_path = os.path.join(extra_image_dir, "system.img") - boot_image_path = os.path.join(extra_image_dir, "boot.img") misc_info_path = os.path.join(image_dir, "misc_info.txt") self._CreateEmptyFile(os.path.join(image_dir, "vbmeta.img")) self._CreateEmptyFile(os.path.join(cvd_dir, "bin", "launch_cvd")) self._CreateEmptyFile(os.path.join(cvd_dir, "usr/share/webrtc/certs", "server.crt")) self._CreateEmptyFile(system_image_path) - self._CreateEmptyFile(boot_image_path) self._CreateEmptyFile(os.path.join(extra_image_dir, "boot-debug.img")) self._CreateEmptyFile(misc_info_path) @@ -324,29 +332,33 @@ EOF""" mock_avd_spec) mock_ota_tools.FindOtaToolsDir.assert_called_with([cvd_dir, "/cvd"]) + mock_cvd_utils.FindBootImages.asssert_called_with(extra_image_dir) self.assertEqual(paths, (image_dir, cvd_dir, cvd_dir, misc_info_path, cvd_dir, - system_image_path, boot_image_path)) + system_image_path, boot_image_path, + vendor_boot_image_path)) @mock.patch("acloud.create.local_image_local_instance.ota_tools") - def testGetImageFromTargetFiles(self, mock_ota_tools): + @mock.patch("acloud.create.local_image_local_instance.cvd_utils") + def testGetImageFromTargetFiles(self, mock_cvd_utils, mock_ota_tools): """Test GetImageArtifactsPath with extracted target files.""" ota_tools_dir = "/mock_ota_tools" mock_ota_tools.FindOtaToolsDir.return_value = ota_tools_dir + boot_image_path = "/mock/boot.img" + mock_cvd_utils.FindBootImages.return_value = (boot_image_path, None) with tempfile.TemporaryDirectory() as temp_dir: image_dir = os.path.join(temp_dir, "image") cvd_dir = os.path.join(temp_dir, "cvd-host_package") system_image_path = os.path.join(temp_dir, "system", "test.img") misc_info_path = os.path.join(image_dir, "META", "misc_info.txt") - boot_image_path = os.path.join(temp_dir, "boot", "test.img") + self._CreateEmptyFile(os.path.join(image_dir, "IMAGES", "vbmeta.img")) self._CreateEmptyFile(os.path.join(cvd_dir, "bin", "launch_cvd")) self._CreateEmptyFile(os.path.join(cvd_dir, "usr/share/webrtc/certs", "server.crt")) self._CreateEmptyFile(system_image_path) self._CreateEmptyFile(misc_info_path) - self._CreateEmptyFile(boot_image_path) mock_avd_spec = mock.Mock( local_image_dir=image_dir, @@ -362,10 +374,11 @@ EOF""" mock_ota_tools.FindOtaToolsDir.assert_called_with( [ota_tools_dir, cvd_dir]) + mock_cvd_utils.FindBootImages.assert_called_with(boot_image_path) self.assertEqual(paths, (os.path.join(image_dir, "IMAGES"), cvd_dir, cvd_dir, misc_info_path, ota_tools_dir, system_image_path, - boot_image_path)) + boot_image_path, None)) @mock.patch.object(utils, "CheckUserInGroups") def testPrepareLaunchCVDCmd(self, mock_usergroups): @@ -374,50 +387,61 @@ EOF""" hw_property = {"cpu": "fake", "x_res": "fake", "y_res": "fake", "dpi":"fake", "memory": "fake", "disk": "fake"} constants.LIST_CF_USER_GROUPS = ["group1", "group2"] + mock_artifact_paths = mock.Mock( + spec=[], + image_dir="fake_image_dir", + host_bins="", + host_artifacts="host_artifacts", + misc_info=None, + ota_tools_dir=None, + system_image=None, + boot_image=None, + vendor_boot_image=None) launch_cmd = self.local_image_local_instance.PrepareLaunchCVDCmd( - constants.CMD_LAUNCH_CVD, hw_property, True, "fake_image_dir", - "fake_cvd_dir", False, True, None, None, None, "phone") + hw_property, True, mock_artifact_paths, "fake_cvd_dir", False, + True, None, None, "phone") self.assertEqual(launch_cmd, self.LAUNCH_CVD_CMD_WITH_DISK) # "disk" doesn't exist in hw_property. hw_property = {"cpu": "fake", "x_res": "fake", "y_res": "fake", "dpi": "fake", "memory": "fake"} launch_cmd = self.local_image_local_instance.PrepareLaunchCVDCmd( - constants.CMD_LAUNCH_CVD, hw_property, True, "fake_image_dir", - "fake_cvd_dir", False, True, None, None, None, "phone") + hw_property, True, mock_artifact_paths, "fake_cvd_dir", False, + True, None, None, "phone") self.assertEqual(launch_cmd, self.LAUNCH_CVD_CMD_NO_DISK) # "gpu" is enabled with "default" launch_cmd = self.local_image_local_instance.PrepareLaunchCVDCmd( - constants.CMD_LAUNCH_CVD, hw_property, True, "fake_image_dir", - "fake_cvd_dir", False, True, None, None, None, "phone") + hw_property, True, mock_artifact_paths, "fake_cvd_dir", False, + True, None, None, "phone") self.assertEqual(launch_cmd, self.LAUNCH_CVD_CMD_NO_DISK_WITH_GPU) # Following test with hw_property is None. launch_cmd = self.local_image_local_instance.PrepareLaunchCVDCmd( - constants.CMD_LAUNCH_CVD, None, True, "fake_image_dir", - "fake_cvd_dir", True, False, None, None, None, "auto") + None, True, mock_artifact_paths, "fake_cvd_dir", True, False, + None, None, "auto") self.assertEqual(launch_cmd, self.LAUNCH_CVD_CMD_WITH_WEBRTC) + mock_artifact_paths.boot_image = "fake_boot_image" + mock_artifact_paths.vendor_boot_image = "fake_vendor_boot_image" launch_cmd = self.local_image_local_instance.PrepareLaunchCVDCmd( - constants.CMD_LAUNCH_CVD, None, True, "fake_image_dir", - "fake_cvd_dir", False, True, "fake_super_image", "fake_boot_image", - None, "phone") + None, True, mock_artifact_paths, "fake_cvd_dir", False, True, + "fake_super_image", None, "phone") self.assertEqual(launch_cmd, self.LAUNCH_CVD_CMD_WITH_MIXED_IMAGES) + mock_artifact_paths.boot_image = None + mock_artifact_paths.vendor_boot_image = None # Add args into launch command with "-setupwizard_mode=REQUIRED" launch_cmd = self.local_image_local_instance.PrepareLaunchCVDCmd( - constants.CMD_LAUNCH_CVD, None, True, "fake_image_dir", - "fake_cvd_dir", False, True, None, None, - "-setupwizard_mode=REQUIRED", "phone") + None, True, mock_artifact_paths, "fake_cvd_dir", False, True, + None, "-setupwizard_mode=REQUIRED", "phone") self.assertEqual(launch_cmd, self.LAUNCH_CVD_CMD_WITH_ARGS) - # Test with "openwrt" is enabled. + # Test with "openwrt" and "use_launch_cvd" are enabled. launch_cmd = self.local_image_local_instance.PrepareLaunchCVDCmd( - constants.CMD_LAUNCH_CVD, None, True, "fake_image_dir", - "fake_cvd_dir", False, True, None, None, None, - "phone", openwrt=True) + None, True, mock_artifact_paths, "fake_cvd_dir", False, True, + None, None, "phone", openwrt=True, use_launch_cvd=True) self.assertEqual(launch_cmd, self.LAUNCH_CVD_CMD_WITH_OPENWRT) @mock.patch.object(utils, "GetUserAnswerYes") @@ -444,6 +468,7 @@ EOF""" @mock.patch.dict("os.environ", clear=True) def testLaunchCVD(self, mock_popen): """test _LaunchCvd should call subprocess.Popen with the env.""" + self.Patch(builtins, "open", mock.mock_open()) local_instance_id = 3 launch_cvd_cmd = "launch_cvd" host_bins_path = "host_bins_path" @@ -466,23 +491,15 @@ EOF""" cvd_home_dir, timeout) - mock_popen.assert_called_once_with(launch_cvd_cmd, - shell=True, - env=cvd_env, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True, - cwd=host_bins_path) + mock_popen.assert_called_once() mock_proc.communicate.assert_called_once_with(timeout=timeout) @mock.patch("acloud.create.local_image_local_instance.subprocess.Popen") def testLaunchCVDFailure(self, mock_popen): """test _LaunchCvd with subprocess errors.""" + self.Patch(builtins, "open", mock.mock_open()) mock_proc = mock.Mock(returncode=9) mock_popen.return_value = mock_proc - mock_proc.communicate.side_effect = [ - ("stdout", "first line" + ("\n" * 10) + "last line\n") - ] with self.assertRaises(errors.LaunchCVDFail) as launch_cvd_failure: self.local_image_local_instance._LaunchCvd("launch_cvd", 3, @@ -491,13 +508,12 @@ EOF""" "cvd_home_dir", 100) self.assertIn("returned 9", str(launch_cvd_failure.exception)) - self.assertNotIn("first line", str(launch_cvd_failure.exception)) - self.assertIn("last line", str(launch_cvd_failure.exception)) @mock.patch("acloud.create.local_image_local_instance.list_instance") @mock.patch("acloud.create.local_image_local_instance.subprocess.Popen") def testLaunchCVDTimeout(self, mock_popen, mock_list_instance): """test _LaunchCvd with subprocess timeout.""" + self.Patch(builtins, "open", mock.mock_open()) mock_proc = mock.Mock(returncode=255) mock_popen.return_value = mock_proc mock_proc.communicate.side_effect = [ |