Statistics
| Branch: | Tag: | Revision:

root / qa / qa_os.py @ 973d7867

History | View | Annotate | Download (3.5 kB)

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

21 8947cf2b Michael Hanselmann
"""
22 8947cf2b Michael Hanselmann
23 8947cf2b Michael Hanselmann
import os
24 8947cf2b Michael Hanselmann
import os.path
25 8947cf2b Michael Hanselmann
26 8947cf2b Michael Hanselmann
from ganeti import utils
27 8947cf2b Michael Hanselmann
from ganeti import constants
28 8947cf2b Michael Hanselmann
29 8947cf2b Michael Hanselmann
import qa_config
30 8947cf2b Michael Hanselmann
import qa_utils
31 8947cf2b Michael Hanselmann
32 8947cf2b Michael Hanselmann
from qa_utils import AssertEqual, StartSSH
33 8947cf2b Michael Hanselmann
34 8947cf2b Michael Hanselmann
35 8947cf2b Michael Hanselmann
_TEMP_OS_NAME = "TEMP-Ganeti-QA-OS"
36 8947cf2b Michael Hanselmann
_TEMP_OS_PATH = os.path.join(constants.OS_SEARCH_PATH[0], _TEMP_OS_NAME)
37 8947cf2b Michael Hanselmann
38 8947cf2b Michael Hanselmann
39 9b3939ea Michael Hanselmann
@qa_utils.DefineHook('os-list')
40 8947cf2b Michael Hanselmann
def TestOsList():
41 8947cf2b Michael Hanselmann
  """gnt-os list"""
42 8947cf2b Michael Hanselmann
  master = qa_config.GetMasterNode()
43 8947cf2b Michael Hanselmann
44 8947cf2b Michael Hanselmann
  cmd = ['gnt-os', 'list']
45 8947cf2b Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
46 8947cf2b Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
47 8947cf2b Michael Hanselmann
48 8947cf2b Michael Hanselmann
49 9b3939ea Michael Hanselmann
@qa_utils.DefineHook('os-diagnose')
50 8947cf2b Michael Hanselmann
def TestOsDiagnose():
51 8947cf2b Michael Hanselmann
  """gnt-os diagnose"""
52 8947cf2b Michael Hanselmann
  master = qa_config.GetMasterNode()
53 8947cf2b Michael Hanselmann
54 8947cf2b Michael Hanselmann
  cmd = ['gnt-os', 'diagnose']
55 8947cf2b Michael Hanselmann
  AssertEqual(StartSSH(master['primary'],
56 8947cf2b Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
57 8947cf2b Michael Hanselmann
58 8947cf2b Michael Hanselmann
59 8947cf2b Michael Hanselmann
def _SetupTempOs(node, dir, valid):
60 8947cf2b Michael Hanselmann
  """Creates a temporary OS definition on the given node.
61 8947cf2b Michael Hanselmann

62 8947cf2b Michael Hanselmann
  """
63 8947cf2b Michael Hanselmann
  sq = utils.ShellQuoteArgs
64 8947cf2b Michael Hanselmann
  parts = [sq(["rm", "-rf", dir]),
65 8947cf2b Michael Hanselmann
           sq(["mkdir", "-p", dir]),
66 8947cf2b Michael Hanselmann
           sq(["cd", dir]),
67 8947cf2b Michael Hanselmann
           sq(["ln", "-fs", "/bin/true", "export"]),
68 8947cf2b Michael Hanselmann
           sq(["ln", "-fs", "/bin/true", "import"]),
69 8947cf2b Michael Hanselmann
           sq(["ln", "-fs", "/bin/true", "rename"])]
70 8947cf2b Michael Hanselmann
71 8947cf2b Michael Hanselmann
  if valid:
72 8947cf2b Michael Hanselmann
    parts.append(sq(["ln", "-fs", "/bin/true", "create"]))
73 8947cf2b Michael Hanselmann
74 8947cf2b Michael Hanselmann
  parts.append(sq(["echo", str(constants.OS_API_VERSION)]) +
75 8947cf2b Michael Hanselmann
               " >ganeti_api_version")
76 8947cf2b Michael Hanselmann
77 8947cf2b Michael Hanselmann
  cmd = ' && '.join(parts)
78 8947cf2b Michael Hanselmann
79 dfe11bad Michael Hanselmann
  print qa_utils.FormatInfo("Setting up %s with %s OS definition" %
80 dfe11bad Michael Hanselmann
                            (node["primary"],
81 dfe11bad Michael Hanselmann
                             ["an invalid", "a valid"][int(valid)]))
82 8947cf2b Michael Hanselmann
83 8947cf2b Michael Hanselmann
  AssertEqual(StartSSH(node['primary'], cmd).wait(), 0)
84 8947cf2b Michael Hanselmann
85 8947cf2b Michael Hanselmann
86 8947cf2b Michael Hanselmann
def _RemoveTempOs(node, dir):
87 8947cf2b Michael Hanselmann
  """Removes a temporary OS definition.
88 8947cf2b Michael Hanselmann

89 8947cf2b Michael Hanselmann
  """
90 8947cf2b Michael Hanselmann
  cmd = ['rm', '-rf', dir]
91 8947cf2b Michael Hanselmann
  AssertEqual(StartSSH(node['primary'],
92 8947cf2b Michael Hanselmann
                       utils.ShellQuoteArgs(cmd)).wait(), 0)
93 8947cf2b Michael Hanselmann
94 8947cf2b Michael Hanselmann
95 8947cf2b Michael Hanselmann
def _TestOs(mode):
96 8947cf2b Michael Hanselmann
  """Generic function for OS definition testing
97 8947cf2b Michael Hanselmann

98 8947cf2b Michael Hanselmann
  """
99 8947cf2b Michael Hanselmann
  master = qa_config.GetMasterNode()
100 8947cf2b Michael Hanselmann
  dir = _TEMP_OS_PATH
101 8947cf2b Michael Hanselmann
102 8947cf2b Michael Hanselmann
  nodes = []
103 8947cf2b Michael Hanselmann
  try:
104 8947cf2b Michael Hanselmann
    i = 0
105 8947cf2b Michael Hanselmann
    for node in qa_config.get('nodes'):
106 8947cf2b Michael Hanselmann
      nodes.append(node)
107 8947cf2b Michael Hanselmann
      if mode == 0:
108 8947cf2b Michael Hanselmann
        valid = False
109 8947cf2b Michael Hanselmann
      elif mode == 1:
110 8947cf2b Michael Hanselmann
        valid = True
111 8947cf2b Michael Hanselmann
      else:
112 8947cf2b Michael Hanselmann
        valid = bool(i % 2)
113 8947cf2b Michael Hanselmann
      _SetupTempOs(node, dir, valid)
114 8947cf2b Michael Hanselmann
      i += 1
115 8947cf2b Michael Hanselmann
116 8947cf2b Michael Hanselmann
    cmd = ['gnt-os', 'diagnose']
117 8947cf2b Michael Hanselmann
    result = StartSSH(master['primary'],
118 8947cf2b Michael Hanselmann
                      utils.ShellQuoteArgs(cmd)).wait()
119 8947cf2b Michael Hanselmann
    if mode == 1:
120 8947cf2b Michael Hanselmann
      AssertEqual(result, 0)
121 8947cf2b Michael Hanselmann
    else:
122 8947cf2b Michael Hanselmann
      AssertEqual(result, 1)
123 8947cf2b Michael Hanselmann
  finally:
124 8947cf2b Michael Hanselmann
    for node in nodes:
125 8947cf2b Michael Hanselmann
      _RemoveTempOs(node, dir)
126 8947cf2b Michael Hanselmann
127 8947cf2b Michael Hanselmann
128 9b3939ea Michael Hanselmann
@qa_utils.DefineHook('os-valid')
129 8947cf2b Michael Hanselmann
def TestOsValid():
130 8947cf2b Michael Hanselmann
  """Testing valid OS definition"""
131 8947cf2b Michael Hanselmann
  return _TestOs(1)
132 8947cf2b Michael Hanselmann
133 8947cf2b Michael Hanselmann
134 9b3939ea Michael Hanselmann
@qa_utils.DefineHook('os-invalid')
135 8947cf2b Michael Hanselmann
def TestOsInvalid():
136 8947cf2b Michael Hanselmann
  """Testing invalid OS definition"""
137 8947cf2b Michael Hanselmann
  return _TestOs(0)
138 8947cf2b Michael Hanselmann
139 8947cf2b Michael Hanselmann
140 9b3939ea Michael Hanselmann
@qa_utils.DefineHook('os-partially-valid')
141 8947cf2b Michael Hanselmann
def TestOsPartiallyValid():
142 8947cf2b Michael Hanselmann
  """Testing partially valid OS definition"""
143 8947cf2b Michael Hanselmann
  return _TestOs(2)