Statistics
| Branch: | Tag: | Revision:

root / qa / qa_os.py @ cce6f357

History | View | Annotate | Download (4.1 kB)

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

24 8947cf2b Michael Hanselmann
"""
25 8947cf2b Michael Hanselmann
26 8947cf2b Michael Hanselmann
import os
27 8947cf2b Michael Hanselmann
import os.path
28 8947cf2b Michael Hanselmann
29 8947cf2b Michael Hanselmann
from ganeti import utils
30 8947cf2b Michael Hanselmann
from ganeti import constants
31 8947cf2b Michael Hanselmann
32 8947cf2b Michael Hanselmann
import qa_config
33 8947cf2b Michael Hanselmann
import qa_utils
34 8947cf2b Michael Hanselmann
35 2f4b4f78 Iustin Pop
from qa_utils import AssertCommand
36 8947cf2b Michael Hanselmann
37 8947cf2b Michael Hanselmann
38 8947cf2b Michael Hanselmann
_TEMP_OS_NAME = "TEMP-Ganeti-QA-OS"
39 8947cf2b Michael Hanselmann
_TEMP_OS_PATH = os.path.join(constants.OS_SEARCH_PATH[0], _TEMP_OS_NAME)
40 8947cf2b Michael Hanselmann
41 8947cf2b Michael Hanselmann
42 8947cf2b Michael Hanselmann
def TestOsList():
43 8947cf2b Michael Hanselmann
  """gnt-os list"""
44 2f4b4f78 Iustin Pop
  AssertCommand(["gnt-os", "list"])
45 8947cf2b Michael Hanselmann
46 8947cf2b Michael Hanselmann
47 8947cf2b Michael Hanselmann
def TestOsDiagnose():
48 8947cf2b Michael Hanselmann
  """gnt-os diagnose"""
49 2f4b4f78 Iustin Pop
  AssertCommand(["gnt-os", "diagnose"])
50 8947cf2b Michael Hanselmann
51 8947cf2b Michael Hanselmann
52 2f4b4f78 Iustin Pop
def _TestOsModify(hvp_dict, fail=False):
53 fca11dec René Nussbaumer
  """gnt-os modify"""
54 fca11dec René Nussbaumer
  cmd = ['gnt-os', 'modify']
55 fca11dec René Nussbaumer
56 fca11dec René Nussbaumer
  for hv_name, hv_params in hvp_dict.items():
57 fca11dec René Nussbaumer
    cmd.append('-H')
58 fca11dec René Nussbaumer
    options = []
59 fca11dec René Nussbaumer
    for key, value in hv_params.items():
60 fca11dec René Nussbaumer
      options.append("%s=%s" % (key, value))
61 fca11dec René Nussbaumer
    cmd.append('%s:%s' % (hv_name, ','.join(options)))
62 fca11dec René Nussbaumer
63 fca11dec René Nussbaumer
  cmd.append(_TEMP_OS_NAME)
64 2f4b4f78 Iustin Pop
  AssertCommand(cmd, fail=fail)
65 fca11dec René Nussbaumer
66 fca11dec René Nussbaumer
67 e1df06f2 Iustin Pop
def _TestOsStates():
68 e1df06f2 Iustin Pop
  """gnt-os modify, more stuff"""
69 e1df06f2 Iustin Pop
  cmd = ["gnt-os", "modify"]
70 e1df06f2 Iustin Pop
71 e1df06f2 Iustin Pop
  for param in ["hidden", "blacklisted"]:
72 e1df06f2 Iustin Pop
    for val in ["yes", "no"]:
73 e1df06f2 Iustin Pop
      new_cmd = cmd + ["--%s" % param, val, _TEMP_OS_NAME]
74 2f4b4f78 Iustin Pop
      AssertCommand(new_cmd)
75 89e8af70 Iustin Pop
      # check that double-running the command is OK
76 2f4b4f78 Iustin Pop
      AssertCommand(new_cmd)
77 e1df06f2 Iustin Pop
78 e1df06f2 Iustin Pop
79 3582eef6 Iustin Pop
def _SetupTempOs(node, dirname, valid):
80 8947cf2b Michael Hanselmann
  """Creates a temporary OS definition on the given node.
81 8947cf2b Michael Hanselmann

82 8947cf2b Michael Hanselmann
  """
83 8947cf2b Michael Hanselmann
  sq = utils.ShellQuoteArgs
84 3582eef6 Iustin Pop
  parts = [sq(["rm", "-rf", dirname]),
85 3582eef6 Iustin Pop
           sq(["mkdir", "-p", dirname]),
86 3582eef6 Iustin Pop
           sq(["cd", dirname]),
87 8947cf2b Michael Hanselmann
           sq(["ln", "-fs", "/bin/true", "export"]),
88 8947cf2b Michael Hanselmann
           sq(["ln", "-fs", "/bin/true", "import"]),
89 8947cf2b Michael Hanselmann
           sq(["ln", "-fs", "/bin/true", "rename"])]
90 8947cf2b Michael Hanselmann
91 8947cf2b Michael Hanselmann
  if valid:
92 8947cf2b Michael Hanselmann
    parts.append(sq(["ln", "-fs", "/bin/true", "create"]))
93 8947cf2b Michael Hanselmann
94 d1a7d66f Guido Trotter
  parts.append(sq(["echo", str(constants.OS_API_V10)]) +
95 8947cf2b Michael Hanselmann
               " >ganeti_api_version")
96 8947cf2b Michael Hanselmann
97 8947cf2b Michael Hanselmann
  cmd = ' && '.join(parts)
98 8947cf2b Michael Hanselmann
99 dfe11bad Michael Hanselmann
  print qa_utils.FormatInfo("Setting up %s with %s OS definition" %
100 dfe11bad Michael Hanselmann
                            (node["primary"],
101 dfe11bad Michael Hanselmann
                             ["an invalid", "a valid"][int(valid)]))
102 8947cf2b Michael Hanselmann
103 2f4b4f78 Iustin Pop
  AssertCommand(cmd, node=node)
104 8947cf2b Michael Hanselmann
105 8947cf2b Michael Hanselmann
106 3582eef6 Iustin Pop
def _RemoveTempOs(node, dirname):
107 8947cf2b Michael Hanselmann
  """Removes a temporary OS definition.
108 8947cf2b Michael Hanselmann

109 8947cf2b Michael Hanselmann
  """
110 3582eef6 Iustin Pop
  AssertCommand(["rm", "-rf", dirname], node=node)
111 8947cf2b Michael Hanselmann
112 8947cf2b Michael Hanselmann
113 8947cf2b Michael Hanselmann
def _TestOs(mode):
114 8947cf2b Michael Hanselmann
  """Generic function for OS definition testing
115 8947cf2b Michael Hanselmann

116 8947cf2b Michael Hanselmann
  """
117 3582eef6 Iustin Pop
  dirname = _TEMP_OS_PATH
118 8947cf2b Michael Hanselmann
119 8947cf2b Michael Hanselmann
  nodes = []
120 8947cf2b Michael Hanselmann
  try:
121 2f4b4f78 Iustin Pop
    for i, node in enumerate(qa_config.get("nodes")):
122 8947cf2b Michael Hanselmann
      nodes.append(node)
123 8947cf2b Michael Hanselmann
      if mode == 0:
124 8947cf2b Michael Hanselmann
        valid = False
125 8947cf2b Michael Hanselmann
      elif mode == 1:
126 8947cf2b Michael Hanselmann
        valid = True
127 8947cf2b Michael Hanselmann
      else:
128 8947cf2b Michael Hanselmann
        valid = bool(i % 2)
129 3582eef6 Iustin Pop
      _SetupTempOs(node, dirname, valid)
130 2f4b4f78 Iustin Pop
131 2f4b4f78 Iustin Pop
    AssertCommand(["gnt-os", "diagnose"], fail=not mode==1)
132 8947cf2b Michael Hanselmann
  finally:
133 8947cf2b Michael Hanselmann
    for node in nodes:
134 3582eef6 Iustin Pop
      _RemoveTempOs(node, dirname)
135 8947cf2b Michael Hanselmann
136 8947cf2b Michael Hanselmann
137 8947cf2b Michael Hanselmann
def TestOsValid():
138 8947cf2b Michael Hanselmann
  """Testing valid OS definition"""
139 8947cf2b Michael Hanselmann
  return _TestOs(1)
140 8947cf2b Michael Hanselmann
141 8947cf2b Michael Hanselmann
142 8947cf2b Michael Hanselmann
def TestOsInvalid():
143 8947cf2b Michael Hanselmann
  """Testing invalid OS definition"""
144 8947cf2b Michael Hanselmann
  return _TestOs(0)
145 8947cf2b Michael Hanselmann
146 8947cf2b Michael Hanselmann
147 8947cf2b Michael Hanselmann
def TestOsPartiallyValid():
148 8947cf2b Michael Hanselmann
  """Testing partially valid OS definition"""
149 8947cf2b Michael Hanselmann
  return _TestOs(2)
150 fca11dec René Nussbaumer
151 fca11dec René Nussbaumer
152 fca11dec René Nussbaumer
def TestOsModifyValid():
153 fca11dec René Nussbaumer
  """Testing a valid os modify invocation"""
154 fca11dec René Nussbaumer
  hv_dict = {
155 fca11dec René Nussbaumer
    constants.HT_XEN_PVM: {
156 fca11dec René Nussbaumer
      constants.HV_ROOT_PATH: "/dev/sda5",
157 fca11dec René Nussbaumer
      },
158 fca11dec René Nussbaumer
    constants.HT_XEN_HVM: {
159 fca11dec René Nussbaumer
      constants.HV_ACPI: False,
160 fca11dec René Nussbaumer
      constants.HV_PAE: True,
161 fca11dec René Nussbaumer
      },
162 fca11dec René Nussbaumer
    }
163 fca11dec René Nussbaumer
164 fca11dec René Nussbaumer
  return _TestOsModify(hv_dict)
165 fca11dec René Nussbaumer
166 fca11dec René Nussbaumer
167 fca11dec René Nussbaumer
def TestOsModifyInvalid():
168 fca11dec René Nussbaumer
  """Testing an invalid os modify invocation"""
169 fca11dec René Nussbaumer
  hv_dict = {
170 fca11dec René Nussbaumer
    "blahblahblubb": {"bar": ""},
171 fca11dec René Nussbaumer
    }
172 fca11dec René Nussbaumer
173 2f4b4f78 Iustin Pop
  return _TestOsModify(hv_dict, fail=True)
174 e1df06f2 Iustin Pop
175 e1df06f2 Iustin Pop
176 e1df06f2 Iustin Pop
def TestOsStates():
177 e1df06f2 Iustin Pop
  """Testing OS states"""
178 e1df06f2 Iustin Pop
179 e1df06f2 Iustin Pop
  return _TestOsStates()