Statistics
| Branch: | Tag: | Revision:

root / qa / ganeti-qa.py @ 7b4eed05

History | View | Annotate | Download (13 kB)

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

24 94508060 Michael Hanselmann
"""
25 a8083063 Iustin Pop
26 a8083063 Iustin Pop
import sys
27 c68d1f43 Michael Hanselmann
import datetime
28 c68d1f43 Michael Hanselmann
import optparse
29 a8083063 Iustin Pop
30 cec9845c Michael Hanselmann
import qa_cluster
31 cec9845c Michael Hanselmann
import qa_config
32 cec9845c Michael Hanselmann
import qa_daemon
33 cec9845c Michael Hanselmann
import qa_env
34 cec9845c Michael Hanselmann
import qa_instance
35 cec9845c Michael Hanselmann
import qa_node
36 8947cf2b Michael Hanselmann
import qa_os
37 a47f574c Oleksiy Mishchenko
import qa_rapi
38 d74c2ca1 Michael Hanselmann
import qa_tags
39 1672a0d1 Michael Hanselmann
import qa_utils
40 a8083063 Iustin Pop
41 725ec2f1 René Nussbaumer
from ganeti import utils
42 2a7c3583 Michael Hanselmann
from ganeti import rapi
43 2a7c3583 Michael Hanselmann
44 2a7c3583 Michael Hanselmann
import ganeti.rapi.client
45 725ec2f1 René Nussbaumer
46 a8083063 Iustin Pop
47 f89d59b9 Iustin Pop
def _FormatHeader(line, end=72, char="-"):
48 f89d59b9 Iustin Pop
  """Fill a line up to the end column.
49 f89d59b9 Iustin Pop

50 f89d59b9 Iustin Pop
  """
51 f89d59b9 Iustin Pop
  line = "---- " + line + " "
52 f89d59b9 Iustin Pop
  line += "-" * (end-len(line))
53 f89d59b9 Iustin Pop
  line = line.rstrip()
54 f89d59b9 Iustin Pop
  return line
55 f89d59b9 Iustin Pop
56 f89d59b9 Iustin Pop
57 cec9845c Michael Hanselmann
def RunTest(fn, *args):
58 a8083063 Iustin Pop
  """Runs a test after printing a header.
59 a8083063 Iustin Pop

60 a8083063 Iustin Pop
  """
61 cec9845c Michael Hanselmann
  if fn.__doc__:
62 cec9845c Michael Hanselmann
    desc = fn.__doc__.splitlines()[0].strip()
63 a8083063 Iustin Pop
  else:
64 f89d59b9 Iustin Pop
    desc = "%r" % fn
65 a8083063 Iustin Pop
66 f89d59b9 Iustin Pop
  desc = desc.rstrip(".")
67 a8083063 Iustin Pop
68 f89d59b9 Iustin Pop
  tstart = datetime.datetime.now()
69 a8083063 Iustin Pop
70 f89d59b9 Iustin Pop
  print
71 f89d59b9 Iustin Pop
  print _FormatHeader("%s start %s" % (tstart, desc))
72 f89d59b9 Iustin Pop
73 f89d59b9 Iustin Pop
  try:
74 f89d59b9 Iustin Pop
    retval = fn(*args)
75 f89d59b9 Iustin Pop
    return retval
76 f89d59b9 Iustin Pop
  finally:
77 f89d59b9 Iustin Pop
    tstop = datetime.datetime.now()
78 f89d59b9 Iustin Pop
    tdelta = tstop - tstart
79 f89d59b9 Iustin Pop
    print _FormatHeader("%s time=%s %s" % (tstop, tdelta, desc))
80 a8083063 Iustin Pop
81 a8083063 Iustin Pop
82 b1ffe1eb Michael Hanselmann
def RunEnvTests():
83 b1ffe1eb Michael Hanselmann
  """Run several environment tests.
84 a8083063 Iustin Pop

85 a8083063 Iustin Pop
  """
86 b1ffe1eb Michael Hanselmann
  if not qa_config.TestEnabled('env'):
87 b1ffe1eb Michael Hanselmann
    return
88 a8083063 Iustin Pop
89 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestSshConnection)
90 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestIcmpPing)
91 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestGanetiCommands)
92 a8083063 Iustin Pop
93 94508060 Michael Hanselmann
94 725ec2f1 René Nussbaumer
def SetupCluster(rapi_user, rapi_secret):
95 b1ffe1eb Michael Hanselmann
  """Initializes the cluster.
96 a8083063 Iustin Pop

97 725ec2f1 René Nussbaumer
  @param rapi_user: Login user for RAPI
98 725ec2f1 René Nussbaumer
  @param rapi_secret: Login secret for RAPI
99 725ec2f1 René Nussbaumer

100 b1ffe1eb Michael Hanselmann
  """
101 a5b9d725 Iustin Pop
  if qa_config.TestEnabled('create-cluster'):
102 725ec2f1 René Nussbaumer
    RunTest(qa_cluster.TestClusterInit, rapi_user, rapi_secret)
103 a5b9d725 Iustin Pop
    RunTest(qa_node.TestNodeAddAll)
104 8e671b7c Iustin Pop
  else:
105 8e671b7c Iustin Pop
    # consider the nodes are already there
106 8e671b7c Iustin Pop
    qa_node.MarkNodeAddedAll()
107 8201b996 Iustin Pop
108 cd04f8c2 Michael Hanselmann
  if qa_config.TestEnabled("test-jobqueue"):
109 cd04f8c2 Michael Hanselmann
    RunTest(qa_cluster.TestJobqueue)
110 cd04f8c2 Michael Hanselmann
111 8201b996 Iustin Pop
  # enable the watcher (unconditionally)
112 8201b996 Iustin Pop
  RunTest(qa_daemon.TestResumeWatcher)
113 8201b996 Iustin Pop
114 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-info'):
115 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeInfo)
116 b1ffe1eb Michael Hanselmann
117 b1ffe1eb Michael Hanselmann
118 b1ffe1eb Michael Hanselmann
def RunClusterTests():
119 b1ffe1eb Michael Hanselmann
  """Runs tests related to gnt-cluster.
120 180bdd1f Michael Hanselmann

121 b1ffe1eb Michael Hanselmann
  """
122 6d4a1656 Michael Hanselmann
  if qa_config.TestEnabled("cluster-renew-crypto"):
123 6d4a1656 Michael Hanselmann
    RunTest(qa_cluster.TestClusterRenewCrypto)
124 6d4a1656 Michael Hanselmann
125 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-verify'):
126 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterVerify)
127 e9e35aaa Michael Hanselmann
128 452913ed Iustin Pop
  if qa_config.TestEnabled('cluster-reserved-lvs'):
129 452913ed Iustin Pop
    RunTest(qa_cluster.TestClusterReservedLvs)
130 452913ed Iustin Pop
131 caea3b32 Iustin Pop
  if qa_config.TestEnabled('cluster-rename'):
132 caea3b32 Iustin Pop
    RunTest(qa_cluster.TestClusterRename)
133 caea3b32 Iustin Pop
134 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-info'):
135 62843684 Michael Hanselmann
    RunTest(qa_cluster.TestClusterVersion)
136 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterInfo)
137 283f9d4c Michael Hanselmann
    RunTest(qa_cluster.TestClusterGetmaster)
138 283f9d4c Michael Hanselmann
139 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-copyfile'):
140 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterCopyfile)
141 a8083063 Iustin Pop
142 830da270 Michael Hanselmann
  if qa_config.TestEnabled('cluster-command'):
143 830da270 Michael Hanselmann
    RunTest(qa_cluster.TestClusterCommand)
144 830da270 Michael Hanselmann
145 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-burnin'):
146 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterBurnin)
147 a8083063 Iustin Pop
148 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-master-failover'):
149 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterMasterFailover)
150 a8083063 Iustin Pop
151 a47f574c Oleksiy Mishchenko
  if qa_rapi.Enabled():
152 a47f574c Oleksiy Mishchenko
    RunTest(qa_rapi.TestVersion)
153 a47f574c Oleksiy Mishchenko
    RunTest(qa_rapi.TestEmptyCluster)
154 8947cf2b Michael Hanselmann
155 6d4a1656 Michael Hanselmann
156 b1ffe1eb Michael Hanselmann
def RunOsTests():
157 b1ffe1eb Michael Hanselmann
  """Runs all tests related to gnt-os.
158 5d640672 Michael Hanselmann

159 b1ffe1eb Michael Hanselmann
  """
160 b1ffe1eb Michael Hanselmann
  if not qa_config.TestEnabled('os'):
161 b1ffe1eb Michael Hanselmann
    return
162 b1ffe1eb Michael Hanselmann
163 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsList)
164 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsDiagnose)
165 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsValid)
166 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsInvalid)
167 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsPartiallyValid)
168 fca11dec René Nussbaumer
  RunTest(qa_os.TestOsModifyValid)
169 fca11dec René Nussbaumer
  RunTest(qa_os.TestOsModifyInvalid)
170 e1df06f2 Iustin Pop
  RunTest(qa_os.TestOsStates)
171 b1ffe1eb Michael Hanselmann
172 b1ffe1eb Michael Hanselmann
173 b1ffe1eb Michael Hanselmann
def RunCommonInstanceTests(instance):
174 b1ffe1eb Michael Hanselmann
  """Runs a few tests that are common to all disk types.
175 b1ffe1eb Michael Hanselmann

176 b1ffe1eb Michael Hanselmann
  """
177 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-shutdown'):
178 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceShutdown, instance)
179 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceStartup, instance)
180 a8083063 Iustin Pop
181 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-list'):
182 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceList)
183 283f9d4c Michael Hanselmann
184 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-info'):
185 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceInfo, instance)
186 e9e35aaa Michael Hanselmann
187 c0f74c55 Iustin Pop
  if qa_config.TestEnabled('instance-modify'):
188 c0f74c55 Iustin Pop
    RunTest(qa_instance.TestInstanceModify, instance)
189 3b7158ef Michael Hanselmann
    if qa_rapi.Enabled():
190 3b7158ef Michael Hanselmann
      RunTest(qa_rapi.TestRapiInstanceModify, instance)
191 c0f74c55 Iustin Pop
192 4379b1fa Michael Hanselmann
  if qa_config.TestEnabled('instance-console'):
193 4379b1fa Michael Hanselmann
    RunTest(qa_instance.TestInstanceConsole, instance)
194 4379b1fa Michael Hanselmann
195 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-reinstall'):
196 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceShutdown, instance)
197 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceReinstall, instance)
198 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceStartup, instance)
199 a8083063 Iustin Pop
200 8a4e8898 Michael Hanselmann
  if qa_config.TestEnabled('instance-reboot'):
201 8a4e8898 Michael Hanselmann
    RunTest(qa_instance.TestInstanceReboot, instance)
202 8a4e8898 Michael Hanselmann
203 18337ca9 Iustin Pop
  if qa_config.TestEnabled('instance-rename'):
204 7fb50870 Michael Hanselmann
    rename_target = qa_config.get("rename", None)
205 7fb50870 Michael Hanselmann
    if rename_target is None:
206 7fb50870 Michael Hanselmann
      print qa_utils.FormatError("Can rename instance, 'rename' entry is"
207 7fb50870 Michael Hanselmann
                                 " missing from configuration")
208 7fb50870 Michael Hanselmann
    else:
209 7fb50870 Michael Hanselmann
      RunTest(qa_instance.TestInstanceShutdown, instance)
210 7fb50870 Michael Hanselmann
      RunTest(qa_instance.TestInstanceRename, instance, rename_target)
211 7fb50870 Michael Hanselmann
      if qa_rapi.Enabled():
212 7fb50870 Michael Hanselmann
        RunTest(qa_rapi.TestRapiInstanceRename, instance, rename_target)
213 7fb50870 Michael Hanselmann
      RunTest(qa_instance.TestInstanceStartup, instance)
214 18337ca9 Iustin Pop
215 d74c2ca1 Michael Hanselmann
  if qa_config.TestEnabled('tags'):
216 d74c2ca1 Michael Hanselmann
    RunTest(qa_tags.TestInstanceTags, instance)
217 d74c2ca1 Michael Hanselmann
218 729c4377 Iustin Pop
  if qa_rapi.Enabled():
219 729c4377 Iustin Pop
    RunTest(qa_rapi.TestInstance, instance)
220 729c4377 Iustin Pop
221 729c4377 Iustin Pop
222 729c4377 Iustin Pop
def RunCommonNodeTests():
223 729c4377 Iustin Pop
  """Run a few common node tests.
224 729c4377 Iustin Pop

225 729c4377 Iustin Pop
  """
226 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-volumes'):
227 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeVolumes)
228 23269c5b Michael Hanselmann
229 8e1db003 Michael Hanselmann
  if qa_config.TestEnabled("node-storage"):
230 8e1db003 Michael Hanselmann
    RunTest(qa_node.TestNodeStorage)
231 8e1db003 Michael Hanselmann
232 8d8d650c Michael Hanselmann
233 638a7266 Iustin Pop
def RunExportImportTests(instance, pnode, snode):
234 b1ffe1eb Michael Hanselmann
  """Tries to export and import the instance.
235 a8083063 Iustin Pop

236 638a7266 Iustin Pop
  @param pnode: current primary node of the instance
237 638a7266 Iustin Pop
  @param snode: current secondary node of the instance, if any,
238 638a7266 Iustin Pop
      otherwise None
239 638a7266 Iustin Pop

240 b1ffe1eb Michael Hanselmann
  """
241 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-export'):
242 bc696589 Michael Hanselmann
    RunTest(qa_instance.TestInstanceExportNoTarget, instance)
243 bc696589 Michael Hanselmann
244 b1ffe1eb Michael Hanselmann
    expnode = qa_config.AcquireNode(exclude=pnode)
245 b1ffe1eb Michael Hanselmann
    try:
246 b1ffe1eb Michael Hanselmann
      name = RunTest(qa_instance.TestInstanceExport, instance, expnode)
247 b1ffe1eb Michael Hanselmann
248 b1ffe1eb Michael Hanselmann
      RunTest(qa_instance.TestBackupList, expnode)
249 b1ffe1eb Michael Hanselmann
250 b1ffe1eb Michael Hanselmann
      if qa_config.TestEnabled('instance-import'):
251 b1ffe1eb Michael Hanselmann
        newinst = qa_config.AcquireInstance()
252 5d640672 Michael Hanselmann
        try:
253 b1ffe1eb Michael Hanselmann
          RunTest(qa_instance.TestInstanceImport, pnode, newinst,
254 b1ffe1eb Michael Hanselmann
                  expnode, name)
255 b1ffe1eb Michael Hanselmann
          RunTest(qa_instance.TestInstanceRemove, newinst)
256 5d640672 Michael Hanselmann
        finally:
257 b1ffe1eb Michael Hanselmann
          qa_config.ReleaseInstance(newinst)
258 b1ffe1eb Michael Hanselmann
    finally:
259 b1ffe1eb Michael Hanselmann
      qa_config.ReleaseNode(expnode)
260 5d640672 Michael Hanselmann
261 5d831182 Michael Hanselmann
  if (qa_rapi.Enabled() and
262 5d831182 Michael Hanselmann
      qa_config.TestEnabled("inter-cluster-instance-move")):
263 5d831182 Michael Hanselmann
    newinst = qa_config.AcquireInstance()
264 5d831182 Michael Hanselmann
    try:
265 638a7266 Iustin Pop
      if snode is None:
266 638a7266 Iustin Pop
        excl = [pnode]
267 638a7266 Iustin Pop
      else:
268 638a7266 Iustin Pop
        excl = [pnode, snode]
269 638a7266 Iustin Pop
      tnode = qa_config.AcquireNode(exclude=excl)
270 5d831182 Michael Hanselmann
      try:
271 5d831182 Michael Hanselmann
        RunTest(qa_rapi.TestInterClusterInstanceMove, instance, newinst,
272 638a7266 Iustin Pop
                pnode, snode, tnode)
273 5d831182 Michael Hanselmann
      finally:
274 638a7266 Iustin Pop
        qa_config.ReleaseNode(tnode)
275 5d831182 Michael Hanselmann
    finally:
276 5d831182 Michael Hanselmann
      qa_config.ReleaseInstance(newinst)
277 5d831182 Michael Hanselmann
278 283f9d4c Michael Hanselmann
279 b1ffe1eb Michael Hanselmann
def RunDaemonTests(instance, pnode):
280 b1ffe1eb Michael Hanselmann
  """Test the ganeti-watcher script.
281 9df6d173 Michael Hanselmann

282 b1ffe1eb Michael Hanselmann
  """
283 b1ffe1eb Michael Hanselmann
  automatic_restart = \
284 b1ffe1eb Michael Hanselmann
    qa_config.TestEnabled('instance-automatic-restart')
285 b1ffe1eb Michael Hanselmann
  consecutive_failures = \
286 b1ffe1eb Michael Hanselmann
    qa_config.TestEnabled('instance-consecutive-failures')
287 a8083063 Iustin Pop
288 8201b996 Iustin Pop
  RunTest(qa_daemon.TestPauseWatcher)
289 b1ffe1eb Michael Hanselmann
  if automatic_restart or consecutive_failures:
290 5d640672 Michael Hanselmann
291 b1ffe1eb Michael Hanselmann
    if automatic_restart:
292 b1ffe1eb Michael Hanselmann
      RunTest(qa_daemon.TestInstanceAutomaticRestart, pnode, instance)
293 e9e35aaa Michael Hanselmann
294 b1ffe1eb Michael Hanselmann
    if consecutive_failures:
295 6623a5c1 Michael Hanselmann
      RunTest(qa_daemon.TestInstanceConsecutiveFailures, pnode, instance)
296 e9e35aaa Michael Hanselmann
297 8201b996 Iustin Pop
  RunTest(qa_daemon.TestResumeWatcher)
298 8201b996 Iustin Pop
299 9df6d173 Michael Hanselmann
300 b1ffe1eb Michael Hanselmann
def RunHardwareFailureTests(instance, pnode, snode):
301 b1ffe1eb Michael Hanselmann
  """Test cluster internal hardware failure recovery.
302 a8083063 Iustin Pop

303 b1ffe1eb Michael Hanselmann
  """
304 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-failover'):
305 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceFailover, instance)
306 b1ffe1eb Michael Hanselmann
307 938bde86 Michael Hanselmann
  if qa_config.TestEnabled("instance-migrate"):
308 938bde86 Michael Hanselmann
    RunTest(qa_instance.TestInstanceMigrate, instance)
309 938bde86 Michael Hanselmann
310 938bde86 Michael Hanselmann
    if qa_rapi.Enabled():
311 938bde86 Michael Hanselmann
      RunTest(qa_rapi.TestRapiInstanceMigrate, instance)
312 938bde86 Michael Hanselmann
313 7910e7a5 Michael Hanselmann
  if qa_config.TestEnabled('instance-replace-disks'):
314 76f59a32 Michael Hanselmann
    othernode = qa_config.AcquireNode(exclude=[pnode, snode])
315 7910e7a5 Michael Hanselmann
    try:
316 7910e7a5 Michael Hanselmann
      RunTest(qa_instance.TestReplaceDisks,
317 7910e7a5 Michael Hanselmann
              instance, pnode, snode, othernode)
318 7910e7a5 Michael Hanselmann
    finally:
319 7910e7a5 Michael Hanselmann
      qa_config.ReleaseNode(othernode)
320 7910e7a5 Michael Hanselmann
321 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-evacuate'):
322 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeEvacuate, pnode, snode)
323 b1ffe1eb Michael Hanselmann
324 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-failover'):
325 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeFailover, pnode, snode)
326 b1ffe1eb Michael Hanselmann
327 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-disk-failure'):
328 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceMasterDiskFailure,
329 b1ffe1eb Michael Hanselmann
            instance, pnode, snode)
330 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceSecondaryDiskFailure,
331 b1ffe1eb Michael Hanselmann
            instance, pnode, snode)
332 b1ffe1eb Michael Hanselmann
333 b1ffe1eb Michael Hanselmann
334 2a7c3583 Michael Hanselmann
@rapi.client.UsesRapiClient
335 b1ffe1eb Michael Hanselmann
def main():
336 b1ffe1eb Michael Hanselmann
  """Main program.
337 b1ffe1eb Michael Hanselmann

338 b1ffe1eb Michael Hanselmann
  """
339 a39ec11a Michael Hanselmann
  parser = optparse.OptionParser(usage="%prog [options] <config-file>")
340 b1ffe1eb Michael Hanselmann
  parser.add_option('--yes-do-it', dest='yes_do_it',
341 b1ffe1eb Michael Hanselmann
      action="store_true",
342 b1ffe1eb Michael Hanselmann
      help="Really execute the tests")
343 b1ffe1eb Michael Hanselmann
  (qa_config.options, args) = parser.parse_args()
344 5d640672 Michael Hanselmann
345 a39ec11a Michael Hanselmann
  if len(args) == 1:
346 a39ec11a Michael Hanselmann
    (config_file, ) = args
347 b1ffe1eb Michael Hanselmann
  else:
348 a39ec11a Michael Hanselmann
    parser.error("Wrong number of arguments.")
349 a8083063 Iustin Pop
350 b1ffe1eb Michael Hanselmann
  if not qa_config.options.yes_do_it:
351 b1ffe1eb Michael Hanselmann
    print ("Executing this script irreversibly destroys any Ganeti\n"
352 b1ffe1eb Michael Hanselmann
           "configuration on all nodes involved. If you really want\n"
353 b1ffe1eb Michael Hanselmann
           "to start testing, supply the --yes-do-it option.")
354 b1ffe1eb Michael Hanselmann
    sys.exit(1)
355 e9e35aaa Michael Hanselmann
356 b1ffe1eb Michael Hanselmann
  qa_config.Load(config_file)
357 a8083063 Iustin Pop
358 725ec2f1 René Nussbaumer
  rapi_user = "ganeti-qa"
359 725ec2f1 René Nussbaumer
  rapi_secret = utils.GenerateSecret()
360 725ec2f1 René Nussbaumer
361 b1ffe1eb Michael Hanselmann
  RunEnvTests()
362 725ec2f1 René Nussbaumer
  SetupCluster(rapi_user, rapi_secret)
363 2771835c Michael Hanselmann
364 2771835c Michael Hanselmann
  # Load RAPI certificate
365 76917d97 Iustin Pop
  qa_rapi.Setup(rapi_user, rapi_secret)
366 2771835c Michael Hanselmann
367 b1ffe1eb Michael Hanselmann
  RunClusterTests()
368 b1ffe1eb Michael Hanselmann
  RunOsTests()
369 4b62db14 Michael Hanselmann
370 d74c2ca1 Michael Hanselmann
  if qa_config.TestEnabled('tags'):
371 d74c2ca1 Michael Hanselmann
    RunTest(qa_tags.TestClusterTags)
372 d74c2ca1 Michael Hanselmann
373 729c4377 Iustin Pop
  RunCommonNodeTests()
374 729c4377 Iustin Pop
375 d0cb68cb Michael Hanselmann
  pnode = qa_config.AcquireNode(exclude=qa_config.GetMasterNode())
376 d0cb68cb Michael Hanselmann
  try:
377 d0cb68cb Michael Hanselmann
    if qa_config.TestEnabled('node-readd'):
378 102b115b Michael Hanselmann
      RunTest(qa_node.TestNodeReadd, pnode)
379 d0cb68cb Michael Hanselmann
380 d0cb68cb Michael Hanselmann
    if qa_config.TestEnabled("node-modify"):
381 d0cb68cb Michael Hanselmann
      RunTest(qa_node.TestNodeModify, pnode)
382 d0cb68cb Michael Hanselmann
  finally:
383 d0cb68cb Michael Hanselmann
    qa_config.ReleaseNode(pnode)
384 102b115b Michael Hanselmann
385 b1ffe1eb Michael Hanselmann
  pnode = qa_config.AcquireNode()
386 b1ffe1eb Michael Hanselmann
  try:
387 d74c2ca1 Michael Hanselmann
    if qa_config.TestEnabled('tags'):
388 d74c2ca1 Michael Hanselmann
      RunTest(qa_tags.TestNodeTags, pnode)
389 d74c2ca1 Michael Hanselmann
390 a47f574c Oleksiy Mishchenko
    if qa_rapi.Enabled():
391 a47f574c Oleksiy Mishchenko
      RunTest(qa_rapi.TestNode, pnode)
392 a47f574c Oleksiy Mishchenko
393 8cb70e56 Michael Hanselmann
      if qa_config.TestEnabled("instance-add-plain-disk"):
394 924e95f9 Michael Hanselmann
        for use_client in [True, False]:
395 924e95f9 Michael Hanselmann
          rapi_instance = RunTest(qa_rapi.TestRapiInstanceAdd, pnode,
396 924e95f9 Michael Hanselmann
                                  use_client)
397 924e95f9 Michael Hanselmann
          RunCommonInstanceTests(rapi_instance)
398 924e95f9 Michael Hanselmann
          RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance, use_client)
399 924e95f9 Michael Hanselmann
          del rapi_instance
400 8cb70e56 Michael Hanselmann
401 b1ffe1eb Michael Hanselmann
    if qa_config.TestEnabled('instance-add-plain-disk'):
402 b1ffe1eb Michael Hanselmann
      instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
403 b1ffe1eb Michael Hanselmann
      RunCommonInstanceTests(instance)
404 638a7266 Iustin Pop
      RunExportImportTests(instance, pnode, None)
405 b1ffe1eb Michael Hanselmann
      RunDaemonTests(instance, pnode)
406 b1ffe1eb Michael Hanselmann
      RunTest(qa_instance.TestInstanceRemove, instance)
407 b1ffe1eb Michael Hanselmann
      del instance
408 9df6d173 Michael Hanselmann
409 7d7609a3 Michael Hanselmann
    multinode_tests = [
410 7d7609a3 Michael Hanselmann
      ('instance-add-drbd-disk',
411 7d7609a3 Michael Hanselmann
       qa_instance.TestInstanceAddWithDrbdDisk),
412 7d7609a3 Michael Hanselmann
    ]
413 7d7609a3 Michael Hanselmann
414 7d7609a3 Michael Hanselmann
    for name, func in multinode_tests:
415 7d7609a3 Michael Hanselmann
      if qa_config.TestEnabled(name):
416 7d7609a3 Michael Hanselmann
        snode = qa_config.AcquireNode(exclude=pnode)
417 7d7609a3 Michael Hanselmann
        try:
418 7d7609a3 Michael Hanselmann
          instance = RunTest(func, pnode, snode)
419 7b4eed05 Michael Hanselmann
          if qa_config.TestEnabled("cluster-verify"):
420 7b4eed05 Michael Hanselmann
            RunTest(qa_cluster.TestClusterVerify)
421 7d7609a3 Michael Hanselmann
          RunCommonInstanceTests(instance)
422 7f69aabb Iustin Pop
          if qa_config.TestEnabled('instance-convert-disk'):
423 f9f0ce7f Guido Trotter
            RunTest(qa_instance.TestInstanceShutdown, instance)
424 7f69aabb Iustin Pop
            RunTest(qa_instance.TestInstanceConvertDisk, instance, snode)
425 f9f0ce7f Guido Trotter
            RunTest(qa_instance.TestInstanceStartup, instance)
426 638a7266 Iustin Pop
          RunExportImportTests(instance, pnode, snode)
427 7d7609a3 Michael Hanselmann
          RunHardwareFailureTests(instance, pnode, snode)
428 7d7609a3 Michael Hanselmann
          RunTest(qa_instance.TestInstanceRemove, instance)
429 7d7609a3 Michael Hanselmann
          del instance
430 7d7609a3 Michael Hanselmann
        finally:
431 7d7609a3 Michael Hanselmann
          qa_config.ReleaseNode(snode)
432 a8083063 Iustin Pop
433 8d8d650c Michael Hanselmann
    if (qa_config.TestEnabled('instance-add-plain-disk') and
434 8d8d650c Michael Hanselmann
        qa_config.TestEnabled("instance-export")):
435 3b01286e Michael Hanselmann
      for shutdown in [False, True]:
436 3b01286e Michael Hanselmann
        instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
437 3b01286e Michael Hanselmann
        expnode = qa_config.AcquireNode(exclude=pnode)
438 3b01286e Michael Hanselmann
        try:
439 3b01286e Michael Hanselmann
          if shutdown:
440 3b01286e Michael Hanselmann
            # Stop instance before exporting and removing it
441 3b01286e Michael Hanselmann
            RunTest(qa_instance.TestInstanceShutdown, instance)
442 3b01286e Michael Hanselmann
          RunTest(qa_instance.TestInstanceExportWithRemove, instance, expnode)
443 3b01286e Michael Hanselmann
          RunTest(qa_instance.TestBackupList, expnode)
444 3b01286e Michael Hanselmann
        finally:
445 3b01286e Michael Hanselmann
          qa_config.ReleaseNode(expnode)
446 3b01286e Michael Hanselmann
        del expnode
447 3b01286e Michael Hanselmann
        del instance
448 8d8d650c Michael Hanselmann
449 a8083063 Iustin Pop
  finally:
450 b1ffe1eb Michael Hanselmann
    qa_config.ReleaseNode(pnode)
451 a8083063 Iustin Pop
452 a5b9d725 Iustin Pop
  if qa_config.TestEnabled('create-cluster'):
453 a5b9d725 Iustin Pop
    RunTest(qa_node.TestNodeRemoveAll)
454 a8083063 Iustin Pop
455 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-destroy'):
456 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterDestroy)
457 a8083063 Iustin Pop
458 cec9845c Michael Hanselmann
459 cec9845c Michael Hanselmann
if __name__ == '__main__':
460 cec9845c Michael Hanselmann
  main()