From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Meneghel Rodrigues Subject: [PATCH 08/18] KVM test: Add basic file transfer test Date: Mon, 27 Sep 2010 18:43:54 -0400 Message-ID: <1285627444-2732-9-git-send-email-lmr@redhat.com> References: <1285627444-2732-1-git-send-email-lmr@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, mst@redhat.com To: autotest@test.kernel.org Return-path: In-Reply-To: <1285627444-2732-1-git-send-email-lmr@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: autotest-bounces@test.kernel.org Errors-To: autotest-bounces@test.kernel.org List-Id: kvm.vger.kernel.org From: Amos Kong This test is the basic test of transfering file between host and guest. Try to transfer a large file from host to guest, and transfer it back to host, then compare the files by calculate their md5 hash. The default file size is 4000M, scp timeout is 1000s. It means if the average speed is less than 4M/s, this test will be fail. We can extend this test by using another disk later, then we can transfer larger files without the limit of first disk size. Changes from v1: - Use md5 to verify the integrity of files - Try to use autotest API, such as, utils.system() Signed-off-by: Amos Kong --- client/tests/kvm/tests/file_transfer.py | 58 +++++++++++++++++++++++++++++++ client/tests/kvm/tests_base.cfg.sample | 7 +++- 2 files changed, 64 insertions(+), 1 deletions(-) create mode 100644 client/tests/kvm/tests/file_transfer.py diff --git a/client/tests/kvm/tests/file_transfer.py b/client/tests/kvm/tests/file_transfer.py new file mode 100644 index 0000000..a0c6cff --- /dev/null +++ b/client/tests/kvm/tests/file_transfer.py @@ -0,0 +1,58 @@ +import logging, commands, re +from autotest_lib.client.common_lib import error +from autotest_lib.client.bin import utils +import kvm_utils, kvm_test_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 = kvm_test_utils.get_living_vm(env, params.get("main_vm")) + timeout=int(params.get("login_timeout", 360)) + + logging.info("Trying to log into guest '%s' by serial", vm.name) + session = kvm_utils.wait_for(lambda: vm.serial_login(), + timeout, 0, step=2) + if not session: + raise error.TestFail("Could not log into guest '%s'" % vm.name) + + dir = test.tmpdir + scp_timeout = int(params.get("scp_timeout")) + cmd = "dd if=/dev/urandom of=%s/a.out bs=1M count=%d" % (dir, int( + params.get("filesize", 4000))) + + try: + logging.info("Create file by dd command on host, cmd: %s" % cmd) + utils.run(cmd) + + logging.info("Transfer file from host to guest") + if not vm.copy_files_to("%s/a.out" % dir, "/tmp/b.out", + timeout=scp_timeout): + raise error.TestFail("Fail to transfer file from host to guest") + + logging.info("Transfer file from guest to host") + if not vm.copy_files_from("/tmp/b.out", "%s/c.out" % dir, + timeout=scp_timeout): + raise error.TestFail("Fail to transfer file from guest to host") + + logging.debug(commands.getoutput("ls -l %s/[ac].out" % dir)) + md5_orig = utils.hash_file("%s/a.out" % dir, method="md5") + md5_new = utils.hash_file("%s/c.out" % dir, method="md5") + + if md5_orig != md5_new: + raise error.TestFail("File changed after transfer") + + finally: + session.get_command_status("rm -f /tmp/b.out") + utils.run("rm -f %s/[ac].out" % dir) + session.close() diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample index cf1deaf..bc014c8 100644 --- a/client/tests/kvm/tests_base.cfg.sample +++ b/client/tests/kvm/tests_base.cfg.sample @@ -476,6 +476,11 @@ variants: - jumbo: install setup unattended_install.cdrom type = jumbo + - file_transfer: install setup unattended_install.cdrom + type = file_transfer + filesize = 4000 + scp_timeout = 1000 + - physical_resources_check: install setup unattended_install.cdrom type = physical_resources_check catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}' @@ -1250,7 +1255,7 @@ variants: # Windows section - @Windows: - no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks) jumbo + no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks) jumbo file_transfer shutdown_command = shutdown /s /f /t 0 reboot_command = shutdown /r /f /t 0 status_test_command = echo %errorlevel% -- 1.7.1