Statistics
| Branch: | Tag: | Revision:

root / qa / ganeti-qa.py @ c326b4ef

History | View | Annotate | Download (11.8 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 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 b1ffe1eb Michael Hanselmann
149 b1ffe1eb Michael Hanselmann
150 b1ffe1eb Michael Hanselmann
def RunCommonInstanceTests(instance):
151 b1ffe1eb Michael Hanselmann
  """Runs a few tests that are common to all disk types.
152 b1ffe1eb Michael Hanselmann

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

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

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

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

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