+#
+#
+
# Copyright (C) 2007 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
from qa_utils import AssertEqual, StartSSH
+def _RemoveFileFromAllNodes(filename):
+ """Removes a file from all nodes.
+
+ """
+ for node in qa_config.get('nodes'):
+ cmd = ['rm', '-f', filename]
+ AssertEqual(StartSSH(node['primary'],
+ utils.ShellQuoteArgs(cmd)).wait(), 0)
+
+
+def _CheckFileOnAllNodes(filename, content):
+ """Verifies the content of the given file on all nodes.
+
+ """
+ cmd = utils.ShellQuoteArgs(["cat", filename])
+ for node in qa_config.get('nodes'):
+ AssertEqual(qa_utils.GetCommandOutput(node['primary'], cmd),
+ content)
+
+
def TestClusterInit():
"""gnt-cluster init"""
master = qa_config.GetMasterNode()
cmd.append('--bridge=%s' % bridge)
cmd.append('--master-netdev=%s' % bridge)
+ htype = qa_config.get('default-hypervisor', None)
+ if htype:
+ cmd.append('--default-hypervisor=%s' % htype)
+
cmd.append(qa_config.get('name'))
AssertEqual(StartSSH(master['primary'],
utils.ShellQuoteArgs(cmd)).wait(), 0)
+def TestClusterRename():
+ """gnt-cluster rename"""
+ master = qa_config.GetMasterNode()
+
+ cmd = ['gnt-cluster', 'rename', '-f']
+
+ original_name = qa_config.get('name')
+ rename_target = qa_config.get('rename', None)
+ if rename_target is None:
+ print qa_utils.FormatError('"rename" entry is missing')
+ return
+
+ cmd_1 = cmd + [rename_target]
+ cmd_2 = cmd + [original_name]
+
+ cmd_verify = ['gnt-cluster', 'verify']
+
+ AssertEqual(StartSSH(master['primary'],
+ utils.ShellQuoteArgs(cmd_1)).wait(), 0)
+
+ AssertEqual(StartSSH(master['primary'],
+ utils.ShellQuoteArgs(cmd_verify)).wait(), 0)
+
+ AssertEqual(StartSSH(master['primary'],
+ utils.ShellQuoteArgs(cmd_2)).wait(), 0)
+
+ AssertEqual(StartSSH(master['primary'],
+ utils.ShellQuoteArgs(cmd_verify)).wait(), 0)
+
+
def TestClusterVerify():
"""gnt-cluster verify"""
- cmd = ['gnt-cluster', 'verify']
master = qa_config.GetMasterNode()
+ cmd = ['gnt-cluster', 'verify']
AssertEqual(StartSSH(master['primary'],
utils.ShellQuoteArgs(cmd)).wait(), 0)
def TestClusterInfo():
"""gnt-cluster info"""
+ master = qa_config.GetMasterNode()
+
cmd = ['gnt-cluster', 'info']
+ AssertEqual(StartSSH(master['primary'],
+ utils.ShellQuoteArgs(cmd)).wait(), 0)
+
+
+def TestClusterGetmaster():
+ """gnt-cluster getmaster"""
master = qa_config.GetMasterNode()
+ cmd = ['gnt-cluster', 'getmaster']
+ AssertEqual(StartSSH(master['primary'],
+ utils.ShellQuoteArgs(cmd)).wait(), 0)
+
+
+def TestClusterVersion():
+ """gnt-cluster version"""
+ master = qa_config.GetMasterNode()
+
+ cmd = ['gnt-cluster', 'version']
AssertEqual(StartSSH(master['primary'],
utils.ShellQuoteArgs(cmd)).wait(), 0)
"""Burnin"""
master = qa_config.GetMasterNode()
+ options = qa_config.get('options', {})
+ disk_template = options.get('burnin-disk-template', 'drbd')
+ parallel = options.get('burnin-in-parallel', False)
+ check_inst = options.get('burnin-check-instances', False)
+ do_rename = options.get('burnin-rename', '')
+
# Get as many instances as we need
instances = []
try:
- num = qa_config.get('options', {}).get('burnin-instances', 1)
- for _ in xrange(0, num):
- instances.append(qa_config.AcquireInstance())
- except qa_error.OutOfInstancesError:
- print "Not enough instances, continuing anyway."
+ try:
+ num = qa_config.get('options', {}).get('burnin-instances', 1)
+ for _ in xrange(0, num):
+ instances.append(qa_config.AcquireInstance())
+ except qa_error.OutOfInstancesError:
+ print "Not enough instances, continuing anyway."
- if len(instances) < 1:
- raise qa_error.Error("Burnin needs at least one instance")
+ if len(instances) < 1:
+ raise qa_error.Error("Burnin needs at least one instance")
- # Run burnin
- try:
script = qa_utils.UploadFile(master['primary'], '../tools/burnin')
try:
+ # Run burnin
cmd = [script,
+ '-p',
'--os=%s' % qa_config.get('os'),
- '--os-size=%s' % qa_config.get('os-size'),
- '--swap-size=%s' % qa_config.get('swap-size')]
+ '--disk-size=%s' % ",".join(qa_config.get('disk')),
+ '--disk-growth=%s' % ",".join(qa_config.get('disk-growth')),
+ '--disk-template=%s' % disk_template]
+ if parallel:
+ cmd.append('--parallel')
+ if check_inst:
+ cmd.append('--http-check')
+ if do_rename:
+ cmd.append('--rename=%s' % do_rename)
cmd += [inst['name'] for inst in instances]
AssertEqual(StartSSH(master['primary'],
utils.ShellQuoteArgs(cmd)).wait(), 0)
"""gnt-cluster copyfile"""
master = qa_config.GetMasterNode()
+ uniqueid = utils.NewUUID()
+
# Create temporary file
f = tempfile.NamedTemporaryFile()
- f.write("I'm a testfile.\n")
+ f.write(uniqueid)
f.flush()
f.seek(0)
cmd = ['gnt-cluster', 'copyfile', testname]
AssertEqual(StartSSH(master['primary'],
utils.ShellQuoteArgs(cmd)).wait(), 0)
+ _CheckFileOnAllNodes(testname, uniqueid)
finally:
- # Remove file from all nodes
- for node in qa_config.get('nodes'):
- cmd = ['rm', '-f', testname]
- AssertEqual(StartSSH(node['primary'],
- utils.ShellQuoteArgs(cmd)).wait(), 0)
+ _RemoveFileFromAllNodes(testname)
+
+
+def TestClusterCommand():
+ """gnt-cluster command"""
+ master = qa_config.GetMasterNode()
+
+ uniqueid = utils.NewUUID()
+ rfile = "/tmp/gnt%s" % utils.NewUUID()
+ rcmd = utils.ShellQuoteArgs(['echo', '-n', uniqueid])
+ cmd = utils.ShellQuoteArgs(['gnt-cluster', 'command',
+ "%s >%s" % (rcmd, rfile)])
+
+ try:
+ AssertEqual(StartSSH(master['primary'], cmd).wait(), 0)
+ _CheckFileOnAllNodes(rfile, uniqueid)
+ finally:
+ _RemoveFileFromAllNodes(rfile)
def TestClusterDestroy():
"""gnt-cluster destroy"""
- cmd = ['gnt-cluster', 'destroy', '--yes-do-it']
master = qa_config.GetMasterNode()
+ cmd = ['gnt-cluster', 'destroy', '--yes-do-it']
AssertEqual(StartSSH(master['primary'],
utils.ShellQuoteArgs(cmd)).wait(), 0)