def testProcessArtifacts(self, mock_upload, mock_download):
        """test ProcessArtifacts."""
        # Test image source type is local.
        args = mock.MagicMock()
        args.config_file = ""
        args.avd_type = constants.TYPE_CF
        args.flavor = "phone"
        args.local_image = None
        avd_spec_local_img = avd_spec.AVDSpec(args)
        fake_image_name = "/fake/aosp_cf_x86_phone-img-eng.username.zip"
        fake_host_package_name = "/fake/host_package.tar.gz"
        factory_local_img = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            avd_spec_local_img,
            fake_image_name,
            fake_host_package_name)
        factory_local_img._ProcessArtifacts(constants.IMAGE_SRC_LOCAL)
        self.assertEqual(mock_upload.call_count, 1)

        # Test image source type is remote.
        args.local_image = ""
        args.build_id = "1234"
        args.branch = "fake_branch"
        args.build_target = "fake_target"
        args.system_build_id = "2345"
        args.system_branch = "sys_branch"
        args.system_build_target = "sys_target"
        args.kernel_build_id = "3456"
        args.kernel_branch = "kernel_branch"
        args.kernel_build_target = "kernel_target"
        avd_spec_remote_img = avd_spec.AVDSpec(args)
        self.Patch(cvd_compute_client_multi_stage.CvdComputeClient, "UpdateFetchCvd")
        factory_remote_img = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            avd_spec_remote_img)
        factory_remote_img._ProcessArtifacts(constants.IMAGE_SRC_REMOTE)
        self.assertEqual(mock_download.call_count, 1)
    def testRemoteHostInstanceName(self):
        """Test Remote host instance name."""
        args = mock.MagicMock()
        args.config_file = ""
        args.avd_type = constants.TYPE_CF
        args.flavor = "phone"
        args.remote_host = "1.1.1.1"
        args.local_image = None
        args.adb_port = None
        fake_avd_spec = avd_spec.AVDSpec(args)
        fake_avd_spec.cfg.enable_multi_stage = True
        fake_avd_spec._instance_name_to_reuse = None
        fake_uuid = mock.MagicMock(hex="1234")
        self.Patch(uuid, "uuid4", return_value=fake_uuid)
        self.Patch(cvd_compute_client_multi_stage.CvdComputeClient, "CreateInstance")
        self.Patch(cvd_compute_client_multi_stage.CvdComputeClient, "InitRemoteHost")
        fake_host_package_name = "/fake/host_package.tar.gz"

        fake_image_name = "/fake/aosp_cf_x86_phone-img-eng.username.zip"
        factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            fake_avd_spec,
            fake_image_name,
            fake_host_package_name)
        self.assertEqual(factory._InitRemotehost(), "host-1.1.1.1-userbuild-aosp_cf_x86_phone")

        # No image zip path, it uses local build images.
        fake_image_name = ""
        factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            fake_avd_spec,
            fake_image_name,
            fake_host_package_name)
        self.assertEqual(factory._InitRemotehost(), "host-1.1.1.1-userbuild-fake-target")
    def testGetLaunchCvdArgs(self, _mock_check_img, _mock_env):
        """test GetLaunchCvdArgs."""
        # test GetLaunchCvdArgs with avd_spec
        fake_avd_spec = avd_spec.AVDSpec(self.args)
        expeted_args = [
            "-x_res=1080", "-y_res=1920", "-dpi=240", "-cpus=2",
            "-memory_mb=4096", "-num_instances=2",
            "--setupwizard_mode=REQUIRED", "-gpu_mode=drm_virgl",
            "-undefok=report_anonymous_usage_stats",
            "-report_anonymous_usage_stats=y"
        ]
        launch_cvd_args = self.cvd_compute_client_multi_stage._GetLaunchCvdArgs(
            fake_avd_spec)
        self.assertEqual(launch_cvd_args, expeted_args)

        # test GetLaunchCvdArgs without avd_spec
        expeted_args = [
            "-x_res=720", "-y_res=1280", "-dpi=160",
            "--setupwizard_mode=REQUIRED", "-gpu_mode=drm_virgl",
            "-undefok=report_anonymous_usage_stats",
            "-report_anonymous_usage_stats=y"
        ]
        launch_cvd_args = self.cvd_compute_client_multi_stage._GetLaunchCvdArgs(
            avd_spec=None)
        self.assertEqual(launch_cvd_args, expeted_args)
    def testGetBuildInfoDict(self):
        """Test GetBuildInfoDict."""
        fake_host_package_name = "/fake/host_package.tar.gz"
        fake_image_name = "/fake/aosp_cf_x86_phone-img-eng.username.zip"
        args = mock.MagicMock()
        # Test image source type is local.
        args.config_file = ""
        args.avd_type = constants.TYPE_CF
        args.flavor = "phone"
        args.local_image = "fake_local_image"
        args.adb_port = None
        args.cheeps_betty_image = None
        avd_spec_local_image = avd_spec.AVDSpec(args)
        factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            avd_spec_local_image,
            fake_image_name,
            fake_host_package_name)
        self.assertEqual(factory.GetBuildInfoDict(), None)

        # Test image source type is remote.
        args.local_image = ""
        args.build_id = "123"
        args.branch = "fake_branch"
        args.build_target = "fake_target"
        args.system_build_id = "234"
        args.system_branch = "sys_branch"
        args.system_build_target = "sys_target"
        args.kernel_build_id = "345"
        args.kernel_branch = "kernel_branch"
        args.kernel_build_target = "kernel_target"
        avd_spec_remote_image = avd_spec.AVDSpec(args)
        factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            avd_spec_remote_image,
            fake_image_name,
            fake_host_package_name)
        expected_build_info = {
            "build_id": "123",
            "branch": "fake_branch",
            "build_target": "fake_target",
            "system_build_id": "234",
            "system_branch": "sys_branch",
            "system_build_target": "sys_target",
            "kernel_build_id": "345",
            "kernel_branch": "kernel_branch",
            "kernel_build_target": "kernel_target"
        }
        self.assertEqual(factory.GetBuildInfoDict(), expected_build_info)
Ejemplo n.º 5
0
 def setUp(self):
     """Initialize new avd_spec.AVDSpec."""
     super(AvdSpecTest, self).setUp()
     self.args = mock.MagicMock()
     self.args.flavor = ""
     self.args.local_image = ""
     self.args.config_file = ""
     self.args.build_target = "fake_build_target"
     self.args.adb_port = None
     self.Patch(list_instances, "ChooseOneRemoteInstance", return_value=mock.MagicMock())
     self.Patch(list_instances, "GetInstancesFromInstanceNames", return_value=mock.MagicMock())
     self.AvdSpec = avd_spec.AVDSpec(self.args)
Ejemplo n.º 6
0
    def testProcessRemoteBuildArgs(self):
        """Test _ProcessRemoteBuildArgs."""
        self.args.branch = "git_master"
        self.args.build_id = "1234"

        # Verify auto-assigned avd_type if build_targe contains "_gce_".
        self.args.build_target = "aosp_gce_x86_phone-userdebug"
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertTrue(self.AvdSpec.avd_type == "gce")

        # Verify auto-assigned avd_type if build_targe contains "gce_".
        self.args.build_target = "gce_x86_phone-userdebug"
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertTrue(self.AvdSpec.avd_type == "gce")

        # Verify auto-assigned avd_type if build_targe contains "_cf_".
        self.args.build_target = "aosp_cf_x86_phone-userdebug"
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertTrue(self.AvdSpec.avd_type == "cuttlefish")

        # Verify auto-assigned avd_type if build_targe contains "cf_".
        self.args.build_target = "cf_x86_phone-userdebug"
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertTrue(self.AvdSpec.avd_type == "cuttlefish")

        # Verify auto-assigned avd_type if build_targe contains "sdk_".
        self.args.build_target = "sdk_phone_armv7-sdk"
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertTrue(self.AvdSpec.avd_type == "goldfish")

        # Verify auto-assigned avd_type if build_targe contains "_sdk_".
        self.args.build_target = "aosp_sdk_phone_armv7-sdk"
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertTrue(self.AvdSpec.avd_type == "goldfish")

        # Verify auto-assigned avd_type if no match, default as cuttlefish.
        self.args.build_target = "mini_emulator_arm64-userdebug"
        self.args.avd_type = "cuttlefish"
        # reset args.avd_type default value as cuttlefish.
        self.AvdSpec = avd_spec.AVDSpec(self.args)
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertTrue(self.AvdSpec.avd_type == "cuttlefish")

        self.args.cheeps_betty_image = 'abcdefg'
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertEqual(
            self.AvdSpec.remote_image[constants.CHEEPS_BETTY_IMAGE],
            self.args.cheeps_betty_image)
        self.args.cheeps_betty_image = None
        self.AvdSpec._ProcessRemoteBuildArgs(self.args)
        self.assertEqual(
            self.AvdSpec.remote_image[constants.CHEEPS_BETTY_IMAGE],
            self.args.cheeps_betty_image)
    def testUploadArtifacts(self, mock_ssh_run, mock_shell):
        """Test UploadArtifacts."""
        fake_host_package = "/fake/host_package.tar.gz"
        fake_image = "/fake/aosp_cf_x86_phone-img-eng.username.zip"
        fake_local_image_dir = "/fake_image"
        fake_ip = ssh.IP(external="1.1.1.1", internal="10.1.1.1")
        args = mock.MagicMock()
        # Test local image extract from image zip case.
        args.config_file = ""
        args.avd_type = constants.TYPE_CF
        args.flavor = "phone"
        args.local_image = "fake_local_image"
        args.adb_port = None
        avd_spec_local_image = avd_spec.AVDSpec(args)
        factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            avd_spec_local_image,
            fake_image,
            fake_host_package)
        factory._ssh = ssh.Ssh(ip=fake_ip,
                               user=constants.GCE_USER,
                               ssh_private_key_path="/fake/acloud_rea")
        factory._UploadArtifacts(fake_image, fake_host_package, fake_local_image_dir)
        expected_cmd1 = ("/usr/bin/install_zip.sh . < %s" % fake_image)
        expected_cmd2 = ("tar -x -z -f - < %s" % fake_host_package)
        mock_ssh_run.assert_has_calls([
            mock.call(expected_cmd1),
            mock.call(expected_cmd2)])

        # Test local image get from local folder case.
        fake_image = None
        self.Patch(glob, "glob", return_value=["fake.img"])
        factory._UploadArtifacts(fake_image, fake_host_package, fake_local_image_dir)
        expected_cmd = (
            "tar -cf - --lzop -S -C %s fake.img | "
            "%s -- tar -xf - --lzop -S" %
            (fake_local_image_dir, factory._ssh.GetBaseCmd(constants.SSH_BIN)))
        mock_shell.assert_called_once_with(expected_cmd)

        mock_shell.reset_mock()
        m = mock.mock_open(read_data = (
            "boot.img\n"
            "cache.img\n"
            "super.img\n"
            "userdata.img\n"
            "vendor_boot.img\n"))
        with mock.patch.object(six.moves.builtins, "open", m):
            factory._UploadArtifacts(fake_image, fake_host_package, fake_local_image_dir)
            expected_cmd = (
                "tar -cf - --lzop -S -C %s boot.img cache.img super.img userdata.img vendor_boot.img | "
                "%s -- tar -xf - --lzop -S" %
                (fake_local_image_dir, factory._ssh.GetBaseCmd(constants.SSH_BIN)))
            mock_shell.assert_called_once_with(expected_cmd)
Ejemplo n.º 8
0
    def testCreateInstance(self, mock_shell, mock_create_gce):
        fake_host_package = "/fake/host_package.tar.gz"
        fake_ip = ssh.IP(external="1.1.1.1", internal="10.1.1.1")
        args = mock.MagicMock()
        # Test local image extract from image zip case.
        args.config_file = ""
        args.avd_type = constants.TYPE_FVP
        args.flavor = "phone"
        args.local_image = "fake_local_image"
        args.local_image_dir = "fake_local_image_dir"
        args.adb_port = None
        avd_spec_local_image = avd_spec.AVDSpec(args)
        factory = remote_instance_fvp_device_factory.RemoteInstanceDeviceFactory(
            avd_spec_local_image)
        factory._ssh = ssh.Ssh(ip=fake_ip,
                               user=constants.GCE_USER,
                               ssh_private_key_path="/fake/acloud_rea")
        m = mock.mock_open(read_data=("bl1.bin\n"
                                      "boot.img\n"
                                      "fip.bin\n"
                                      "system-qemu.img\n"
                                      "userdata.img\n"))
        with mock.patch.object(six.moves.builtins, "open", m):
            factory.CreateInstance()

        mock_create_gce.assert_called_once()

        expected_cmds = [
            ("tar -cf - --lzop -S -C /path/to/product/out bl1.bin boot.img "
             "fip.bin system-qemu.img userdata.img | "
             "%s -- tar -xf - --lzop -S" %
             factory._ssh.GetBaseCmd(constants.SSH_BIN)),
            ("tar -cf - --lzop -S -C /path/to/model . | "
             "%s -- tar -xf - --lzop -S" %
             factory._ssh.GetBaseCmd(constants.SSH_BIN)),
            ("%s device/generic/goldfish/fvpbase/run_model_only "
             "[email protected]:run_model_only" %
             factory._ssh.GetBaseCmd(constants.SCP_BIN)),
            ("%s -- mkdir -p lib64" %
             factory._ssh.GetBaseCmd(constants.SSH_BIN)),
            ("%s /path/to/host/out/lib64/bind_to_localhost.so "
             "[email protected]:lib64/bind_to_localhost.so" %
             factory._ssh.GetBaseCmd(constants.SCP_BIN)),
            ("%s -- sh -c \"'ANDROID_HOST_OUT=. ANDROID_PRODUCT_OUT=. "
             "MODEL_BIN=./FVP_Base_RevC-2xAEMv8A "
             "./run_model_only > /dev/null 2> /dev/null &'\"" %
             factory._ssh.GetBaseCmd(constants.SSH_BIN)),
        ]
        mock_shell.assert_has_calls([mock.call(cmd) for cmd in expected_cmds])
Ejemplo n.º 9
0
def Run(args):
    """Run create.

    Args:
        args: Namespace object from argparse.parse_args.

    Returns:
        A Report instance.
    """
    if not args.skip_pre_run_check:
        PreRunCheck(args)
    spec = avd_spec.AVDSpec(args)
    avd_creator_class = GetAvdCreatorClass(spec.avd_type, spec.instance_type,
                                           spec.image_source)
    avd_creator = avd_creator_class()
    report = avd_creator.Create(spec, args.no_prompt)
    return report
    def testCreateGceInstanceNameMultiStage(self):
        """test create gce instance."""
        # Mock uuid
        args = mock.MagicMock()
        args.config_file = ""
        args.avd_type = constants.TYPE_CF
        args.flavor = "phone"
        args.local_image = None
        args.adb_port = None
        fake_avd_spec = avd_spec.AVDSpec(args)
        fake_avd_spec.cfg.enable_multi_stage = True
        fake_avd_spec._instance_name_to_reuse = None

        fake_uuid = mock.MagicMock(hex="1234")
        self.Patch(uuid, "uuid4", return_value=fake_uuid)
        self.Patch(cvd_compute_client_multi_stage.CvdComputeClient, "CreateInstance")
        self.Patch(cvd_compute_client_multi_stage.CvdComputeClient,
                   "GetHostImageName", return_value="fake_image")
        fake_host_package_name = "/fake/host_package.tar.gz"
        fake_image_name = "/fake/aosp_cf_x86_phone-img-eng.username.zip"

        factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            fake_avd_spec,
            fake_image_name,
            fake_host_package_name)
        self.assertEqual(factory._CreateGceInstance(), "ins-1234-userbuild-aosp-cf-x86-phone")

        # Can't get target name from zip file name.
        fake_image_name = "/fake/aosp_cf_x86_phone.username.zip"
        factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            fake_avd_spec,
            fake_image_name,
            fake_host_package_name)
        self.assertEqual(factory._CreateGceInstance(), "ins-1234-userbuild-fake-target")

        # No image zip path, it uses local build images.
        fake_image_name = ""
        factory = remote_instance_cf_device_factory.RemoteInstanceDeviceFactory(
            fake_avd_spec,
            fake_image_name,
            fake_host_package_name)
        self.assertEqual(factory._CreateGceInstance(), "ins-1234-userbuild-fake-target")
    def testCreateInstance(self, _get_user, _get_disk_args, mock_create,
                           _get_image, _compare_machine_size, mock_check_img,
                           _mock_env):
        """Test CreateInstance."""
        expected_metadata = {
            "cvd_01_dpi":
            str(self.DPI),
            "cvd_01_fetch_android_build_target":
            self.TARGET,
            "cvd_01_fetch_android_bid":
            "{branch}/{build_id}".format(branch=self.BRANCH,
                                         build_id=self.BUILD_ID),
            "cvd_01_fetch_kernel_bid":
            "{branch}/{build_id}".format(branch=self.KERNEL_BRANCH,
                                         build_id=self.KERNEL_BUILD_ID),
            "cvd_01_fetch_kernel_build_target":
            self.KERNEL_BUILD_TARGET,
            "cvd_01_x_res":
            str(self.X_RES),
            "cvd_01_y_res":
            str(self.Y_RES),
            "user":
            "******",
            "cvd_01_data_policy":
            self.cvd_compute_client.DATA_POLICY_CREATE_IF_MISSING,
            "cvd_01_blank_data_disk_size":
            str(self.EXTRA_DATA_DISK_SIZE_GB * 1024),
        }
        expected_metadata_local_image = {
            "cvd_01_dpi":
            str(self.DPI),
            "cvd_01_x_res":
            str(self.X_RES),
            "cvd_01_y_res":
            str(self.Y_RES),
            "user":
            "******",
            "cvd_01_data_policy":
            self.cvd_compute_client.DATA_POLICY_CREATE_IF_MISSING,
            "cvd_01_blank_data_disk_size":
            str(self.EXTRA_DATA_DISK_SIZE_GB * 1024),
        }
        expected_metadata.update(self.METADATA)
        expected_metadata_local_image.update(self.METADATA)
        remote_image_metadata = dict(expected_metadata)
        remote_image_metadata["cvd_01_launch"] = self.LAUNCH_ARGS
        expected_disk_args = [{"fake_arg": "fake_value"}]

        self.cvd_compute_client.CreateInstance(self.INSTANCE,
                                               self.IMAGE,
                                               self.IMAGE_PROJECT,
                                               self.TARGET,
                                               self.BRANCH,
                                               self.BUILD_ID,
                                               self.KERNEL_BRANCH,
                                               self.KERNEL_BUILD_ID,
                                               self.KERNEL_BUILD_TARGET,
                                               self.EXTRA_DATA_DISK_SIZE_GB,
                                               extra_scopes=self.EXTRA_SCOPES)
        mock_create.assert_called_with(self.cvd_compute_client,
                                       instance=self.INSTANCE,
                                       image_name=self.IMAGE,
                                       image_project=self.IMAGE_PROJECT,
                                       disk_args=expected_disk_args,
                                       metadata=remote_image_metadata,
                                       machine_type=self.MACHINE_TYPE,
                                       network=self.NETWORK,
                                       zone=self.ZONE,
                                       extra_scopes=self.EXTRA_SCOPES)

        #test use local image in the remote instance.
        local_image_metadata = dict(expected_metadata_local_image)
        args = mock.MagicMock()
        mock_check_img.return_value = True
        args.local_image = None
        args.config_file = ""
        args.avd_type = constants.TYPE_CF
        args.flavor = "phone"
        args.adb_port = None
        args.remote_host = False
        fake_avd_spec = avd_spec.AVDSpec(args)
        fake_avd_spec.hw_property[constants.HW_X_RES] = str(self.X_RES)
        fake_avd_spec.hw_property[constants.HW_Y_RES] = str(self.Y_RES)
        fake_avd_spec.hw_property[constants.HW_ALIAS_DPI] = str(self.DPI)
        fake_avd_spec.hw_property[constants.HW_ALIAS_DISK] = str(
            self.EXTRA_DATA_DISK_SIZE_GB * 1024)
        local_image_metadata["avd_type"] = constants.TYPE_CF
        local_image_metadata["flavor"] = "phone"
        local_image_metadata[constants.INS_KEY_DISPLAY] = (
            "%sx%s (%s)" % (fake_avd_spec.hw_property[constants.HW_X_RES],
                            fake_avd_spec.hw_property[constants.HW_Y_RES],
                            fake_avd_spec.hw_property[constants.HW_ALIAS_DPI]))
        self.cvd_compute_client.CreateInstance(self.INSTANCE,
                                               self.IMAGE,
                                               self.IMAGE_PROJECT,
                                               self.TARGET,
                                               self.BRANCH,
                                               self.BUILD_ID,
                                               self.KERNEL_BRANCH,
                                               self.KERNEL_BUILD_ID,
                                               self.KERNEL_BUILD_TARGET,
                                               self.EXTRA_DATA_DISK_SIZE_GB,
                                               fake_avd_spec,
                                               extra_scopes=self.EXTRA_SCOPES)

        mock_create.assert_called_with(self.cvd_compute_client,
                                       instance=self.INSTANCE,
                                       image_name=self.IMAGE,
                                       image_project=self.IMAGE_PROJECT,
                                       disk_args=expected_disk_args,
                                       metadata=local_image_metadata,
                                       machine_type=self.MACHINE_TYPE,
                                       network=self.NETWORK,
                                       zone=self.ZONE,
                                       extra_scopes=self.EXTRA_SCOPES)
    def testCreateInstance(self, _get_user, _get_disk_args, mock_create,
                           _get_image, _compare_machine_size, mock_check_img,
                           _mock_env):
        """Test CreateInstance."""
        expected_metadata = dict()
        expected_metadata_local_image = dict()
        expected_metadata.update(self.METADATA)
        expected_metadata_local_image.update(self.METADATA)
        remote_image_metadata = dict(expected_metadata)
        expected_disk_args = [{"fake_arg": "fake_value"}]
        fake_avd_spec = avd_spec.AVDSpec(self.args)
        fake_avd_spec._instance_name_to_reuse = None

        created_subprocess = mock.MagicMock()
        created_subprocess.stdout = mock.MagicMock()
        created_subprocess.stdout.readline = mock.MagicMock(return_value=b"")
        created_subprocess.poll = mock.MagicMock(return_value=0)
        created_subprocess.returncode = 0
        created_subprocess.communicate = mock.MagicMock(return_value=('', ''))
        self.Patch(cvd_compute_client_multi_stage.CvdComputeClient,
                   "_RecordSystemAndKernelInfo")
        self.Patch(subprocess, "Popen", return_value=created_subprocess)
        self.Patch(subprocess, "check_call")
        self.Patch(os, "chmod")
        self.Patch(os, "stat")
        self.Patch(os, "remove")
        self.Patch(os, "rmdir")
        self.cvd_compute_client_multi_stage.CreateInstance(
            self.INSTANCE,
            self.IMAGE,
            self.IMAGE_PROJECT,
            self.TARGET,
            self.BRANCH,
            self.BUILD_ID,
            self.KERNEL_BRANCH,
            self.KERNEL_BUILD_ID,
            self.KERNEL_BUILD_TARGET,
            self.EXTRA_DATA_DISK_SIZE_GB,
            extra_scopes=self.EXTRA_SCOPES)
        mock_create.assert_called_with(self.cvd_compute_client_multi_stage,
                                       instance=self.INSTANCE,
                                       image_name=self.IMAGE,
                                       image_project=self.IMAGE_PROJECT,
                                       disk_args=expected_disk_args,
                                       metadata=remote_image_metadata,
                                       machine_type=self.MACHINE_TYPE,
                                       network=self.NETWORK,
                                       zone=self.ZONE,
                                       extra_scopes=self.EXTRA_SCOPES,
                                       gpu=self.GPU,
                                       tags=None)

        mock_check_img.return_value = True
        #test use local image in the remote instance.
        local_image_metadata = dict(expected_metadata_local_image)
        fake_avd_spec.hw_property[constants.HW_X_RES] = str(self.X_RES)
        fake_avd_spec.hw_property[constants.HW_Y_RES] = str(self.Y_RES)
        fake_avd_spec.hw_property[constants.HW_ALIAS_DPI] = str(self.DPI)
        fake_avd_spec.hw_property[constants.HW_ALIAS_DISK] = str(
            self.EXTRA_DATA_DISK_SIZE_GB * 1024)
        local_image_metadata["avd_type"] = constants.TYPE_CF
        local_image_metadata["flavor"] = "phone"
        local_image_metadata[constants.INS_KEY_DISPLAY] = (
            "%sx%s (%s)" % (fake_avd_spec.hw_property[constants.HW_X_RES],
                            fake_avd_spec.hw_property[constants.HW_Y_RES],
                            fake_avd_spec.hw_property[constants.HW_ALIAS_DPI]))
        self.cvd_compute_client_multi_stage.CreateInstance(
            self.INSTANCE,
            self.IMAGE,
            self.IMAGE_PROJECT,
            self.TARGET,
            self.BRANCH,
            self.BUILD_ID,
            self.KERNEL_BRANCH,
            self.KERNEL_BUILD_ID,
            self.KERNEL_BUILD_TARGET,
            self.EXTRA_DATA_DISK_SIZE_GB,
            fake_avd_spec,
            extra_scopes=self.EXTRA_SCOPES)

        mock_create.assert_called_with(self.cvd_compute_client_multi_stage,
                                       instance=self.INSTANCE,
                                       image_name=self.IMAGE,
                                       image_project=self.IMAGE_PROJECT,
                                       disk_args=expected_disk_args,
                                       metadata=local_image_metadata,
                                       machine_type=self.MACHINE_TYPE,
                                       network=self.NETWORK,
                                       zone=self.ZONE,
                                       extra_scopes=self.EXTRA_SCOPES,
                                       gpu=self.GPU,
                                       tags=None)