On Thu, Jan 13, 2011 at 12:44:57PM +0200, Dor Laor wrote: > On 01/13/2011 09:35 AM, Hans de Goede wrote: > >Ack. > > > >On 01/13/2011 06:07 AM, Alon Levy wrote: > >>--- > >>tests/migrate.py | 158 > >>++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > In the past you started with kvm autotest. > Is your direction changed? We have several live migration tests, why > not incorporate them together?
No, just that 1) I wrote this and thought someone could use it 2) It's completely independant, so easier for quick tests I still really like kvm-autotest and would like to get it working, but not actively working on it (still have my patch for spice somewhere). Yes, I realized I did yet-another-migration test, but see (1) and (2) above ;) > > >>1 files changed, 158 insertions(+), 0 deletions(-) > >>create mode 100644 tests/migrate.py > >> > >>diff --git a/tests/migrate.py b/tests/migrate.py > >>new file mode 100644 > >>index 0000000..c01b107 > >>--- /dev/null > >>+++ b/tests/migrate.py > >>@@ -0,0 +1,158 @@ > >>+""" > >>+Spice Migration test > >>+ > >>+Somewhat stressfull test of continuous migration with spice in VGA > >>mode or QXL mode, > >>+depends on supplying an image in IMAGE variable (if no image is > >>supplied then > >>+VGA mode since it will just be SeaBIOS). > >>+ > >>+Dependencies: > >>+either qmp in python path or running with spice and qemu side by side: > >>+qemu/QMP/qmp.py > >>+spice/tests/migrate.py > >>+ > >>+Will create two temporary unix sockets in /tmp > >>+Will leave a log file, migrate_test.log, in current directory. > >>+""" > >>+ > >>+# > >>+# start one spiceclient, have two machines (active and target), > >>+# and repeat: > >>+# active wait until it's active > >>+# active client_migrate_info > >>+# active migrate tcp:localhost:9000 > >>+# _wait for event of quit > >>+# active stop, active<->passive > >>+# > >>+# wait until it's active > >>+# command query-status, if running good > >>+# if not listen to events until event of running > >>+ > >>+try: > >>+ import qmp > >>+except: > >>+ import sys > >>+ sys.path.append("../../qemu/QMP") > >>+ try: > >>+ import qmp > >>+ except: > >>+ print "can't find qmp" > >>+ raise SystemExit > >>+from subprocess import Popen, PIPE > >>+import os > >>+import time > >>+import socket > >>+import datetime > >>+import atexit > >>+ > >>+QMP_1, QMP_2 = "/tmp/migrate_test.1.qmp", "/tmp/migrate_test.2.qmp" > >>+SPICE_PORT_1, SPICE_PORT_2 = 5911, 6911 > >>+MIGRATE_PORT = 9000 > >>+QEMU = "qemu.upstream" > >>+LOG_FILENAME = "migrate_log.log" > >>+IMAGE = "/store/images/f14_regular.qcow2" > >>+ > >>+qemu_exec = os.popen("which %s" % QEMU).read().strip() > >>+ > >>+def start_qemu(spice_port, qmp_filename, incoming_port=None): > >>+ incoming_args = [] > >>+ if incoming_port: > >>+ incoming_args = ("-incoming tcp::%s" % incoming_port).split() > >>+ args = ([qemu_exec, "-qmp", "unix:%s,server,nowait" % qmp_filename, > >>+ "-spice", "disable-ticketing,port=%s" % spice_port] > >>+ + incoming_args) > >>+ if os.path.exists(IMAGE): > >>+ args += ["-m", "512", "-drive", > >>+ "file=%s,index=0,media=disk,cache=unsafe" % IMAGE, "-snapshot"] > >>+ proc = Popen(args, executable=qemu_exec, stdin=PIPE, stdout=PIPE) > >>+ while not os.path.exists(qmp_filename): > >>+ time.sleep(0.1) > >>+ proc.qmp_filename = qmp_filename > >>+ proc.qmp = qmp.QEMUMonitorProtocol(qmp_filename) > >>+ while True: > >>+ try: > >>+ proc.qmp.connect() > >>+ break > >>+ except socket.error, err: > >>+ pass > >>+ proc.spice_port = spice_port > >>+ proc.incoming_port = incoming_port > >>+ return proc > >>+ > >>+def start_spicec(spice_port): > >>+ return Popen(("spicec -h localhost -p %s" % spice_port).split(), > >>executable="spicec") > >>+ > >>+def wait_active(q, active): > >>+ events = ["RESUME"] if active else ["STOP"] > >>+ while True: > >>+ try: > >>+ ret = q.cmd("query-status") > >>+ except: > >>+ # ValueError > >>+ time.sleep(0.1) > >>+ continue > >>+ if ret and ret.has_key("return"): > >>+ if ret["return"]["running"] == active: > >>+ break > >>+ for e in q.get_events(): > >>+ if e["event"] in events: > >>+ break > >>+ time.sleep(0.5) > >>+ > >>+def wait_for_event(q, event): > >>+ while True: > >>+ for e in q.get_events(): > >>+ if e["event"] == event: > >>+ return > >>+ time.sleep(0.5) > >>+ > >>+def cleanup(*args): > >>+ print "doing cleanup" > >>+ os.system("killall %s" % qemu_exec) > >>+ for x in [QMP_1, QMP_2]: > >>+ if os.path.exists(x): > >>+ os.unlink(x) > >>+ > >>+#################### Main ####################### > >>+ > >>+cleanup() > >>+atexit.register(cleanup) > >>+ > >>+active = start_qemu(spice_port=SPICE_PORT_1, qmp_filename=QMP_1) > >>+target = start_qemu(spice_port=SPICE_PORT_2, qmp_filename=QMP_2, > >>+ incoming_port=MIGRATE_PORT) > >>+ > >>+i = 0 > >>+spicec = None > >>+log = open(LOG_FILENAME, "a+") > >>+log.write("# "+str(datetime.datetime.now())+"\n") > >>+ > >>+while True: > >>+ wait_active(active.qmp, True) > >>+ wait_active(target.qmp, False) > >>+ if spicec == None: > >>+ spicec = start_spicec(spice_port=SPICE_PORT_1) > >>+ wait_for_event(active.qmp, 'SPICE_INITIALIZED') > >>+ print "waiting for Enter to start migrations" > >>+ raw_input() > >>+ active.qmp.cmd('client_migrate_info', {'protocol':'spice', > >>+ 'hostname':'localhost', 'port':target.spice_port}) > >>+ active.qmp.cmd('migrate', {'uri': 'tcp:localhost:%s' % MIGRATE_PORT}) > >>+ wait_active(active.qmp, False) > >>+ wait_active(target.qmp, True) > >>+ wait_for_event(target.qmp, 'SPICE_CONNECTED') > >>+ dead = active > >>+ dead.qmp.cmd("quit") > >>+ dead.qmp.close() > >>+ dead.wait() > >>+ new_spice_port = dead.spice_port > >>+ new_qmp_filename = dead.qmp_filename > >>+ log.write("# STDOUT dead %s\n" % dead.pid) > >>+ log.write(dead.stdout.read()) > >>+ del dead > >>+ active = target > >>+ target = start_qemu(spice_port=new_spice_port, > >>+ qmp_filename=new_qmp_filename, > >>+ incoming_port=MIGRATE_PORT) > >>+ print i > >>+ i += 1 > >>+ > >_______________________________________________ > >Spice-devel mailing list > >Spice-devel@lists.freedesktop.org > >http://lists.freedesktop.org/mailman/listinfo/spice-devel > > _______________________________________________ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/spice-devel _______________________________________________ Spice-devel mailing list Spice-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/spice-devel