84 lines
3.1 KiB
Python
84 lines
3.1 KiB
Python
import logging, time, os
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.bin import utils
|
|
from autotest_lib.client.virt import virt_utils
|
|
|
|
|
|
def run_file_transfer(test, params, env):
|
|
"""
|
|
Test ethrnet device function by ethtool
|
|
|
|
1) Boot up a VM.
|
|
2) Create a large file by dd on host.
|
|
3) Copy this file from host to guest.
|
|
4) Copy this file from guest to host.
|
|
5) Check if file transfers ended good.
|
|
|
|
@param test: KVM test object.
|
|
@param params: Dictionary with the test parameters.
|
|
@param env: Dictionary with test environment.
|
|
"""
|
|
vm = env.get_vm(params["main_vm"])
|
|
vm.verify_alive()
|
|
login_timeout = int(params.get("login_timeout", 360))
|
|
|
|
session = vm.wait_for_login(timeout=login_timeout)
|
|
|
|
dir_name = test.tmpdir
|
|
transfer_timeout = int(params.get("transfer_timeout"))
|
|
transfer_type = params.get("transfer_type")
|
|
tmp_dir = params.get("tmp_dir", "/tmp/")
|
|
clean_cmd = params.get("clean_cmd", "rm -f")
|
|
filesize = int(params.get("filesize", 4000))
|
|
count = int(filesize / 10)
|
|
if count == 0:
|
|
count = 1
|
|
|
|
host_path = os.path.join(dir_name, "tmp-%s" %
|
|
virt_utils.generate_random_string(8))
|
|
host_path2 = host_path + ".2"
|
|
cmd = "dd if=/dev/zero of=%s bs=10M count=%d" % (host_path, count)
|
|
guest_path = (tmp_dir + "file_transfer-%s" %
|
|
virt_utils.generate_random_string(8))
|
|
|
|
try:
|
|
logging.info("Creating %dMB file on host", filesize)
|
|
utils.run(cmd)
|
|
|
|
if transfer_type == "remote":
|
|
logging.info("Transfering file host -> guest, timeout: %ss",
|
|
transfer_timeout)
|
|
t_begin = time.time()
|
|
vm.copy_files_to(host_path, guest_path, timeout=transfer_timeout)
|
|
t_end = time.time()
|
|
throughput = filesize / (t_end - t_begin)
|
|
logging.info("File transfer host -> guest succeed, "
|
|
"estimated throughput: %.2fMB/s", throughput)
|
|
|
|
logging.info("Transfering file guest -> host, timeout: %ss",
|
|
transfer_timeout)
|
|
t_begin = time.time()
|
|
vm.copy_files_from(guest_path, host_path2, timeout=transfer_timeout)
|
|
t_end = time.time()
|
|
throughput = filesize / (t_end - t_begin)
|
|
logging.info("File transfer guest -> host succeed, "
|
|
"estimated throughput: %.2fMB/s", throughput)
|
|
else:
|
|
raise error.TestError("Unknown test file transfer mode %s" %
|
|
transfer_type)
|
|
|
|
if (utils.hash_file(host_path, method="md5") !=
|
|
utils.hash_file(host_path2, method="md5")):
|
|
raise error.TestFail("File changed after transfer host -> guest "
|
|
"and guest -> host")
|
|
|
|
finally:
|
|
logging.info('Cleaning temp file on guest')
|
|
session.cmd("%s %s" % (clean_cmd, guest_path))
|
|
logging.info('Cleaning temp files on host')
|
|
try:
|
|
os.remove(host_path)
|
|
os.remove(host_path2)
|
|
except OSError:
|
|
pass
|
|
session.close()
|