Statistics
| Branch: | Tag: | Revision:

root / qa / qa_cluster.py @ 24818e8f

History | View | Annotate | Download (5.8 kB)

1 cec9845c Michael Hanselmann
# Copyright (C) 2007 Google Inc.
2 cec9845c Michael Hanselmann
#
3 cec9845c Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
4 cec9845c Michael Hanselmann
# it under the terms of the GNU General Public License as published by
5 cec9845c Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
6 cec9845c Michael Hanselmann
# (at your option) any later version.
7 cec9845c Michael Hanselmann
#
8 cec9845c Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
9 cec9845c Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
10 cec9845c Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 cec9845c Michael Hanselmann
# General Public License for more details.
12 cec9845c Michael Hanselmann
#
13 cec9845c Michael Hanselmann
# You should have received a copy of the GNU General Public License
14 cec9845c Michael Hanselmann
# along with this program; if not, write to the Free Software
15 cec9845c Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16 cec9845c Michael Hanselmann
# 02110-1301, USA.
17 cec9845c Michael Hanselmann
18 cec9845c Michael Hanselmann
19 cec9845c Michael Hanselmann
"""Cluster related QA tests.
20 cec9845c Michael Hanselmann

21 cec9845c Michael Hanselmann
"""
22 cec9845c Michael Hanselmann
23 cec9845c Michael Hanselmann
import tempfile
24 cec9845c Michael Hanselmann
25 cec9845c Michael Hanselmann
from ganeti import utils
26 cec9845c Michael Hanselmann
27 cec9845c Michael Hanselmann
import qa_config
28 cec9845c Michael Hanselmann
import qa_utils
29 cec9845c Michael Hanselmann
import qa_error
30 cec9845c Michael Hanselmann
31 cec9845c Michael Hanselmann
from qa_utils import AssertEqual, StartSSH
32 cec9845c Michael Hanselmann
33 cec9845c Michael Hanselmann
34 830da270 Michael Hanselmann
def _RemoveFileFromAllNodes(filename):
35 830da270 Michael Hanselmann
  """Removes a file from all nodes.
36 830da270 Michael Hanselmann

37 830da270 Michael Hanselmann
  """
38 830da270 Michael Hanselmann
  for node in qa_config.get('nodes'):
39 830da270 Michael Hanselmann
    cmd = ['rm', '-f', filename]
40 830da270 Michael Hanselmann
    AssertEqual(StartSSH(node['primary'],
41 830da270 Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
42 830da270 Michael Hanselmann
43 830da270 Michael Hanselmann
44 830da270 Michael Hanselmann
def _CheckFileOnAllNodes(filename, content):
45 830da270 Michael Hanselmann
  """Verifies the content of the given file on all nodes.
46 830da270 Michael Hanselmann

47 830da270 Michael Hanselmann
  """
48 830da270 Michael Hanselmann
  cmd = utils.ShellQuoteArgs(["cat", filename])
49 830da270 Michael Hanselmann
  for node in qa_config.get('nodes'):
50 830da270 Michael Hanselmann
    AssertEqual(qa_utils.GetCommandOutput(node['primary'], cmd),
51 830da270 Michael Hanselmann
                content)
52 830da270 Michael Hanselmann
53 830da270 Michael Hanselmann
54 cec9845c Michael Hanselmann
def TestClusterInit():
55 cec9845c Michael Hanselmann
  """gnt-cluster init"""
56 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
57 cec9845c Michael Hanselmann
58 cec9845c Michael Hanselmann
  cmd = ['gnt-cluster', 'init']
59 cec9845c Michael Hanselmann
60 cec9845c Michael Hanselmann
  if master.get('secondary', None):
61 cec9845c Michael Hanselmann
    cmd.append('--secondary-ip=%s' % master['secondary'])
62 cec9845c Michael Hanselmann
63 cec9845c Michael Hanselmann
  bridge = qa_config.get('bridge', None)
64 cec9845c Michael Hanselmann
  if bridge:
65 cec9845c Michael Hanselmann
    cmd.append('--bridge=%s' % bridge)
66 cec9845c Michael Hanselmann
    cmd.append('--master-netdev=%s' % bridge)
67 cec9845c Michael Hanselmann
68 cec9845c Michael Hanselmann
  cmd.append(qa_config.get('name'))
69 cec9845c Michael Hanselmann
70 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
71 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
72 cec9845c Michael Hanselmann
73 cec9845c Michael Hanselmann
74 cec9845c Michael Hanselmann
def TestClusterVerify():
75 cec9845c Michael Hanselmann
  """gnt-cluster verify"""
76 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
77 cec9845c Michael Hanselmann
78 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'verify']
79 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
80 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
81 cec9845c Michael Hanselmann
82 cec9845c Michael Hanselmann
83 cec9845c Michael Hanselmann
def TestClusterInfo():
84 cec9845c Michael Hanselmann
  """gnt-cluster info"""
85 283f9d4c Michael Hanselmann
  master = qa_config.GetMasterNode()
86 283f9d4c Michael Hanselmann
87 cec9845c Michael Hanselmann
  cmd = ['gnt-cluster', 'info']
88 283f9d4c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
89 283f9d4c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
90 283f9d4c Michael Hanselmann
91 283f9d4c Michael Hanselmann
92 283f9d4c Michael Hanselmann
def TestClusterGetmaster():
93 283f9d4c Michael Hanselmann
  """gnt-cluster getmaster"""
94 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
95 cec9845c Michael Hanselmann
96 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'getmaster']
97 283f9d4c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
98 283f9d4c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
99 283f9d4c Michael Hanselmann
100 283f9d4c Michael Hanselmann
101 283f9d4c Michael Hanselmann
def TestClusterVersion():
102 283f9d4c Michael Hanselmann
  """gnt-cluster version"""
103 283f9d4c Michael Hanselmann
  master = qa_config.GetMasterNode()
104 283f9d4c Michael Hanselmann
105 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'version']
106 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
107 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
108 cec9845c Michael Hanselmann
109 cec9845c Michael Hanselmann
110 cec9845c Michael Hanselmann
def TestClusterBurnin():
111 cec9845c Michael Hanselmann
  """Burnin"""
112 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
113 cec9845c Michael Hanselmann
114 cec9845c Michael Hanselmann
  # Get as many instances as we need
115 cec9845c Michael Hanselmann
  instances = []
116 cec9845c Michael Hanselmann
  try:
117 cec9845c Michael Hanselmann
    num = qa_config.get('options', {}).get('burnin-instances', 1)
118 cec9845c Michael Hanselmann
    for _ in xrange(0, num):
119 cec9845c Michael Hanselmann
      instances.append(qa_config.AcquireInstance())
120 cec9845c Michael Hanselmann
  except qa_error.OutOfInstancesError:
121 cec9845c Michael Hanselmann
    print "Not enough instances, continuing anyway."
122 cec9845c Michael Hanselmann
123 cec9845c Michael Hanselmann
  if len(instances) < 1:
124 cec9845c Michael Hanselmann
    raise qa_error.Error("Burnin needs at least one instance")
125 cec9845c Michael Hanselmann
126 cec9845c Michael Hanselmann
  # Run burnin
127 cec9845c Michael Hanselmann
  try:
128 cec9845c Michael Hanselmann
    script = qa_utils.UploadFile(master['primary'], '../tools/burnin')
129 cec9845c Michael Hanselmann
    try:
130 cec9845c Michael Hanselmann
      cmd = [script,
131 cec9845c Michael Hanselmann
             '--os=%s' % qa_config.get('os'),
132 cec9845c Michael Hanselmann
             '--os-size=%s' % qa_config.get('os-size'),
133 cec9845c Michael Hanselmann
             '--swap-size=%s' % qa_config.get('swap-size')]
134 cec9845c Michael Hanselmann
      cmd += [inst['name'] for inst in instances]
135 cec9845c Michael Hanselmann
      AssertEqual(StartSSH(master['primary'],
136 cec9845c Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
137 cec9845c Michael Hanselmann
    finally:
138 cec9845c Michael Hanselmann
      cmd = ['rm', '-f', script]
139 cec9845c Michael Hanselmann
      AssertEqual(StartSSH(master['primary'],
140 cec9845c Michael Hanselmann
                           utils.ShellQuoteArgs(cmd)).wait(), 0)
141 cec9845c Michael Hanselmann
  finally:
142 cec9845c Michael Hanselmann
    for inst in instances:
143 cec9845c Michael Hanselmann
      qa_config.ReleaseInstance(inst)
144 cec9845c Michael Hanselmann
145 cec9845c Michael Hanselmann
146 cec9845c Michael Hanselmann
def TestClusterMasterFailover():
147 cec9845c Michael Hanselmann
  """gnt-cluster masterfailover"""
148 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
149 cec9845c Michael Hanselmann
150 cec9845c Michael Hanselmann
  failovermaster = qa_config.AcquireNode(exclude=master)
151 cec9845c Michael Hanselmann
  try:
152 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'masterfailover']
153 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(failovermaster['primary'],
154 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
155 cec9845c Michael Hanselmann
156 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'masterfailover']
157 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(master['primary'],
158 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
159 cec9845c Michael Hanselmann
  finally:
160 cec9845c Michael Hanselmann
    qa_config.ReleaseNode(failovermaster)
161 cec9845c Michael Hanselmann
162 cec9845c Michael Hanselmann
163 cec9845c Michael Hanselmann
def TestClusterCopyfile():
164 cec9845c Michael Hanselmann
  """gnt-cluster copyfile"""
165 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
166 cec9845c Michael Hanselmann
167 24818e8f Michael Hanselmann
  uniqueid = utils.NewUUID()
168 830da270 Michael Hanselmann
169 cec9845c Michael Hanselmann
  # Create temporary file
170 cec9845c Michael Hanselmann
  f = tempfile.NamedTemporaryFile()
171 830da270 Michael Hanselmann
  f.write(uniqueid)
172 cec9845c Michael Hanselmann
  f.flush()
173 cec9845c Michael Hanselmann
  f.seek(0)
174 cec9845c Michael Hanselmann
175 cec9845c Michael Hanselmann
  # Upload file to master node
176 cec9845c Michael Hanselmann
  testname = qa_utils.UploadFile(master['primary'], f.name)
177 cec9845c Michael Hanselmann
  try:
178 cec9845c Michael Hanselmann
    # Copy file to all nodes
179 cec9845c Michael Hanselmann
    cmd = ['gnt-cluster', 'copyfile', testname]
180 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(master['primary'],
181 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
182 830da270 Michael Hanselmann
    _CheckFileOnAllNodes(testname, uniqueid)
183 cec9845c Michael Hanselmann
  finally:
184 830da270 Michael Hanselmann
    _RemoveFileFromAllNodes(testname)
185 830da270 Michael Hanselmann
186 830da270 Michael Hanselmann
187 830da270 Michael Hanselmann
def TestClusterCommand():
188 830da270 Michael Hanselmann
  """gnt-cluster command"""
189 830da270 Michael Hanselmann
  master = qa_config.GetMasterNode()
190 830da270 Michael Hanselmann
191 24818e8f Michael Hanselmann
  uniqueid = utils.NewUUID()
192 24818e8f Michael Hanselmann
  rfile = "/tmp/gnt%s" % utils.NewUUID()
193 830da270 Michael Hanselmann
  rcmd = utils.ShellQuoteArgs(['echo', '-n', uniqueid])
194 830da270 Michael Hanselmann
  cmd = utils.ShellQuoteArgs(['gnt-cluster', 'command',
195 830da270 Michael Hanselmann
                              "%s >%s" % (rcmd, rfile)])
196 830da270 Michael Hanselmann
197 830da270 Michael Hanselmann
  try:
198 830da270 Michael Hanselmann
    AssertEqual(StartSSH(master['primary'], cmd).wait(), 0)
199 830da270 Michael Hanselmann
    _CheckFileOnAllNodes(rfile, uniqueid)
200 830da270 Michael Hanselmann
  finally:
201 830da270 Michael Hanselmann
    _RemoveFileFromAllNodes(rfile)
202 cec9845c Michael Hanselmann
203 cec9845c Michael Hanselmann
204 cec9845c Michael Hanselmann
def TestClusterDestroy():
205 cec9845c Michael Hanselmann
  """gnt-cluster destroy"""
206 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
207 cec9845c Michael Hanselmann
208 283f9d4c Michael Hanselmann
  cmd = ['gnt-cluster', 'destroy', '--yes-do-it']
209 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
210 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)