Statistics
| Branch: | Tag: | Revision:

root / qa / ganeti-qa.py @ bc696589

History | View | Annotate | Download (11.6 kB)

1 a8083063 Iustin Pop
#!/usr/bin/python
2 a8083063 Iustin Pop
#
3 a8083063 Iustin Pop
4 cec9845c Michael Hanselmann
# Copyright (C) 2007 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 8e671b7c Iustin Pop
  else:
89 8e671b7c Iustin Pop
    # consider the nodes are already there
90 8e671b7c Iustin Pop
    qa_node.MarkNodeAddedAll()
91 b1ffe1eb Michael Hanselmann
  if qa_config.TestEnabled('node-info'):
92 b1ffe1eb Michael Hanselmann
    RunTest(qa_node.TestNodeInfo)
93 b1ffe1eb Michael Hanselmann
94 b1ffe1eb Michael Hanselmann
95 b1ffe1eb Michael Hanselmann
def RunClusterTests():
96 b1ffe1eb Michael Hanselmann
  """Runs tests related to gnt-cluster.
97 180bdd1f Michael Hanselmann

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

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

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

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

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

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

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