Statistics
| Branch: | Tag: | Revision:

root / qa / ganeti-qa.py @ e1df06f2

History | View | Annotate | Download (11.8 kB)

1 a8083063 Iustin Pop
#!/usr/bin/python
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 cec9845c Michael Hanselmann
def RunTest(fn, *args):
48 a8083063 Iustin Pop
  """Runs a test after printing a header.
49 a8083063 Iustin Pop

50 a8083063 Iustin Pop
  """
51 cec9845c Michael Hanselmann
  if fn.__doc__:
52 cec9845c Michael Hanselmann
    desc = fn.__doc__.splitlines()[0].strip()
53 a8083063 Iustin Pop
  else:
54 cec9845c Michael Hanselmann
    desc = '%r' % fn
55 a8083063 Iustin Pop
56 c68d1f43 Michael Hanselmann
  now = str(datetime.datetime.now())
57 a8083063 Iustin Pop
58 a8083063 Iustin Pop
  print
59 a8083063 Iustin Pop
  print '---', now, ('-' * (55 - len(now)))
60 a8083063 Iustin Pop
  print desc
61 a8083063 Iustin Pop
  print '-' * 60
62 a8083063 Iustin Pop
63 cec9845c Michael Hanselmann
  return fn(*args)
64 a8083063 Iustin Pop
65 a8083063 Iustin Pop
66 b1ffe1eb Michael Hanselmann
def RunEnvTests():
67 b1ffe1eb Michael Hanselmann
  """Run several environment tests.
68 a8083063 Iustin Pop

69 a8083063 Iustin Pop
  """
70 b1ffe1eb Michael Hanselmann
  if not qa_config.TestEnabled('env'):
71 b1ffe1eb Michael Hanselmann
    return
72 a8083063 Iustin Pop
73 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestSshConnection)
74 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestIcmpPing)
75 b1ffe1eb Michael Hanselmann
  RunTest(qa_env.TestGanetiCommands)
76 a8083063 Iustin Pop
77 94508060 Michael Hanselmann
78 725ec2f1 René Nussbaumer
def SetupCluster(rapi_user, rapi_secret):
79 b1ffe1eb Michael Hanselmann
  """Initializes the cluster.
80 a8083063 Iustin Pop

81 725ec2f1 René Nussbaumer
  @param rapi_user: Login user for RAPI
82 725ec2f1 René Nussbaumer
  @param rapi_secret: Login secret for RAPI
83 725ec2f1 René Nussbaumer

84 b1ffe1eb Michael Hanselmann
  """
85 a5b9d725 Iustin Pop
  if qa_config.TestEnabled('create-cluster'):
86 725ec2f1 René Nussbaumer
    RunTest(qa_cluster.TestClusterInit, rapi_user, rapi_secret)
87 a5b9d725 Iustin Pop
    RunTest(qa_node.TestNodeAddAll)
88 1377433b Michael Hanselmann
    RunTest(qa_cluster.TestJobqueue)
89 8e671b7c Iustin Pop
  else:
90 8e671b7c Iustin Pop
    # consider the nodes are already there
91 8e671b7c Iustin Pop
    qa_node.MarkNodeAddedAll()
92 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-info'):
93 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeInfo)
94 b1ffe1eb Michael Hanselmann
95 b1ffe1eb Michael Hanselmann
96 b1ffe1eb Michael Hanselmann
def RunClusterTests():
97 b1ffe1eb Michael Hanselmann
  """Runs tests related to gnt-cluster.
98 180bdd1f Michael Hanselmann

99 b1ffe1eb Michael Hanselmann
  """
100 6d4a1656 Michael Hanselmann
  if qa_config.TestEnabled("cluster-renew-crypto"):
101 6d4a1656 Michael Hanselmann
    RunTest(qa_cluster.TestClusterRenewCrypto)
102 6d4a1656 Michael Hanselmann
103 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-verify'):
104 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterVerify)
105 e9e35aaa Michael Hanselmann
106 452913ed Iustin Pop
  if qa_config.TestEnabled('cluster-reserved-lvs'):
107 452913ed Iustin Pop
    RunTest(qa_cluster.TestClusterReservedLvs)
108 452913ed Iustin Pop
109 caea3b32 Iustin Pop
  if qa_config.TestEnabled('cluster-rename'):
110 caea3b32 Iustin Pop
    RunTest(qa_cluster.TestClusterRename)
111 caea3b32 Iustin Pop
112 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-info'):
113 62843684 Michael Hanselmann
    RunTest(qa_cluster.TestClusterVersion)
114 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterInfo)
115 283f9d4c Michael Hanselmann
    RunTest(qa_cluster.TestClusterGetmaster)
116 283f9d4c Michael Hanselmann
117 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-copyfile'):
118 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterCopyfile)
119 a8083063 Iustin Pop
120 830da270 Michael Hanselmann
  if qa_config.TestEnabled('cluster-command'):
121 830da270 Michael Hanselmann
    RunTest(qa_cluster.TestClusterCommand)
122 830da270 Michael Hanselmann
123 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-burnin'):
124 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterBurnin)
125 a8083063 Iustin Pop
126 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-master-failover'):
127 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterMasterFailover)
128 a8083063 Iustin Pop
129 a47f574c Oleksiy Mishchenko
  if qa_rapi.Enabled():
130 a47f574c Oleksiy Mishchenko
    RunTest(qa_rapi.TestVersion)
131 a47f574c Oleksiy Mishchenko
    RunTest(qa_rapi.TestEmptyCluster)
132 8947cf2b Michael Hanselmann
133 6d4a1656 Michael Hanselmann
134 b1ffe1eb Michael Hanselmann
def RunOsTests():
135 b1ffe1eb Michael Hanselmann
  """Runs all tests related to gnt-os.
136 5d640672 Michael Hanselmann

137 b1ffe1eb Michael Hanselmann
  """
138 b1ffe1eb Michael Hanselmann
  if not qa_config.TestEnabled('os'):
139 b1ffe1eb Michael Hanselmann
    return
140 b1ffe1eb Michael Hanselmann
141 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsList)
142 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsDiagnose)
143 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsValid)
144 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsInvalid)
145 b1ffe1eb Michael Hanselmann
  RunTest(qa_os.TestOsPartiallyValid)
146 fca11dec René Nussbaumer
  RunTest(qa_os.TestOsModifyValid)
147 fca11dec René Nussbaumer
  RunTest(qa_os.TestOsModifyInvalid)
148 e1df06f2 Iustin Pop
  RunTest(qa_os.TestOsStates)
149 b1ffe1eb Michael Hanselmann
150 b1ffe1eb Michael Hanselmann
151 b1ffe1eb Michael Hanselmann
def RunCommonInstanceTests(instance):
152 b1ffe1eb Michael Hanselmann
  """Runs a few tests that are common to all disk types.
153 b1ffe1eb Michael Hanselmann

154 b1ffe1eb Michael Hanselmann
  """
155 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-shutdown'):
156 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceShutdown, instance)
157 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceStartup, instance)
158 a8083063 Iustin Pop
159 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-list'):
160 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceList)
161 283f9d4c Michael Hanselmann
162 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-info'):
163 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceInfo, instance)
164 e9e35aaa Michael Hanselmann
165 c0f74c55 Iustin Pop
  if qa_config.TestEnabled('instance-modify'):
166 c0f74c55 Iustin Pop
    RunTest(qa_instance.TestInstanceModify, instance)
167 3b7158ef Michael Hanselmann
    if qa_rapi.Enabled():
168 3b7158ef Michael Hanselmann
      RunTest(qa_rapi.TestRapiInstanceModify, instance)
169 c0f74c55 Iustin Pop
170 4379b1fa Michael Hanselmann
  if qa_config.TestEnabled('instance-console'):
171 4379b1fa Michael Hanselmann
    RunTest(qa_instance.TestInstanceConsole, instance)
172 4379b1fa Michael Hanselmann
173 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-reinstall'):
174 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceShutdown, instance)
175 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceReinstall, instance)
176 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceStartup, instance)
177 a8083063 Iustin Pop
178 8a4e8898 Michael Hanselmann
  if qa_config.TestEnabled('instance-reboot'):
179 8a4e8898 Michael Hanselmann
    RunTest(qa_instance.TestInstanceReboot, instance)
180 8a4e8898 Michael Hanselmann
181 18337ca9 Iustin Pop
  if qa_config.TestEnabled('instance-rename'):
182 7fb50870 Michael Hanselmann
    rename_target = qa_config.get("rename", None)
183 7fb50870 Michael Hanselmann
    if rename_target is None:
184 7fb50870 Michael Hanselmann
      print qa_utils.FormatError("Can rename instance, 'rename' entry is"
185 7fb50870 Michael Hanselmann
                                 " missing from configuration")
186 7fb50870 Michael Hanselmann
    else:
187 7fb50870 Michael Hanselmann
      RunTest(qa_instance.TestInstanceShutdown, instance)
188 7fb50870 Michael Hanselmann
      RunTest(qa_instance.TestInstanceRename, instance, rename_target)
189 7fb50870 Michael Hanselmann
      if qa_rapi.Enabled():
190 7fb50870 Michael Hanselmann
        RunTest(qa_rapi.TestRapiInstanceRename, instance, rename_target)
191 7fb50870 Michael Hanselmann
      RunTest(qa_instance.TestInstanceStartup, instance)
192 18337ca9 Iustin Pop
193 d74c2ca1 Michael Hanselmann
  if qa_config.TestEnabled('tags'):
194 d74c2ca1 Michael Hanselmann
    RunTest(qa_tags.TestInstanceTags, instance)
195 d74c2ca1 Michael Hanselmann
196 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-volumes'):
197 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeVolumes)
198 23269c5b Michael Hanselmann
199 8e1db003 Michael Hanselmann
  if qa_config.TestEnabled("node-storage"):
200 8e1db003 Michael Hanselmann
    RunTest(qa_node.TestNodeStorage)
201 8e1db003 Michael Hanselmann
202 a47f574c Oleksiy Mishchenko
  if qa_rapi.Enabled():
203 a47f574c Oleksiy Mishchenko
    RunTest(qa_rapi.TestInstance, instance)
204 23269c5b Michael Hanselmann
205 8d8d650c Michael Hanselmann
206 b1ffe1eb Michael Hanselmann
def RunExportImportTests(instance, pnode):
207 b1ffe1eb Michael Hanselmann
  """Tries to export and import the instance.
208 a8083063 Iustin Pop

209 b1ffe1eb Michael Hanselmann
  """
210 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-export'):
211 bc696589 Michael Hanselmann
    RunTest(qa_instance.TestInstanceExportNoTarget, instance)
212 bc696589 Michael Hanselmann
213 b1ffe1eb Michael Hanselmann
    expnode = qa_config.AcquireNode(exclude=pnode)
214 b1ffe1eb Michael Hanselmann
    try:
215 b1ffe1eb Michael Hanselmann
      name = RunTest(qa_instance.TestInstanceExport, instance, expnode)
216 b1ffe1eb Michael Hanselmann
217 b1ffe1eb Michael Hanselmann
      RunTest(qa_instance.TestBackupList, expnode)
218 b1ffe1eb Michael Hanselmann
219 b1ffe1eb Michael Hanselmann
      if qa_config.TestEnabled('instance-import'):
220 b1ffe1eb Michael Hanselmann
        newinst = qa_config.AcquireInstance()
221 5d640672 Michael Hanselmann
        try:
222 b1ffe1eb Michael Hanselmann
          RunTest(qa_instance.TestInstanceImport, pnode, newinst,
223 b1ffe1eb Michael Hanselmann
                  expnode, name)
224 b1ffe1eb Michael Hanselmann
          RunTest(qa_instance.TestInstanceRemove, newinst)
225 5d640672 Michael Hanselmann
        finally:
226 b1ffe1eb Michael Hanselmann
          qa_config.ReleaseInstance(newinst)
227 b1ffe1eb Michael Hanselmann
    finally:
228 b1ffe1eb Michael Hanselmann
      qa_config.ReleaseNode(expnode)
229 5d640672 Michael Hanselmann
230 5d831182 Michael Hanselmann
  if (qa_rapi.Enabled() and
231 5d831182 Michael Hanselmann
      qa_config.TestEnabled("inter-cluster-instance-move")):
232 5d831182 Michael Hanselmann
    newinst = qa_config.AcquireInstance()
233 5d831182 Michael Hanselmann
    try:
234 5d831182 Michael Hanselmann
      pnode2 = qa_config.AcquireNode(exclude=pnode)
235 5d831182 Michael Hanselmann
      try:
236 5d831182 Michael Hanselmann
        RunTest(qa_rapi.TestInterClusterInstanceMove, instance, newinst,
237 5d831182 Michael Hanselmann
                pnode2, pnode)
238 5d831182 Michael Hanselmann
      finally:
239 5d831182 Michael Hanselmann
        qa_config.ReleaseNode(pnode2)
240 5d831182 Michael Hanselmann
    finally:
241 5d831182 Michael Hanselmann
      qa_config.ReleaseInstance(newinst)
242 5d831182 Michael Hanselmann
243 283f9d4c Michael Hanselmann
244 b1ffe1eb Michael Hanselmann
def RunDaemonTests(instance, pnode):
245 b1ffe1eb Michael Hanselmann
  """Test the ganeti-watcher script.
246 9df6d173 Michael Hanselmann

247 b1ffe1eb Michael Hanselmann
  """
248 b1ffe1eb Michael Hanselmann
  automatic_restart = \
249 b1ffe1eb Michael Hanselmann
    qa_config.TestEnabled('instance-automatic-restart')
250 b1ffe1eb Michael Hanselmann
  consecutive_failures = \
251 b1ffe1eb Michael Hanselmann
    qa_config.TestEnabled('instance-consecutive-failures')
252 a8083063 Iustin Pop
253 b1ffe1eb Michael Hanselmann
  if automatic_restart or consecutive_failures:
254 b1ffe1eb Michael Hanselmann
    qa_daemon.PrintCronWarning()
255 5d640672 Michael Hanselmann
256 b1ffe1eb Michael Hanselmann
    if automatic_restart:
257 b1ffe1eb Michael Hanselmann
      RunTest(qa_daemon.TestInstanceAutomaticRestart, pnode, instance)
258 e9e35aaa Michael Hanselmann
259 b1ffe1eb Michael Hanselmann
    if consecutive_failures:
260 6623a5c1 Michael Hanselmann
      RunTest(qa_daemon.TestInstanceConsecutiveFailures, pnode, instance)
261 e9e35aaa Michael Hanselmann
262 9df6d173 Michael Hanselmann
263 b1ffe1eb Michael Hanselmann
def RunHardwareFailureTests(instance, pnode, snode):
264 b1ffe1eb Michael Hanselmann
  """Test cluster internal hardware failure recovery.
265 a8083063 Iustin Pop

266 b1ffe1eb Michael Hanselmann
  """
267 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-failover'):
268 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceFailover, instance)
269 b1ffe1eb Michael Hanselmann
270 938bde86 Michael Hanselmann
  if qa_config.TestEnabled("instance-migrate"):
271 938bde86 Michael Hanselmann
    RunTest(qa_instance.TestInstanceMigrate, instance)
272 938bde86 Michael Hanselmann
273 938bde86 Michael Hanselmann
    if qa_rapi.Enabled():
274 938bde86 Michael Hanselmann
      RunTest(qa_rapi.TestRapiInstanceMigrate, instance)
275 938bde86 Michael Hanselmann
276 7910e7a5 Michael Hanselmann
  if qa_config.TestEnabled('instance-replace-disks'):
277 76f59a32 Michael Hanselmann
    othernode = qa_config.AcquireNode(exclude=[pnode, snode])
278 7910e7a5 Michael Hanselmann
    try:
279 7910e7a5 Michael Hanselmann
      RunTest(qa_instance.TestReplaceDisks,
280 7910e7a5 Michael Hanselmann
              instance, pnode, snode, othernode)
281 7910e7a5 Michael Hanselmann
    finally:
282 7910e7a5 Michael Hanselmann
      qa_config.ReleaseNode(othernode)
283 7910e7a5 Michael Hanselmann
284 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-evacuate'):
285 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeEvacuate, pnode, snode)
286 b1ffe1eb Michael Hanselmann
287 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-failover'):
288 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeFailover, pnode, snode)
289 b1ffe1eb Michael Hanselmann
290 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('instance-disk-failure'):
291 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceMasterDiskFailure,
292 b1ffe1eb Michael Hanselmann
            instance, pnode, snode)
293 b1ffe1eb Michael Hanselmann
    RunTest(qa_instance.TestInstanceSecondaryDiskFailure,
294 b1ffe1eb Michael Hanselmann
            instance, pnode, snode)
295 b1ffe1eb Michael Hanselmann
296 b1ffe1eb Michael Hanselmann
297 2a7c3583 Michael Hanselmann
@rapi.client.UsesRapiClient
298 b1ffe1eb Michael Hanselmann
def main():
299 b1ffe1eb Michael Hanselmann
  """Main program.
300 b1ffe1eb Michael Hanselmann

301 b1ffe1eb Michael Hanselmann
  """
302 a39ec11a Michael Hanselmann
  parser = optparse.OptionParser(usage="%prog [options] <config-file>")
303 b1ffe1eb Michael Hanselmann
  parser.add_option('--yes-do-it', dest='yes_do_it',
304 b1ffe1eb Michael Hanselmann
      action="store_true",
305 b1ffe1eb Michael Hanselmann
      help="Really execute the tests")
306 b1ffe1eb Michael Hanselmann
  (qa_config.options, args) = parser.parse_args()
307 5d640672 Michael Hanselmann
308 a39ec11a Michael Hanselmann
  if len(args) == 1:
309 a39ec11a Michael Hanselmann
    (config_file, ) = args
310 b1ffe1eb Michael Hanselmann
  else:
311 a39ec11a Michael Hanselmann
    parser.error("Wrong number of arguments.")
312 a8083063 Iustin Pop
313 b1ffe1eb Michael Hanselmann
  if not qa_config.options.yes_do_it:
314 b1ffe1eb Michael Hanselmann
    print ("Executing this script irreversibly destroys any Ganeti\n"
315 b1ffe1eb Michael Hanselmann
           "configuration on all nodes involved. If you really want\n"
316 b1ffe1eb Michael Hanselmann
           "to start testing, supply the --yes-do-it option.")
317 b1ffe1eb Michael Hanselmann
    sys.exit(1)
318 e9e35aaa Michael Hanselmann
319 b1ffe1eb Michael Hanselmann
  qa_config.Load(config_file)
320 a8083063 Iustin Pop
321 725ec2f1 René Nussbaumer
  rapi_user = "ganeti-qa"
322 725ec2f1 René Nussbaumer
  rapi_secret = utils.GenerateSecret()
323 725ec2f1 René Nussbaumer
324 b1ffe1eb Michael Hanselmann
  RunEnvTests()
325 725ec2f1 René Nussbaumer
  SetupCluster(rapi_user, rapi_secret)
326 2771835c Michael Hanselmann
327 2771835c Michael Hanselmann
  # Load RAPI certificate
328 2771835c Michael Hanselmann
  qa_rapi.Setup(rapi_user, rapi_secret)
329 2771835c Michael Hanselmann
330 b1ffe1eb Michael Hanselmann
  RunClusterTests()
331 b1ffe1eb Michael Hanselmann
  RunOsTests()
332 4b62db14 Michael Hanselmann
333 d74c2ca1 Michael Hanselmann
  if qa_config.TestEnabled('tags'):
334 d74c2ca1 Michael Hanselmann
    RunTest(qa_tags.TestClusterTags)
335 d74c2ca1 Michael Hanselmann
336 102b115b Michael Hanselmann
  if qa_config.TestEnabled('node-readd'):
337 102b115b Michael Hanselmann
    master = qa_config.GetMasterNode()
338 102b115b Michael Hanselmann
    pnode = qa_config.AcquireNode(exclude=master)
339 102b115b Michael Hanselmann
    try:
340 102b115b Michael Hanselmann
      RunTest(qa_node.TestNodeReadd, pnode)
341 102b115b Michael Hanselmann
    finally:
342 102b115b Michael Hanselmann
      qa_config.ReleaseNode(pnode)
343 102b115b Michael Hanselmann
344 b1ffe1eb Michael Hanselmann
  pnode = qa_config.AcquireNode()
345 b1ffe1eb Michael Hanselmann
  try:
346 d74c2ca1 Michael Hanselmann
    if qa_config.TestEnabled('tags'):
347 d74c2ca1 Michael Hanselmann
      RunTest(qa_tags.TestNodeTags, pnode)
348 d74c2ca1 Michael Hanselmann
349 a47f574c Oleksiy Mishchenko
    if qa_rapi.Enabled():
350 a47f574c Oleksiy Mishchenko
      RunTest(qa_rapi.TestNode, pnode)
351 a47f574c Oleksiy Mishchenko
352 8cb70e56 Michael Hanselmann
      if qa_config.TestEnabled("instance-add-plain-disk"):
353 924e95f9 Michael Hanselmann
        for use_client in [True, False]:
354 924e95f9 Michael Hanselmann
          rapi_instance = RunTest(qa_rapi.TestRapiInstanceAdd, pnode,
355 924e95f9 Michael Hanselmann
                                  use_client)
356 924e95f9 Michael Hanselmann
          RunCommonInstanceTests(rapi_instance)
357 924e95f9 Michael Hanselmann
          RunTest(qa_rapi.TestRapiInstanceRemove, rapi_instance, use_client)
358 924e95f9 Michael Hanselmann
          del rapi_instance
359 8cb70e56 Michael Hanselmann
360 b1ffe1eb Michael Hanselmann
    if qa_config.TestEnabled('instance-add-plain-disk'):
361 b1ffe1eb Michael Hanselmann
      instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
362 b1ffe1eb Michael Hanselmann
      RunCommonInstanceTests(instance)
363 b1ffe1eb Michael Hanselmann
      RunExportImportTests(instance, pnode)
364 b1ffe1eb Michael Hanselmann
      RunDaemonTests(instance, pnode)
365 b1ffe1eb Michael Hanselmann
      RunTest(qa_instance.TestInstanceRemove, instance)
366 b1ffe1eb Michael Hanselmann
      del instance
367 9df6d173 Michael Hanselmann
368 7d7609a3 Michael Hanselmann
    multinode_tests = [
369 7d7609a3 Michael Hanselmann
      ('instance-add-drbd-disk',
370 7d7609a3 Michael Hanselmann
       qa_instance.TestInstanceAddWithDrbdDisk),
371 7d7609a3 Michael Hanselmann
    ]
372 7d7609a3 Michael Hanselmann
373 7d7609a3 Michael Hanselmann
    for name, func in multinode_tests:
374 7d7609a3 Michael Hanselmann
      if qa_config.TestEnabled(name):
375 7d7609a3 Michael Hanselmann
        snode = qa_config.AcquireNode(exclude=pnode)
376 7d7609a3 Michael Hanselmann
        try:
377 7d7609a3 Michael Hanselmann
          instance = RunTest(func, pnode, snode)
378 7d7609a3 Michael Hanselmann
          RunCommonInstanceTests(instance)
379 7f69aabb Iustin Pop
          if qa_config.TestEnabled('instance-convert-disk'):
380 f9f0ce7f Guido Trotter
            RunTest(qa_instance.TestInstanceShutdown, instance)
381 7f69aabb Iustin Pop
            RunTest(qa_instance.TestInstanceConvertDisk, instance, snode)
382 f9f0ce7f Guido Trotter
            RunTest(qa_instance.TestInstanceStartup, instance)
383 7d7609a3 Michael Hanselmann
          RunExportImportTests(instance, pnode)
384 7d7609a3 Michael Hanselmann
          RunHardwareFailureTests(instance, pnode, snode)
385 7d7609a3 Michael Hanselmann
          RunTest(qa_instance.TestInstanceRemove, instance)
386 7d7609a3 Michael Hanselmann
          del instance
387 7d7609a3 Michael Hanselmann
        finally:
388 7d7609a3 Michael Hanselmann
          qa_config.ReleaseNode(snode)
389 a8083063 Iustin Pop
390 8d8d650c Michael Hanselmann
    if (qa_config.TestEnabled('instance-add-plain-disk') and
391 8d8d650c Michael Hanselmann
        qa_config.TestEnabled("instance-export")):
392 8d8d650c Michael Hanselmann
      instance = RunTest(qa_instance.TestInstanceAddWithPlainDisk, pnode)
393 8d8d650c Michael Hanselmann
      expnode = qa_config.AcquireNode(exclude=pnode)
394 8d8d650c Michael Hanselmann
      try:
395 8d8d650c Michael Hanselmann
        RunTest(qa_instance.TestInstanceExportWithRemove, instance, expnode)
396 8d8d650c Michael Hanselmann
        RunTest(qa_instance.TestBackupList, expnode)
397 8d8d650c Michael Hanselmann
      finally:
398 8d8d650c Michael Hanselmann
        qa_config.ReleaseNode(expnode)
399 8d8d650c Michael Hanselmann
      del expnode
400 8d8d650c Michael Hanselmann
      del instance
401 8d8d650c Michael Hanselmann
402 a8083063 Iustin Pop
  finally:
403 b1ffe1eb Michael Hanselmann
    qa_config.ReleaseNode(pnode)
404 a8083063 Iustin Pop
405 a5b9d725 Iustin Pop
  if qa_config.TestEnabled('create-cluster'):
406 a5b9d725 Iustin Pop
    RunTest(qa_node.TestNodeRemoveAll)
407 a8083063 Iustin Pop
408 cec9845c Michael Hanselmann
  if qa_config.TestEnabled('cluster-destroy'):
409 cec9845c Michael Hanselmann
    RunTest(qa_cluster.TestClusterDestroy)
410 a8083063 Iustin Pop
411 cec9845c Michael Hanselmann
412 cec9845c Michael Hanselmann
if __name__ == '__main__':
413 cec9845c Michael Hanselmann
  main()