From: Amos Kong <akong@redhat.com>
To: autotest@vger.kernel.org
Cc: lmr@redhat.com, kvm@vger.kernel.org
Subject: [PATCH v2 09/17] KVM-test: Add a subtest of nic promisc
Date: Mon, 23 Aug 2010 16:53:00 +0800 [thread overview]
Message-ID: <20100823085300.19173.425.stgit@190> (raw)
In-Reply-To: <20100823084745.19173.61655.stgit@190>
This test mainly covers TCP sent from host to guest and from guest to host
with repeatedly turn on/off NIC promiscuous mode.
Changes from v1:
- Don't abruptly fail the whole test if we get a failure for a single size
Signed-off-by: Amos Kong <akong@redhat.com>
---
0 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/client/tests/kvm/tests/nic_promisc.py b/client/tests/kvm/tests/nic_promisc.py
new file mode 100644
index 0000000..b75a1cd
--- /dev/null
+++ b/client/tests/kvm/tests/nic_promisc.py
@@ -0,0 +1,100 @@
+import logging
+from autotest_lib.client.common_lib import error
+from autotest_lib.client.bin import utils
+import kvm_utils, kvm_test_utils
+
+def run_nic_promisc(test, params, env):
+ """
+ Test nic driver in promisc mode:
+
+ 1) Boot up a guest
+ 2) Repeatedly enable/disable promiscuous mode in guest
+ 3) TCP data transmission from host to guest, and from guest to host,
+ with 1/1460/65000/100000000 bytes payloads
+ 4) Clean temporary files
+ 5) Stop enable/disable promiscuous mode change
+
+ @param test: kvm test object
+ @param params: Dictionary with the test parameters
+ @param env: Dictionary with test environment
+ """
+ timeout = int(params.get("login_timeout", 360))
+ vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
+ session = kvm_test_utils.wait_for_login(vm, timeout=timeout)
+ logging.info("Trying to log into guest '%s' by serial", vm.name)
+ session2 = kvm_utils.wait_for(lambda: vm.serial_login(),
+ timeout, 0, step=2)
+ if not session2:
+ raise error.TestFail("Could not log into guest '%s'" % vm.name)
+
+ def compare(filename):
+ cmd = "md5sum %s" % filename
+ md5_host = utils.hash_file(filename, method="md5")
+ rc_guest, md5_guest = session.get_command_status_output(cmd)
+ if rc_guest:
+ logging.debug("Could not get MD5 hash for file %s on guest,"
+ "output: %s", filename, md5_guest)
+ return False
+ md5_guest = md5_guest.split()[0]
+ if md5_host != md5_guest:
+ logging.error("MD5 hash mismatch between file %s "
+ "present on guest and on host", filename)
+ logging.error("MD5 hash for file on guest: %s,"
+ "MD5 hash for file on host: %s", md5_host, md5_guest)
+ return False
+ return True
+
+ ethname = kvm_test_utils.get_linux_ifname(session, vm.get_macaddr(0))
+ set_promisc_cmd = ("ip link set %s promisc on; sleep 0.01;"
+ "ip link set %s promisc off; sleep 0.01"
+ % (ethname, ethname))
+ logging.info("Set promisc change repeatedly in guest")
+ session2.sendline("while true; do %s; done" % set_promisc_cmd)
+
+ dd_cmd = "dd if=/dev/urandom of=%s bs=%d count=1"
+ filename = "/tmp/nic_promisc_file"
+ file_size = params.get("file_size", "1, 1460, 65000, 100000000").split(",")
+ success_counter = 0
+ try:
+ for size in file_size:
+ logging.info("Create %s bytes file on host" % size)
+ utils.run(dd_cmd % (filename, int(size)))
+
+ logging.info("Transfer file from host to guest")
+ if not vm.copy_files_to(filename, filename):
+ logging.error("File transfer failed")
+ continue
+ if not compare(filename):
+ logging.error("Compare file failed")
+ continue
+ else:
+ success_counter += 1
+
+ logging.info("Create %s bytes file on guest" % size)
+ if session.get_command_status(dd_cmd % (filename, int(size)),
+ timeout=100) != 0:
+ logging.error("Create file on guest failed")
+ continue
+
+ logging.info("Transfer file from guest to host")
+ if not vm.copy_files_from(filename, filename):
+ logging.error("File transfer failed")
+ continue
+ if not compare(filename):
+ logging.error("Compare file failed")
+ continue
+ else:
+ success_counter += 1
+
+ logging.info("Clean temporary files")
+ cmd = "rm -f %s" % filename
+ utils.run(cmd)
+ session.get_command_status(cmd)
+ finally:
+ logging.info("Restore the %s to the nonpromisc mode" % ethname)
+ session2.close()
+ session.get_command_status("ip link set %s promisc off" % ethname)
+ session.close()
+ if success_counter != 2 * len(file_size):
+ raise error.TestFail("Some tests failed, succss_ratio : %s/%s"
+ % (success_counter, len(file_size)))
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index 7e1601c..89ec4b0 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -374,6 +374,10 @@ variants:
scp_timeout = 300
thread_num = 10
+ - nic_promisc: install setup unattended_install.cdrom
+ type = nic_promisc
+ file_size = 1, 1460, 65000, 100000000
+
- physical_resources_check: install setup unattended_install.cdrom
type = physical_resources_check
catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}'
@@ -1072,7 +1076,7 @@ variants:
# Windows section
- @Windows:
- no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks) jumbo file_transfer nicdriver_unload
+ no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks) jumbo file_transfer nicdriver_unload nic_promisc
shutdown_command = shutdown /s /f /t 0
reboot_command = shutdown /r /f /t 0
status_test_command = echo %errorlevel%
next prev parent reply other threads:[~2010-08-23 8:50 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-23 8:51 [PATCH v2 00/17] Patchset of network related subtests Amos Kong
2010-08-23 8:51 ` [PATCH v2 01/17] KVM-test: Add a new macaddress pool algorithm Amos Kong
2010-08-23 8:52 ` [PATCH v2 02/17] Add a get_ifname function Amos Kong
2010-08-23 8:52 ` [PATCH v2 03/17] KVM Test: Add a function get_interface_name() to kvm_test_utils.py Amos Kong
2010-08-23 8:52 ` [PATCH v2 04/17] KVM Test: Add a common ping module for network related tests Amos Kong
2010-08-23 8:52 ` [PATCH v2 05/17] KVM-test: Add a new subtest ping Amos Kong
2010-08-23 8:52 ` [PATCH v2 06/17] KVM-test: Add a subtest jumbo Amos Kong
2010-08-23 8:52 ` [PATCH v2 07/17] KVM-test: Add basic file transfer test Amos Kong
2010-08-23 8:52 ` [PATCH v2 08/17] KVM-test: Add a subtest of load/unload nic driver Amos Kong
2010-08-23 8:53 ` Amos Kong [this message]
2010-08-23 8:53 ` [PATCH v2 10/17] KVM-test: Add a subtest of multicast Amos Kong
2010-08-23 8:53 ` [PATCH v2 11/17] KVM-test: Add a subtest of pxe Amos Kong
2010-08-23 8:53 ` [PATCH v2 12/17] KVM-test: Add a subtest of changing mac address Amos Kong
2010-08-23 8:53 ` [PATCH v2 13/17] KVM-test: Add a subtest of netperf Amos Kong
2010-08-23 8:53 ` [PATCH v2 14/17] Add support of check if remote port free Amos Kong
2010-08-23 8:53 ` [PATCH v2 15/17] KVM-test: Improve vlan subtest Amos Kong
2010-08-23 8:54 ` [PATCH v2 16/17] Vlan: Replace extra_params '-snapshot' with image_snapshot Amos Kong
2010-08-23 8:54 ` [PATCH v2 17/17] KVM-test: Add subtest of testing offload by ethtool Amos Kong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100823085300.19173.425.stgit@190 \
--to=akong@redhat.com \
--cc=autotest@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=lmr@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.