[Spice-devel] [PATCH] tests/migrate.py: refactor to allow importing for later use
Hans de Goede
hdegoede at redhat.com
Fri Feb 11 05:39:51 PST 2011
Ack.
On 02/11/2011 02:31 PM, Alon Levy wrote:
> ---
> just a patch I had lying around, not used yet for anything, but makes it
> easier for later.
> ---
> tests/migrate.py | 132 +++++++++++++++++++++++++++++++++---------------------
> 1 files changed, 81 insertions(+), 51 deletions(-)
>
> diff --git a/tests/migrate.py b/tests/migrate.py
> index c01b107..c5c87dc 100644
> --- a/tests/migrate.py
> +++ b/tests/migrate.py
> @@ -22,7 +22,7 @@ Will leave a log file, migrate_test.log, in current directory.
> # 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
> @@ -47,9 +47,10 @@ 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
> +SPICEC_COUNT = 1
> QEMU = "qemu.upstream"
> LOG_FILENAME = "migrate_log.log"
> -IMAGE = "/store/images/f14_regular.qcow2"
> +IMAGE = "/store/images/F14_CCID.testing.qcow2"
>
> qemu_exec = os.popen("which %s" % QEMU).read().strip()
>
> @@ -105,54 +106,83 @@ def wait_for_event(q, event):
> return
> time.sleep(0.5)
>
> -def cleanup(*args):
> +def cleanup(migrator):
> 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
> + migrator.close()
> +
> +class Migrator(object):
> +
> + migration_count = 0
> +
> + def __init__(self, log, monitor_files, spicec_count, spice_ports, migration_port):
> + self.log = log
> + self.migration_port = migration_port
> + self.spicec_count = spicec_count
> + self.monitor_files = monitor_files
> + self.spice_ports = spice_ports
> + self.active = start_qemu(spice_port=SPICE_PORT_1, qmp_filename=QMP_1)
> + self.target = start_qemu(spice_port=SPICE_PORT_2, qmp_filename=QMP_2,
> + incoming_port=MIGRATE_PORT)
> + self.remove_monitor_files()
> + self.spicec = []
> +
> + def close(self):
> + self.remove_monitor_files()
> + self.kill_qemu()
> +
> + def kill_qemu(self):
> + for p in [self.active, self.target]:
> + print "killing and waiting for qemu pid %s" % p.pid
> + p.kill()
> + p.wait()
> +
> + def remove_monitor_files(self):
> + for x in self.monitor_files:
> + if os.path.exists(x):
> + os.unlink(x)
> +
> + def iterate(self, wait_for_user_input=False):
> + wait_active(self.active.qmp, True)
> + wait_active(self.target.qmp, False)
> + if len(self.spicec) == 0:
> + for i in range(self.spicec_count):
> + self.spicec.append(start_spicec(spice_port=SPICE_PORT_1))
> + wait_for_event(self.active.qmp, 'SPICE_INITIALIZED')
> + if wait_for_user_input:
> + print "waiting for Enter to start migrations"
> + raw_input()
> + self.active.qmp.cmd('client_migrate_info', {'protocol':'spice',
> + 'hostname':'localhost', 'port':self.target.spice_port})
> + self.active.qmp.cmd('migrate', {'uri': 'tcp:localhost:%s' % MIGRATE_PORT})
> + wait_active(self.active.qmp, False)
> + wait_active(self.target.qmp, True)
> + wait_for_event(self.target.qmp, 'SPICE_CONNECTED')
> + dead = self.active
> + dead.qmp.cmd("quit")
> + dead.qmp.close()
> + dead.wait()
> + new_spice_port = dead.spice_port
> + new_qmp_filename = dead.qmp_filename
> + self.log.write("# STDOUT dead %s\n" % dead.pid)
> + self.log.write(dead.stdout.read())
> + del dead
> + self.active = self.target
> + self.target = start_qemu(spice_port=new_spice_port,
> + qmp_filename=new_qmp_filename,
> + incoming_port=MIGRATE_PORT)
> + print self.migration_count
> + self.migration_count += 1
> +
> +def main():
> + log = open(LOG_FILENAME, "a+")
> + log.write("# "+str(datetime.datetime.now())+"\n")
> +
> + migrator = Migrator(log = log, monitor_files = [QMP_1, QMP_2], migration_port = MIGRATE_PORT,
> + spice_ports = [SPICE_PORT_1, SPICE_PORT_2], spicec_count = SPICEC_COUNT)
> + atexit.register(cleanup, migrator)
> + while True:
> + migrator.iterate()
> +
> +if __name__ == '__main__':
> + main()
>
More information about the Spice-devel
mailing list