def METHOD_NAME(test, params, env):
    """
    Test start Vm with device without device control file.
    1.Prepare test environment,destroy or suspend a VM.
    2.Prepare test xml.
    3.Perform test operation.
    4.Recover test environment.
    5.Confirm the test result.
    """
    vm_name = params.get("main_vm")
    vm = env.get_vm(vm_name)
    virsh_dargs = {'debug': True, 'ignore_status': True}
    # Disk specific attributes.
    backend_device = params.get("backend_device", "disk")
    hotplug = "yes" == params.get("virt_device_hotplug")
    status_error = "yes" == params.get("status_error")
    define_error = "yes" == params.get("define_error", "no")
    log_config_path = os.path.join(test.debugdir, "libvirtd.log")
    control_path = '/dev/mapper/control'
    disk_objects = None
    # Back up xml file.
    if vm.is_alive():
        vm.destroy(gracefully=False)
    vmxml_backup = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name)
    # Skip this case if libvirt version doesn't support this feature
    libvirt_version.is_libvirt_feature_supported(params)
    try:
        vmxml = vm_xml.VMXML.new_from_dumpxml(vm_name)
        if backend_device == "multiple_disks":
            disk_objects = create_multiple_file_source_disks(params)
            if os.path.exists(control_path):
                process.METHOD_NAME('rm -rf /dev/mapper/control', ignore_status=True, shell=True)
        if not hotplug:
            # Sync VM xml.
            for disk_xml in disk_objects:
                vmxml.add_device(disk_xml)
            vmxml.sync()
        vm.start()
        vm.wait_for_login().close()
    except virt_vm.VMStartError as e:
        if status_error:
            if hotplug:
                test.fail("In hotplug scenario, VM should "
                          "start successfully but not."
                          "Error: %s" % str(e))
            else:
                LOG.debug("VM failed to start as expected."
                          "Error: %s", str(e))
        else:
            test.fail("VM failed to start."
                      "Error: %s" % str(e))
    except xcepts.LibvirtXMLError as xml_error:
        if not define_error:
            test.fail("Failed to define VM:\n%s" % xml_error)
        else:
            LOG.info("As expected, failed to define VM")
    except Exception as ex:
        test.error("unexpected exception happen: %s" % str(ex))
    else:
        if backend_device == "multiple_disks":
            check_multiple_file_source_disks(params, log_config_path, test)
    finally:
        # Recover VM.
        if vm.is_alive():
            vm.destroy(gracefully=False)
        LOG.info("Restoring vm...")
        vmxml_backup.sync()
        # Clean up images
        for file_path in cleanup_files:
            if os.path.exists(file_path):
                os.remove(file_path)
        if not os.path.exists(control_path):
            process.METHOD_NAME('mknod /dev/mapper/control c 10 236', ignore_status=True, shell=True)