Commit b998270c authored by Iustin Pop's avatar Iustin Pop
Browse files

Switch QA over to using instance stop --no-remember

Instead of hardcoded Xen commands. This will make it work for all
hypervisors, instead of duplicating hypervisor functionality in QA

The timeout has been removed as gnt-instance stop itself will make
sure the instance is down before returning. We just double-check that
it is indeed down.
Signed-off-by: default avatarIustin Pop <>
Reviewed-by: default avatarRené Nussbaumer <>
parent 2ba39b8f
......@@ -320,16 +320,16 @@ def RunExportImportTests(instance, pnode, snode):
def RunDaemonTests(instance, pnode):
def RunDaemonTests(instance):
"""Test the ganeti-watcher script.
qa_daemon.TestInstanceAutomaticRestart, pnode, instance)
qa_daemon.TestInstanceAutomaticRestart, instance)
qa_daemon.TestInstanceConsecutiveFailures, pnode, instance)
qa_daemon.TestInstanceConsecutiveFailures, instance)
......@@ -412,7 +412,7 @@ def RunQa():
RunExportImportTests(instance, pnode, None)
RunDaemonTests(instance, pnode)
RunTest(qa_instance.TestInstanceRemove, instance)
del instance
# Copyright (C) 2007, 2008, 2009, 2010 Google Inc.
# Copyright (C) 2007, 2008, 2009, 2010, 2011 Google Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
......@@ -35,35 +35,30 @@ import qa_error
from qa_utils import AssertMatch, AssertCommand, StartSSH, GetCommandOutput
def _InstanceRunning(node, name):
def _InstanceRunning(name):
"""Checks whether an instance is running.
@param node: node the instance runs on
@param name: full name of the Xen instance
@param name: full name of the instance
cmd = utils.ShellQuoteArgs(['xm', 'list', name]) + ' >/dev/null'
ret = StartSSH(node['primary'], cmd).wait()
master = qa_config.GetMasterNode()
cmd = (utils.ShellQuoteArgs(["gnt-instance", "list", "-o", "status", name]) +
' | grep running')
ret = StartSSH(master["primary"], cmd).wait()
return ret == 0
def _XmShutdownInstance(node, name):
"""Shuts down instance using "xm" and waits for completion.
def _ShutdownInstance(name):
"""Shuts down instance without recording state and waits for completion.
@param node: node the instance runs on
@param name: full name of Xen instance
@param name: full name of the instance
AssertCommand(["xm", "shutdown", name], node=node)
AssertCommand(["gnt-instance", "shutdown", "--no-remember", name])
# Wait up to a minute
end = time.time() + 60
while time.time() <= end:
if not _InstanceRunning(node, name):
raise qa_error.Error("xm shutdown failed")
if _InstanceRunning(name):
raise qa_error.Error("instance shutdown failed")
def _ResetWatcherDaemon():
......@@ -108,25 +103,25 @@ def TestResumeWatcher():
AssertMatch(output, r"^.*\bis not paused\b.*")
def TestInstanceAutomaticRestart(node, instance):
def TestInstanceAutomaticRestart(instance):
"""Test automatic restart of instance by ganeti-watcher.
inst_name = qa_utils.ResolveInstanceName(instance["name"])
_XmShutdownInstance(node, inst_name)
if not _InstanceRunning(node, inst_name):
if not _InstanceRunning(inst_name):
raise qa_error.Error("Daemon didn't restart instance")
AssertCommand(["gnt-instance", "info", inst_name])
def TestInstanceConsecutiveFailures(node, instance):
def TestInstanceConsecutiveFailures(instance):
"""Test five consecutive instance failures.
......@@ -135,11 +130,11 @@ def TestInstanceConsecutiveFailures(node, instance):
for should_start in ([True] * 5) + [False]:
_XmShutdownInstance(node, inst_name)
if bool(_InstanceRunning(node, inst_name)) != should_start:
if bool(_InstanceRunning(inst_name)) != should_start:
if should_start:
msg = "Instance not started when it should"
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment