Statistics
| Branch: | Tag: | Revision:

root / qa / qa_instance.py @ 25c5878d

History | View | Annotate | Download (10.5 kB)

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

21 cec9845c Michael Hanselmann
"""
22 cec9845c Michael Hanselmann
23 e8ae0c20 Michael Hanselmann
import re
24 e8ae0c20 Michael Hanselmann
import time
25 e8ae0c20 Michael Hanselmann
26 cec9845c Michael Hanselmann
from ganeti import utils
27 5d640672 Michael Hanselmann
from ganeti import constants
28 cec9845c Michael Hanselmann
29 cec9845c Michael Hanselmann
import qa_config
30 5d640672 Michael Hanselmann
import qa_utils
31 e8ae0c20 Michael Hanselmann
import qa_error
32 e8ae0c20 Michael Hanselmann
33 e8ae0c20 Michael Hanselmann
from qa_utils import AssertEqual, AssertNotEqual, StartSSH
34 cec9845c Michael Hanselmann
35 e8ae0c20 Michael Hanselmann
36 e8ae0c20 Michael Hanselmann
def _GetDiskStatePath(disk):
37 e8ae0c20 Michael Hanselmann
  return "/sys/block/%s/device/state" % disk
38 cec9845c Michael Hanselmann
39 cec9845c Michael Hanselmann
40 5d640672 Michael Hanselmann
def _GetGenericAddParameters():
41 5d640672 Michael Hanselmann
  return ['--os-size=%s' % qa_config.get('os-size'),
42 5d640672 Michael Hanselmann
          '--swap-size=%s' % qa_config.get('swap-size'),
43 5d640672 Michael Hanselmann
          '--memory=%s' % qa_config.get('mem')]
44 5d640672 Michael Hanselmann
45 5d640672 Michael Hanselmann
46 113b8d89 Michael Hanselmann
def _DiskTest(node, disk_template):
47 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
48 cec9845c Michael Hanselmann
49 cec9845c Michael Hanselmann
  instance = qa_config.AcquireInstance()
50 cec9845c Michael Hanselmann
  try:
51 5d640672 Michael Hanselmann
    cmd = (['gnt-instance', 'add',
52 5d640672 Michael Hanselmann
            '--os-type=%s' % qa_config.get('os'),
53 113b8d89 Michael Hanselmann
            '--disk-template=%s' % disk_template,
54 113b8d89 Michael Hanselmann
            '--node=%s' % node] +
55 5d640672 Michael Hanselmann
           _GetGenericAddParameters())
56 cec9845c Michael Hanselmann
    cmd.append(instance['name'])
57 cec9845c Michael Hanselmann
58 cec9845c Michael Hanselmann
    AssertEqual(StartSSH(master['primary'],
59 cec9845c Michael Hanselmann
                         utils.ShellQuoteArgs(cmd)).wait(), 0)
60 cec9845c Michael Hanselmann
    return instance
61 cec9845c Michael Hanselmann
  except:
62 cec9845c Michael Hanselmann
    qa_config.ReleaseInstance(instance)
63 cec9845c Michael Hanselmann
    raise
64 cec9845c Michael Hanselmann
65 cec9845c Michael Hanselmann
66 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-add-plain-disk')
67 cec9845c Michael Hanselmann
def TestInstanceAddWithPlainDisk(node):
68 cec9845c Michael Hanselmann
  """gnt-instance add -t plain"""
69 113b8d89 Michael Hanselmann
  return _DiskTest(node['primary'], 'plain')
70 cec9845c Michael Hanselmann
71 cec9845c Michael Hanselmann
72 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-add-local-mirror-disk')
73 cec9845c Michael Hanselmann
def TestInstanceAddWithLocalMirrorDisk(node):
74 cec9845c Michael Hanselmann
  """gnt-instance add -t local_raid1"""
75 113b8d89 Michael Hanselmann
  return _DiskTest(node['primary'], 'local_raid1')
76 cec9845c Michael Hanselmann
77 cec9845c Michael Hanselmann
78 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-add-remote-raid-disk')
79 cec9845c Michael Hanselmann
def TestInstanceAddWithRemoteRaidDisk(node, node2):
80 cec9845c Michael Hanselmann
  """gnt-instance add -t remote_raid1"""
81 113b8d89 Michael Hanselmann
  return _DiskTest("%s:%s" % (node['primary'], node2['primary']),
82 113b8d89 Michael Hanselmann
                   'remote_raid1')
83 cec9845c Michael Hanselmann
84 cec9845c Michael Hanselmann
85 7d7609a3 Michael Hanselmann
@qa_utils.DefineHook('instance-add-drbd-disk')
86 7d7609a3 Michael Hanselmann
def TestInstanceAddWithDrbdDisk(node, node2):
87 7d7609a3 Michael Hanselmann
  """gnt-instance add -t drbd"""
88 7d7609a3 Michael Hanselmann
  return _DiskTest("%s:%s" % (node['primary'], node2['primary']),
89 7d7609a3 Michael Hanselmann
                   'drbd')
90 7d7609a3 Michael Hanselmann
91 7d7609a3 Michael Hanselmann
92 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-remove')
93 cec9845c Michael Hanselmann
def TestInstanceRemove(instance):
94 cec9845c Michael Hanselmann
  """gnt-instance remove"""
95 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
96 cec9845c Michael Hanselmann
97 cec9845c Michael Hanselmann
  cmd = ['gnt-instance', 'remove', '-f', instance['name']]
98 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
99 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
100 cec9845c Michael Hanselmann
101 cec9845c Michael Hanselmann
  qa_config.ReleaseInstance(instance)
102 cec9845c Michael Hanselmann
103 cec9845c Michael Hanselmann
104 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-startup')
105 cec9845c Michael Hanselmann
def TestInstanceStartup(instance):
106 cec9845c Michael Hanselmann
  """gnt-instance startup"""
107 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
108 cec9845c Michael Hanselmann
109 cec9845c Michael Hanselmann
  cmd = ['gnt-instance', 'startup', instance['name']]
110 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
111 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
112 cec9845c Michael Hanselmann
113 cec9845c Michael Hanselmann
114 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-shutdown')
115 cec9845c Michael Hanselmann
def TestInstanceShutdown(instance):
116 cec9845c Michael Hanselmann
  """gnt-instance shutdown"""
117 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
118 cec9845c Michael Hanselmann
119 cec9845c Michael Hanselmann
  cmd = ['gnt-instance', 'shutdown', instance['name']]
120 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
121 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
122 cec9845c Michael Hanselmann
123 cec9845c Michael Hanselmann
124 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-reinstall')
125 283f9d4c Michael Hanselmann
def TestInstanceReinstall(instance):
126 283f9d4c Michael Hanselmann
  """gnt-instance reinstall"""
127 283f9d4c Michael Hanselmann
  master = qa_config.GetMasterNode()
128 283f9d4c Michael Hanselmann
129 283f9d4c Michael Hanselmann
  cmd = ['gnt-instance', 'reinstall', '-f', instance['name']]
130 283f9d4c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
131 283f9d4c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
132 283f9d4c Michael Hanselmann
133 283f9d4c Michael Hanselmann
134 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-failover')
135 cec9845c Michael Hanselmann
def TestInstanceFailover(instance):
136 cec9845c Michael Hanselmann
  """gnt-instance failover"""
137 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
138 cec9845c Michael Hanselmann
139 cec9845c Michael Hanselmann
  cmd = ['gnt-instance', 'failover', '--force', instance['name']]
140 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
141 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
142 cec9845c Michael Hanselmann
143 cec9845c Michael Hanselmann
144 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-info')
145 cec9845c Michael Hanselmann
def TestInstanceInfo(instance):
146 cec9845c Michael Hanselmann
  """gnt-instance info"""
147 cec9845c Michael Hanselmann
  master = qa_config.GetMasterNode()
148 cec9845c Michael Hanselmann
149 cec9845c Michael Hanselmann
  cmd = ['gnt-instance', 'info', instance['name']]
150 cec9845c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
151 cec9845c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
152 5d640672 Michael Hanselmann
153 5d640672 Michael Hanselmann
154 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('instance-list')
155 283f9d4c Michael Hanselmann
def TestInstanceList():
156 283f9d4c Michael Hanselmann
  """gnt-instance list"""
157 283f9d4c Michael Hanselmann
  master = qa_config.GetMasterNode()
158 283f9d4c Michael Hanselmann
159 283f9d4c Michael Hanselmann
  cmd = ['gnt-instance', 'list']
160 283f9d4c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
161 283f9d4c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
162 283f9d4c Michael Hanselmann
163 283f9d4c Michael Hanselmann
164 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('backup-export')
165 5d640672 Michael Hanselmann
def TestInstanceExport(instance, node):
166 5d640672 Michael Hanselmann
  """gnt-backup export"""
167 5d640672 Michael Hanselmann
  master = qa_config.GetMasterNode()
168 5d640672 Michael Hanselmann
169 5d640672 Michael Hanselmann
  cmd = ['gnt-backup', 'export', '-n', node['primary'], instance['name']]
170 5d640672 Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
171 5d640672 Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
172 5d640672 Michael Hanselmann
173 5d640672 Michael Hanselmann
  return qa_utils.ResolveInstanceName(instance)
174 5d640672 Michael Hanselmann
175 5d640672 Michael Hanselmann
176 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('backup-import')
177 5d640672 Michael Hanselmann
def TestInstanceImport(node, newinst, expnode, name):
178 5d640672 Michael Hanselmann
  """gnt-backup import"""
179 5d640672 Michael Hanselmann
  master = qa_config.GetMasterNode()
180 5d640672 Michael Hanselmann
181 5d640672 Michael Hanselmann
  cmd = (['gnt-backup', 'import',
182 5d640672 Michael Hanselmann
          '--disk-template=plain',
183 5d640672 Michael Hanselmann
          '--no-ip-check',
184 5d640672 Michael Hanselmann
          '--src-node=%s' % expnode['primary'],
185 5d640672 Michael Hanselmann
          '--src-dir=%s/%s' % (constants.EXPORT_DIR, name),
186 5d640672 Michael Hanselmann
          '--node=%s' % node['primary']] +
187 5d640672 Michael Hanselmann
         _GetGenericAddParameters())
188 5d640672 Michael Hanselmann
  cmd.append(newinst['name'])
189 5d640672 Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
190 5d640672 Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
191 283f9d4c Michael Hanselmann
192 283f9d4c Michael Hanselmann
193 e42b5307 Michael Hanselmann
@qa_utils.DefineHook('backup-list')
194 283f9d4c Michael Hanselmann
def TestBackupList(expnode):
195 283f9d4c Michael Hanselmann
  """gnt-backup list"""
196 283f9d4c Michael Hanselmann
  master = qa_config.GetMasterNode()
197 283f9d4c Michael Hanselmann
198 1e020d1b Michael Hanselmann
  cmd = ['gnt-backup', 'list', '--node=%s' % expnode['primary']]
199 283f9d4c Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
200 283f9d4c Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
201 e8ae0c20 Michael Hanselmann
202 e8ae0c20 Michael Hanselmann
203 e8ae0c20 Michael Hanselmann
def _TestInstanceDiskFailure(instance, node, node2, onmaster):
204 e8ae0c20 Michael Hanselmann
  """Testing disk failure."""
205 e8ae0c20 Michael Hanselmann
  master = qa_config.GetMasterNode()
206 e8ae0c20 Michael Hanselmann
  sq = utils.ShellQuoteArgs
207 e8ae0c20 Michael Hanselmann
208 e8ae0c20 Michael Hanselmann
  instance_full = qa_utils.ResolveInstanceName(instance)
209 e8ae0c20 Michael Hanselmann
  node_full = qa_utils.ResolveNodeName(node)
210 e8ae0c20 Michael Hanselmann
  node2_full = qa_utils.ResolveNodeName(node2)
211 e8ae0c20 Michael Hanselmann
212 e8ae0c20 Michael Hanselmann
  cmd = ['gnt-node', 'volumes', '--separator=|', '--no-headers',
213 e8ae0c20 Michael Hanselmann
         '--output=node,phys,instance',
214 e8ae0c20 Michael Hanselmann
         node['primary'], node2['primary']]
215 e8ae0c20 Michael Hanselmann
  output = qa_utils.GetCommandOutput(master['primary'], sq(cmd))
216 e8ae0c20 Michael Hanselmann
217 e8ae0c20 Michael Hanselmann
  # Get physical disk names
218 e8ae0c20 Michael Hanselmann
  re_disk = re.compile(r'^/dev/([a-z]+)\d+$')
219 e8ae0c20 Michael Hanselmann
  node2disk = {}
220 e8ae0c20 Michael Hanselmann
  for line in output.splitlines():
221 e8ae0c20 Michael Hanselmann
    (node_name, phys, inst) = line.split('|')
222 e8ae0c20 Michael Hanselmann
    if inst == instance_full:
223 e8ae0c20 Michael Hanselmann
      if node_name not in node2disk:
224 e8ae0c20 Michael Hanselmann
        node2disk[node_name] = []
225 e8ae0c20 Michael Hanselmann
226 e8ae0c20 Michael Hanselmann
      m = re_disk.match(phys)
227 e8ae0c20 Michael Hanselmann
      if not m:
228 e8ae0c20 Michael Hanselmann
        raise qa_error.Error("Unknown disk name format: %s" % disk)
229 e8ae0c20 Michael Hanselmann
230 e8ae0c20 Michael Hanselmann
      name = m.group(1)
231 e8ae0c20 Michael Hanselmann
      if name not in node2disk[node_name]:
232 e8ae0c20 Michael Hanselmann
        node2disk[node_name].append(name)
233 e8ae0c20 Michael Hanselmann
234 e8ae0c20 Michael Hanselmann
  if [node2_full, node_full][int(onmaster)] not in node2disk:
235 f4bc1f2c Michael Hanselmann
    raise qa_error.Error("Couldn't find physical disks used on"
236 f4bc1f2c Michael Hanselmann
                         " %s node" % ["secondary", "master"][int(onmaster)])
237 e8ae0c20 Michael Hanselmann
238 e8ae0c20 Michael Hanselmann
  # Check whether nodes have ability to stop disks
239 e8ae0c20 Michael Hanselmann
  for node_name, disks in node2disk.iteritems():
240 e8ae0c20 Michael Hanselmann
    cmds = []
241 e8ae0c20 Michael Hanselmann
    for disk in disks:
242 e8ae0c20 Michael Hanselmann
      cmds.append(sq(["test", "-f", _GetDiskStatePath(disk)]))
243 e8ae0c20 Michael Hanselmann
    AssertEqual(StartSSH(node_name, ' && '.join(cmds)).wait(), 0)
244 e8ae0c20 Michael Hanselmann
245 e8ae0c20 Michael Hanselmann
  # Get device paths
246 e8ae0c20 Michael Hanselmann
  cmd = ['gnt-instance', 'activate-disks', instance['name']]
247 e8ae0c20 Michael Hanselmann
  output = qa_utils.GetCommandOutput(master['primary'], sq(cmd))
248 e8ae0c20 Michael Hanselmann
  devpath = []
249 e8ae0c20 Michael Hanselmann
  for line in output.splitlines():
250 e8ae0c20 Michael Hanselmann
    (_, _, tmpdevpath) = line.split(':')
251 e8ae0c20 Michael Hanselmann
    devpath.append(tmpdevpath)
252 e8ae0c20 Michael Hanselmann
253 e8ae0c20 Michael Hanselmann
  # Get drbd device paths
254 e8ae0c20 Michael Hanselmann
  cmd = ['gnt-instance', 'info', instance['name']]
255 e8ae0c20 Michael Hanselmann
  output = qa_utils.GetCommandOutput(master['primary'], sq(cmd))
256 e8ae0c20 Michael Hanselmann
  pattern = (r'\s+-\s+type:\s+drbd,\s+.*$'
257 e8ae0c20 Michael Hanselmann
             r'\s+primary:\s+(/dev/drbd\d+)\s+')
258 e8ae0c20 Michael Hanselmann
  drbddevs = re.findall(pattern, output, re.M)
259 e8ae0c20 Michael Hanselmann
260 e8ae0c20 Michael Hanselmann
  halted_disks = []
261 e8ae0c20 Michael Hanselmann
  try:
262 b1ffe1eb Michael Hanselmann
    # Deactivate disks
263 b1ffe1eb Michael Hanselmann
    cmds = []
264 b1ffe1eb Michael Hanselmann
    for name in node2disk[[node2_full, node_full][int(onmaster)]]:
265 b1ffe1eb Michael Hanselmann
      halted_disks.append(name)
266 b1ffe1eb Michael Hanselmann
      cmds.append(sq(["echo", "offline"]) + " >%s" % _GetDiskStatePath(name))
267 b1ffe1eb Michael Hanselmann
    AssertEqual(StartSSH([node2, node][int(onmaster)]['primary'],
268 b1ffe1eb Michael Hanselmann
                         ' && '.join(cmds)).wait(), 0)
269 b1ffe1eb Michael Hanselmann
270 e8ae0c20 Michael Hanselmann
    # Write something to the disks and give some time to notice the problem
271 e8ae0c20 Michael Hanselmann
    cmds = []
272 e8ae0c20 Michael Hanselmann
    for disk in devpath:
273 e8ae0c20 Michael Hanselmann
      cmds.append(sq(["dd", "count=1", "bs=512", "conv=notrunc",
274 e8ae0c20 Michael Hanselmann
                      "if=%s" % disk, "of=%s" % disk]))
275 e8ae0c20 Michael Hanselmann
    for _ in (0, 1, 2):
276 e8ae0c20 Michael Hanselmann
      AssertEqual(StartSSH(node['primary'], ' && '.join(cmds)).wait(), 0)
277 e8ae0c20 Michael Hanselmann
      time.sleep(3)
278 e8ae0c20 Michael Hanselmann
279 b1ffe1eb Michael Hanselmann
    for name in drbddevs:
280 b1ffe1eb Michael Hanselmann
      cmd = ['drbdsetup', name, 'show']
281 b1ffe1eb Michael Hanselmann
      AssertEqual(StartSSH(node['primary'], sq(cmd)).wait(), 0)
282 b1ffe1eb Michael Hanselmann
283 e8ae0c20 Michael Hanselmann
    # For manual checks
284 e8ae0c20 Michael Hanselmann
    cmd = ['gnt-instance', 'info', instance['name']]
285 e8ae0c20 Michael Hanselmann
    AssertEqual(StartSSH(master['primary'], sq(cmd)).wait(), 0)
286 e8ae0c20 Michael Hanselmann
287 e8ae0c20 Michael Hanselmann
  finally:
288 e8ae0c20 Michael Hanselmann
    # Activate disks again
289 e8ae0c20 Michael Hanselmann
    cmds = []
290 e8ae0c20 Michael Hanselmann
    for name in halted_disks:
291 e8ae0c20 Michael Hanselmann
      cmds.append(sq(["echo", "running"]) + " >%s" % _GetDiskStatePath(name))
292 e8ae0c20 Michael Hanselmann
    AssertEqual(StartSSH([node2, node][int(onmaster)]['primary'],
293 e8ae0c20 Michael Hanselmann
                         '; '.join(cmds)).wait(), 0)
294 e8ae0c20 Michael Hanselmann
295 b1ffe1eb Michael Hanselmann
  if onmaster:
296 b1ffe1eb Michael Hanselmann
    for name in drbddevs:
297 b1ffe1eb Michael Hanselmann
      cmd = ['drbdsetup', name, 'detach']
298 b1ffe1eb Michael Hanselmann
      AssertEqual(StartSSH(node['primary'], sq(cmd)).wait(), 0)
299 b1ffe1eb Michael Hanselmann
  else:
300 b1ffe1eb Michael Hanselmann
    for name in drbddevs:
301 b1ffe1eb Michael Hanselmann
      cmd = ['drbdsetup', name, 'disconnect']
302 b1ffe1eb Michael Hanselmann
      AssertEqual(StartSSH(node2['primary'], sq(cmd)).wait(), 0)
303 b1ffe1eb Michael Hanselmann
304 b1ffe1eb Michael Hanselmann
  # Make sure disks are up again
305 b1ffe1eb Michael Hanselmann
  #cmd = ['gnt-instance', 'activate-disks', instance['name']]
306 b1ffe1eb Michael Hanselmann
  #AssertEqual(StartSSH(master['primary'], sq(cmd)).wait(), 0)
307 b1ffe1eb Michael Hanselmann
308 e8ae0c20 Michael Hanselmann
  # Restart instance
309 e8ae0c20 Michael Hanselmann
  cmd = ['gnt-instance', 'shutdown', instance['name']]
310 e8ae0c20 Michael Hanselmann
  AssertEqual(StartSSH(master['primary'], sq(cmd)).wait(), 0)
311 e8ae0c20 Michael Hanselmann
312 b1ffe1eb Michael Hanselmann
  #cmd = ['gnt-instance', 'startup', '--force', instance['name']]
313 b1ffe1eb Michael Hanselmann
  cmd = ['gnt-instance', 'startup', instance['name']]
314 e8ae0c20 Michael Hanselmann
  AssertEqual(StartSSH(master['primary'], sq(cmd)).wait(), 0)
315 e8ae0c20 Michael Hanselmann
316 e8ae0c20 Michael Hanselmann
  cmd = ['gnt-cluster', 'verify']
317 e8ae0c20 Michael Hanselmann
  AssertEqual(StartSSH(master['primary'], sq(cmd)).wait(), 0)
318 e8ae0c20 Michael Hanselmann
319 e8ae0c20 Michael Hanselmann
320 e8ae0c20 Michael Hanselmann
def TestInstanceMasterDiskFailure(instance, node, node2):
321 e8ae0c20 Michael Hanselmann
  """Testing disk failure on master node."""
322 f4bc1f2c Michael Hanselmann
  print qa_utils.FormatError("Disk failure on primary node cannot be"
323 f4bc1f2c Michael Hanselmann
                             " tested due to potential crashes.")
324 e8ae0c20 Michael Hanselmann
  # The following can cause crashes, thus it's disabled until fixed
325 dfe11bad Michael Hanselmann
  #return _TestInstanceDiskFailure(instance, node, node2, True)
326 e8ae0c20 Michael Hanselmann
327 e8ae0c20 Michael Hanselmann
328 e8ae0c20 Michael Hanselmann
def TestInstanceSecondaryDiskFailure(instance, node, node2):
329 e8ae0c20 Michael Hanselmann
  """Testing disk failure on secondary node."""
330 e8ae0c20 Michael Hanselmann
  return _TestInstanceDiskFailure(instance, node, node2, False)