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

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

Issue 6883246: Merge autotest upstream from @5318 ~ @5336 (Closed) Base URL: ssh://gitrw.chromium.org:9222/autotest.git@master
Patch Set: patch Created 9 years, 7 months 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
« no previous file with comments | « client/tests/kvm/tests/unittest.py ('k') | client/tests/kvm/tests/vmstop.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 """ 1 """
2 virtio_console test 2 virtio_console test
3 3
4 @copyright: 2010 Red Hat, Inc. 4 @copyright: 2010 Red Hat, Inc.
5 """ 5 """
6 import array, logging, os, random, re, select, shutil, socket, sys, tempfile 6 import array, logging, os, random, re, select, shutil, socket, sys, tempfile
7 import threading, time, traceback 7 import threading, time, traceback
8 from collections import deque 8 from collections import deque
9 from threading import Thread 9 from threading import Thread
10 10
11 from autotest_lib.client.common_lib import error 11 from autotest_lib.client.common_lib import error
12 from autotest_lib.client.bin import utils 12 from autotest_lib.client.bin import utils
13 import kvm_subprocess, kvm_test_utils, kvm_utils 13 from autotest_lib.client.virt import virt_utils, virt_test_utils, kvm_monitor
14 import kvm_preprocessing, kvm_monitor 14 from autotest_lib.client.virt import virt_env_process, aexpect
15 15
16 16
17 def run_virtio_console(test, params, env): 17 def run_virtio_console(test, params, env):
18 """ 18 """
19 KVM virtio_console test 19 KVM virtio_console test
20 20
21 1) Starts VMs with the specified number of virtio console devices 21 1) Starts VMs with the specified number of virtio console devices
22 2) Start smoke test 22 2) Start smoke test
23 3) Start loopback test 23 3) Start loopback test
24 4) Start performance test 24 4) Start performance test
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 self.quiet = quiet 296 self.quiet = quiet
297 297
298 298
299 def run(self): 299 def run(self):
300 logging.debug("ThSend %s: run", self.getName()) 300 logging.debug("ThSend %s: run", self.getName())
301 try: 301 try:
302 while not self.exitevent.isSet(): 302 while not self.exitevent.isSet():
303 self.idx += self.port.send(self.data) 303 self.idx += self.port.send(self.data)
304 logging.debug("ThSend %s: exit(%d)", self.getName(), 304 logging.debug("ThSend %s: exit(%d)", self.getName(),
305 self.idx) 305 self.idx)
306 except Exception as ints: 306 except Exception, ints:
307 if not self.quiet: 307 if not self.quiet:
308 raise ints 308 raise ints
309 logging.debug(ints) 309 logging.debug(ints)
310 310
311 311
312 class ThSendCheck(Thread): 312 class ThSendCheck(Thread):
313 """ 313 """
314 Random data sender thread. 314 Random data sender thread.
315 """ 315 """
316 def __init__(self, port, event, queues, blocklen=1024): 316 def __init__(self, port, event, queues, blocklen=1024):
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 logging.debug("ThRecv %s: run", self.getName()) 409 logging.debug("ThRecv %s: run", self.getName())
410 try: 410 try:
411 while not self.exitevent.isSet(): 411 while not self.exitevent.isSet():
412 # TODO: Workaround, it didn't work with select :-/ 412 # TODO: Workaround, it didn't work with select :-/
413 try: 413 try:
414 self.idx += len(self.port.recv(self.blocklen)) 414 self.idx += len(self.port.recv(self.blocklen))
415 except socket.timeout: 415 except socket.timeout:
416 pass 416 pass
417 self.port.settimeout(self._port_timeout) 417 self.port.settimeout(self._port_timeout)
418 logging.debug("ThRecv %s: exit(%d)", self.getName(), self.idx) 418 logging.debug("ThRecv %s: exit(%d)", self.getName(), self.idx)
419 except Exception as ints: 419 except Exception, ints:
420 if not self.quiet: 420 if not self.quiet:
421 raise ints 421 raise ints
422 logging.debug(ints) 422 logging.debug(ints)
423 423
424 424
425 class ThRecvCheck(Thread): 425 class ThRecvCheck(Thread):
426 """ 426 """
427 Random data receiver/checker thread. 427 Random data receiver/checker thread.
428 """ 428 """
429 def __init__(self, port, buffer, event, blocklen=1024, sendlen=0): 429 def __init__(self, port, buffer, event, blocklen=1024, sendlen=0):
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 @return: Tuple (match index, data, kernel_crash) 627 @return: Tuple (match index, data, kernel_crash)
628 """ 628 """
629 logging.debug("Executing '%s' on virtio_console_guest.py loop," + 629 logging.debug("Executing '%s' on virtio_console_guest.py loop," +
630 " vm: %s, timeout: %s", command, vm[0].name, timeout) 630 " vm: %s, timeout: %s", command, vm[0].name, timeout)
631 vm[1].sendline(command) 631 vm[1].sendline(command)
632 try: 632 try:
633 (match, data) = vm[1].read_until_last_line_matches(["PASS:", 633 (match, data) = vm[1].read_until_last_line_matches(["PASS:",
634 "FAIL:"], 634 "FAIL:"],
635 timeout) 635 timeout)
636 636
637 except (kvm_subprocess.ExpectError), e: 637 except aexpect.ExpectError, e:
638 match = None 638 match = None
639 data = "Cmd process timeout. Data in console: " + e.output 639 data = "Cmd process timeout. Data in console: " + e.output
640 640
641 kcrash_data = _search_kernel_crashlog(vm[3]) 641 kcrash_data = _search_kernel_crashlog(vm[3])
642 if kcrash_data is not None: 642 if kcrash_data is not None:
643 logging.error(kcrash_data) 643 logging.error(kcrash_data)
644 vm[4] = True 644 vm[4] = True
645 645
646 return (match, data) 646 return (match, data)
647 647
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 kcrash = False 765 kcrash = False
766 766
767 return [vm, session, tmp_dir, sserial, kcrash], [consoles, serialports] 767 return [vm, session, tmp_dir, sserial, kcrash], [consoles, serialports]
768 768
769 769
770 def _restore_vm(): 770 def _restore_vm():
771 """ 771 """
772 Restore old virtual machine when VM is destroyed. 772 Restore old virtual machine when VM is destroyed.
773 """ 773 """
774 logging.debug("Booting guest %s", params.get("main_vm")) 774 logging.debug("Booting guest %s", params.get("main_vm"))
775 kvm_preprocessing.preprocess_vm(test, params, env, 775 virt_env_process.preprocess_vm(test, params, env,
776 params.get("main_vm")) 776 params.get("main_vm"))
777 777
778 vm = env.get_vm(params.get("main_vm")) 778 vm = env.get_vm(params.get("main_vm"))
779 779
780 kernel_bug = None 780 kernel_bug = None
781 try: 781 try:
782 session = kvm_test_utils.wait_for_login(vm, 0, 782 session = virt_test_utils.wait_for_login(vm, 0,
783 float(params.get("boot_timeout", 100)), 783 float(params.get("boot_timeout", 100)),
784 0, 2) 784 0, 2)
785 except (error.TestFail): 785 except (error.TestFail):
786 kernel_bug = _search_kernel_crashlog(vm.serial_console, 10) 786 kernel_bug = _search_kernel_crashlog(vm.serial_console, 10)
787 if kernel_bug is not None: 787 if kernel_bug is not None:
788 logging.error(kernel_bug) 788 logging.error(kernel_bug)
789 raise 789 raise
790 790
791 kernel_bug = _search_kernel_crashlog(vm.serial_console, 10) 791 kernel_bug = _search_kernel_crashlog(vm.serial_console, 10)
792 if kernel_bug is not None: 792 if kernel_bug is not None:
793 logging.error(kernel_bug) 793 logging.error(kernel_bug)
794 794
795 sserial = kvm_test_utils.wait_for_login(vm, 0, 795 sserial = virt_test_utils.wait_for_login(vm, 0,
796 float(params.get("boot_timeout", 20)), 796 float(params.get("boot_timeout", 20)),
797 0, 2, serial=True) 797 0, 2, serial=True)
798 return [vm, session, sserial] 798 return [vm, session, sserial]
799 799
800 800
801 def topen(vm, port): 801 def topen(vm, port):
802 """ 802 """
803 Open virtioconsole port. 803 Open virtioconsole port.
804 804
805 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session]. 805 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session].
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
1189 Test maximum count of ports in guest machine. 1189 Test maximum count of ports in guest machine.
1190 1190
1191 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session]. 1191 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session].
1192 @param consoles: Consoles which should be close before rmmod. 1192 @param consoles: Consoles which should be close before rmmod.
1193 """ 1193 """
1194 logging.debug("Count of serial ports: 30") 1194 logging.debug("Count of serial ports: 30")
1195 vm[0].destroy(gracefully = False) 1195 vm[0].destroy(gracefully = False)
1196 (vm, consoles) = _vm_create(0, 30, False) 1196 (vm, consoles) = _vm_create(0, 30, False)
1197 try: 1197 try:
1198 init_guest(vm, consoles) 1198 init_guest(vm, consoles)
1199 except error.TestFail as ints: 1199 except error.TestFail, ints:
1200 logging.info("Count of serial ports: 30") 1200 logging.info("Count of serial ports: 30")
1201 raise ints 1201 raise ints
1202 clean_reload_vm(vm, consoles, expected=True) 1202 clean_reload_vm(vm, consoles, expected=True)
1203 1203
1204 1204
1205 def tmax_console_ports(vm, consoles): 1205 def tmax_console_ports(vm, consoles):
1206 """ 1206 """
1207 Test maximum count of ports in guest machine. 1207 Test maximum count of ports in guest machine.
1208 1208
1209 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session]. 1209 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session].
1210 @param consoles: Consoles which should be close before rmmod. 1210 @param consoles: Consoles which should be close before rmmod.
1211 """ 1211 """
1212 logging.debug("Count of console ports: 30") 1212 logging.debug("Count of console ports: 30")
1213 vm[0].destroy(gracefully = False) 1213 vm[0].destroy(gracefully = False)
1214 (vm, consoles) = _vm_create(30, 0, False) 1214 (vm, consoles) = _vm_create(30, 0, False)
1215 try: 1215 try:
1216 init_guest(vm, consoles) 1216 init_guest(vm, consoles)
1217 except error.TestFail as ints: 1217 except error.TestFail, ints:
1218 logging.info("Count of console ports: 30") 1218 logging.info("Count of console ports: 30")
1219 raise ints 1219 raise ints
1220 clean_reload_vm(vm, consoles, expected=True) 1220 clean_reload_vm(vm, consoles, expected=True)
1221 1221
1222 1222
1223 def tmax_mix_serial_conosle_port(vm, consoles): 1223 def tmax_mix_serial_conosle_port(vm, consoles):
1224 """ 1224 """
1225 Test maximim count of ports in guest machine. 1225 Test maximim count of ports in guest machine.
1226 1226
1227 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session]. 1227 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session].
1228 @param consoles: Consoles which should be close before rmmod. 1228 @param consoles: Consoles which should be close before rmmod.
1229 """ 1229 """
1230 logging.debug("Count of ports (serial+console): 30") 1230 logging.debug("Count of ports (serial+console): 30")
1231 vm[0].destroy(gracefully = False) 1231 vm[0].destroy(gracefully = False)
1232 (vm, consoles) = _vm_create(15, 15, False) 1232 (vm, consoles) = _vm_create(15, 15, False)
1233 try: 1233 try:
1234 init_guest(vm, consoles) 1234 init_guest(vm, consoles)
1235 except error.TestFail as ints: 1235 except error.TestFail, ints:
1236 logging.info("Count of ports (serial+console): 30") 1236 logging.info("Count of ports (serial+console): 30")
1237 raise ints 1237 raise ints
1238 clean_reload_vm(vm, consoles, expected=True) 1238 clean_reload_vm(vm, consoles, expected=True)
1239 1239
1240 1240
1241 def tshutdown(vm, consoles): 1241 def tshutdown(vm, consoles):
1242 """ 1242 """
1243 Try to gently shutdown the machine. Virtio_console shouldn't block this. 1243 Try to gently shutdown the machine. Virtio_console shouldn't block this.
1244 1244
1245 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session]. 1245 @param vm: Target virtual machine [vm, session, tmp_dir, ser_session].
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
1333 tmp = "%d data sent; " % threads[0].idx 1333 tmp = "%d data sent; " % threads[0].idx
1334 for thread in threads[1:]: 1334 for thread in threads[1:]:
1335 tmp += "%d, " % thread.idx 1335 tmp += "%d, " % thread.idx
1336 logging.debug("test_loopback: %s data received and verified", 1336 logging.debug("test_loopback: %s data received and verified",
1337 tmp[:-2]) 1337 tmp[:-2])
1338 i+=1 1338 i+=1
1339 time.sleep(2) 1339 time.sleep(2)
1340 1340
1341 1341
1342 for j in range(parms[1]): 1342 for j in range(parms[1]):
1343 vm[0] = kvm_test_utils.migrate(vm[0], env, 3600, "exec", 0, 1343 vm[0] = virt_test_utils.migrate(vm[0], env, 3600, "exec", 0,
1344 offline) 1344 offline)
1345 if not vm[1]: 1345 if not vm[1]:
1346 raise error.TestFail("Could not log into guest after migration") 1346 raise error.TestFail("Could not log into guest after migration")
1347 vm[1] = kvm_test_utils.wait_for_login(vm[0], 0, 1347 vm[1] = virt_test_utils.wait_for_login(vm[0], 0,
1348 float(params.get("boot_timeout", 100)), 1348 float(params.get("boot_timeout", 100)),
1349 0, 2) 1349 0, 2)
1350 # OS is sometime a bit dizzy. DL=30 1350 # OS is sometime a bit dizzy. DL=30
1351 _init_guest(vm, 30) 1351 _init_guest(vm, 30)
1352 1352
1353 i=0 1353 i=0
1354 while i < 6: 1354 while i < 6:
1355 tmp = "%d data sent; " % threads[0].idx 1355 tmp = "%d data sent; " % threads[0].idx
1356 for thread in threads[1:]: 1356 for thread in threads[1:]:
1357 tmp += "%d, " % thread.idx 1357 tmp += "%d, " % thread.idx
(...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after
1896 kernel_bug = _search_kernel_crashlog(vm[0].serial_console, 10) 1896 kernel_bug = _search_kernel_crashlog(vm[0].serial_console, 10)
1897 if kernel_bug is not None: 1897 if kernel_bug is not None:
1898 logging.error(kernel_bug) 1898 logging.error(kernel_bug)
1899 raise error.TestFail("Kernel crash.") 1899 raise error.TestFail("Kernel crash.")
1900 1900
1901 if vm[4] == True: 1901 if vm[4] == True:
1902 raise error.TestFail("Kernel crash.") 1902 raise error.TestFail("Kernel crash.")
1903 match, tmp = _on_guest("guest_exit()", vm, 10) 1903 match, tmp = _on_guest("guest_exit()", vm, 10)
1904 if (match is None) or (match == 0): 1904 if (match is None) or (match == 0):
1905 vm[1].close() 1905 vm[1].close()
1906 vm[1] = kvm_test_utils.wait_for_login(vm[0], 0, 1906 vm[1] = virt_test_utils.wait_for_login(vm[0], 0,
1907 float(params.get("boot_timeout", 5)), 1907 float(params.get("boot_timeout", 5)),
1908 0, 10) 1908 0, 10)
1909 on_guest("killall -9 python " 1909 on_guest("killall -9 python "
1910 "&& echo -n PASS: python killed" 1910 "&& echo -n PASS: python killed"
1911 "|| echo -n PASS: python was already dead", 1911 "|| echo -n PASS: python was already dead",
1912 vm, 10) 1912 vm, 10)
1913 1913
1914 init_guest(vm, consoles) 1914 init_guest(vm, consoles)
1915 _clean_ports(vm, consoles) 1915 _clean_ports(vm, consoles)
1916 1916
1917 except (error.TestFail, kvm_subprocess.ExpectError, 1917 except (error.TestFail, aexpect.ExpectError,
1918 Exception), inst: 1918 Exception), inst:
1919 logging.error(inst) 1919 logging.error(inst)
1920 logging.error("Virtio-console driver is irreparably" 1920 logging.error("Virtio-console driver is irreparably"
1921 " blocked. Every comd end with sig KILL." 1921 " blocked. Every comd end with sig KILL."
1922 "Trying to reboot vm to continue testing...") 1922 "Trying to reboot vm to continue testing...")
1923 try: 1923 try:
1924 vm[0].destroy(gracefully = True) 1924 vm[0].destroy(gracefully = True)
1925 (vm[0], vm[1], vm[3]) = _restore_vm() 1925 (vm[0], vm[1], vm[3]) = _restore_vm()
1926 except (kvm_monitor.MonitorProtocolError): 1926 except (kvm_monitor.MonitorProtocolError):
1927 logging.error("Qemu is blocked. Monitor no longer " 1927 logging.error("Qemu is blocked. Monitor no longer "
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
2165 2165
2166 if subtest.is_failed(): 2166 if subtest.is_failed():
2167 raise error.TestFail("%d out of %d virtio console tests failed" % 2167 raise error.TestFail("%d out of %d virtio console tests failed" %
2168 (subtest.failed, (subtest.passed+subtest.failed))) 2168 (subtest.failed, (subtest.passed+subtest.failed)))
2169 2169
2170 2170
2171 # CLEANUP 2171 # CLEANUP
2172 vm[1].close() 2172 vm[1].close()
2173 vm[0].destroy(gracefully=False) 2173 vm[0].destroy(gracefully=False)
2174 shutil.rmtree(vm[2]) 2174 shutil.rmtree(vm[2])
OLDNEW
« no previous file with comments | « client/tests/kvm/tests/unittest.py ('k') | client/tests/kvm/tests/vmstop.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698