blob: e8682355b0b91ae08b02c30963e65555b7e3e42c [file] [log] [blame]
import logging, time, os
from autotest_lib.client.common_lib import error
from autotest_lib.client.bin import utils
@error.context_aware
def run_floppy(test, params, env):
"""
Test virtual floppy of guest:
1) Create a floppy disk image on host
2) Start the guest with this floppy image.
3) Make a file system on guest virtual floppy.
4) Calculate md5sum value of a file and copy it into floppy.
5) Verify whether the md5sum does match.
@param test: KVM test object.
@param params: Dictionary with the test parameters.
@param env: Dictionary with test environment.
"""
def master_floppy(params):
error.context("creating test floppy")
floppy = os.path.abspath(params.get("floppy"))
utils.run("dd if=/dev/zero of=%s bs=512 count=2880" % floppy)
master_floppy(params)
vm = env.get_vm(params["main_vm"])
vm.create()
timeout = int(params.get("login_timeout", 360))
session = vm.wait_for_login(timeout=timeout)
dest_dir = params.get("mount_dir")
# If mount_dir specified, treat guest as a Linux OS
# Some Linux distribution does not load floppy at boot and Windows
# needs time to load and init floppy driver
if dest_dir:
status = session.cmd("modprobe floppy")
else:
time.sleep(20)
error.context("Formating floppy disk before using it")
format_cmd = params.get("format_floppy_cmd")
session.cmd(format_cmd, timeout=120)
logging.info("Floppy disk formatted successfully")
source_file = params.get("source_file")
dest_file = params.get("dest_file")
if dest_dir:
error.context("Mounting floppy")
session.cmd("mount /dev/fd0 %s" % dest_dir)
error.context("Testing floppy")
session.cmd(params.get("test_floppy_cmd"))
try:
error.context("Copying file to the floppy")
session.cmd("%s %s %s" % (params.get("copy_cmd"), source_file,
dest_file))
logging.info("Succeed to copy file '%s' into floppy disk" % source_file)
error.context("Checking if the file is unchanged after copy")
session.cmd("%s %s %s" % (params.get("diff_file_cmd"), source_file,
dest_file))
finally:
clean_cmd = "%s %s" % (params.get("clean_cmd"), dest_file)
session.cmd(clean_cmd)
if dest_dir:
session.cmd("umount %s" % dest_dir)
session.close()