Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: client/tests/kvm/tests/nic_promisc.py

Issue 4823005: Merge remote branch 'cros/upstream' into tempbranch (Closed) Base URL: http://git.chromium.org/git/autotest.git@master
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 import logging
2 from autotest_lib.client.common_lib import error
3 from autotest_lib.client.bin import utils
4 import kvm_utils, kvm_test_utils
5
6 def run_nic_promisc(test, params, env):
7 """
8 Test nic driver in promisc mode:
9
10 1) Boot up a VM.
11 2) Repeatedly enable/disable promiscuous mode in guest.
12 3) TCP data transmission from host to guest, and from guest to host,
13 with 1/1460/65000/100000000 bytes payloads.
14 4) Clean temporary files.
15 5) Stop enable/disable promiscuous mode change.
16
17 @param test: KVM test object.
18 @param params: Dictionary with the test parameters.
19 @param env: Dictionary with test environment.
20 """
21 timeout = int(params.get("login_timeout", 360))
22 vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
23 session = kvm_test_utils.wait_for_login(vm, timeout=timeout)
24
25 logging.info("Trying to log into guest '%s' by serial", vm.name)
26 session2 = kvm_utils.wait_for(lambda: vm.serial_login(),
27 timeout, 0, step=2)
28 if not session2:
29 raise error.TestFail("Could not log into guest '%s'" % vm.name)
30
31 def compare(filename):
32 cmd = "md5sum %s" % filename
33 md5_host = utils.hash_file(filename, method="md5")
34 rc_guest, md5_guest = session.get_command_status_output(cmd)
35 if rc_guest:
36 logging.debug("Could not get MD5 hash for file %s on guest,"
37 "output: %s", filename, md5_guest)
38 return False
39 md5_guest = md5_guest.split()[0]
40 if md5_host != md5_guest:
41 logging.error("MD5 hash mismatch between file %s "
42 "present on guest and on host", filename)
43 logging.error("MD5 hash for file on guest: %s,"
44 "MD5 hash for file on host: %s", md5_host, md5_guest)
45 return False
46 return True
47
48 ethname = kvm_test_utils.get_linux_ifname(session, vm.get_mac_address(0))
49 set_promisc_cmd = ("ip link set %s promisc on; sleep 0.01;"
50 "ip link set %s promisc off; sleep 0.01" %
51 (ethname, ethname))
52 logging.info("Set promisc change repeatedly in guest")
53 session2.sendline("while true; do %s; done" % set_promisc_cmd)
54
55 dd_cmd = "dd if=/dev/urandom of=%s bs=%d count=1"
56 filename = "/tmp/nic_promisc_file"
57 file_size = params.get("file_size", "1, 1460, 65000, 100000000").split(",")
58 success_counter = 0
59 try:
60 for size in file_size:
61 logging.info("Create %s bytes file on host" % size)
62 utils.run(dd_cmd % (filename, int(size)))
63
64 logging.info("Transfer file from host to guest")
65 if not vm.copy_files_to(filename, filename):
66 logging.error("File transfer failed")
67 continue
68 if not compare(filename):
69 logging.error("Compare file failed")
70 continue
71 else:
72 success_counter += 1
73
74 logging.info("Create %s bytes file on guest" % size)
75 if session.get_command_status(dd_cmd % (filename, int(size)),
76 timeout=100) != 0:
77 logging.error("Create file on guest failed")
78 continue
79
80 logging.info("Transfer file from guest to host")
81 if not vm.copy_files_from(filename, filename):
82 logging.error("File transfer failed")
83 continue
84 if not compare(filename):
85 logging.error("Compare file failed")
86 continue
87 else:
88 success_counter += 1
89
90 logging.info("Clean temporary files")
91 cmd = "rm -f %s" % filename
92 utils.run(cmd)
93 session.get_command_status(cmd)
94
95 finally:
96 logging.info("Restore the %s to the nonpromisc mode", ethname)
97 session2.close()
98 session.get_command_status("ip link set %s promisc off" % ethname)
99 session.close()
100
101 if success_counter != 2 * len(file_size):
102 raise error.TestFail("Some tests failed, succss_ratio : %s/%s" %
103 (success_counter, len(file_size)))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698