From 8947cf2b1fb0c219f1549f5c736fa4bc4a0cf5e8 Mon Sep 17 00:00:00 2001 From: Michael Hanselmann <hansmi@google.com> Date: Mon, 15 Oct 2007 12:16:17 +0000 Subject: [PATCH] =?UTF-8?q?Do=20QA=20tests=20on=20=E2=80=9Cgnt-os=E2=80=9C?= =?UTF-8?q?,=20including=20partially=20valid=20OSes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: iustinp --- qa/Makefile.am | 3 +- qa/ganeti-qa.py | 8 +++ qa/qa-sample.yaml | 2 + qa/qa_os.py | 137 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 qa/qa_os.py diff --git a/qa/Makefile.am b/qa/Makefile.am index bee5d32e5..f52131405 100644 --- a/qa/Makefile.am +++ b/qa/Makefile.am @@ -5,7 +5,8 @@ EXTRA_DIST = ganeti-qa.py qa-sample.yaml \ qa_env.py \ qa_error.py \ qa_instance.py \ - qa_node.py + qa_node.py \ + qa_os.py \ qa_other.py \ qa_utils.py CLEANFILES = *.py[co] diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py index b7cd00974..64c0006b2 100755 --- a/qa/ganeti-qa.py +++ b/qa/ganeti-qa.py @@ -37,6 +37,7 @@ import qa_daemon import qa_env import qa_instance import qa_node +import qa_os import qa_other @@ -121,6 +122,13 @@ def main(): if qa_config.TestEnabled('cluster-master-failover'): RunTest(qa_cluster.TestClusterMasterFailover) + if qa_config.TestEnabled('os'): + RunTest(qa_os.TestOsList) + RunTest(qa_os.TestOsDiagnose) + RunTest(qa_os.TestOsValid) + RunTest(qa_os.TestOsInvalid) + RunTest(qa_os.TestOsPartiallyValid) + node = qa_config.AcquireNode() try: if qa_config.TestEnabled('instance-add-plain-disk'): diff --git a/qa/qa-sample.yaml b/qa/qa-sample.yaml index 9988b4916..be6779733 100644 --- a/qa/qa-sample.yaml +++ b/qa/qa-sample.yaml @@ -26,6 +26,8 @@ instances: tests: env: True + os: True + cluster-verify: True cluster-info: True cluster-getmaster: True diff --git a/qa/qa_os.py b/qa/qa_os.py new file mode 100644 index 000000000..5383d07e5 --- /dev/null +++ b/qa/qa_os.py @@ -0,0 +1,137 @@ +# Copyright (C) 2007 Google Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + + +"""OS related QA tests. + +""" + +import os +import os.path + +from ganeti import utils +from ganeti import constants + +import qa_config +import qa_utils + +from qa_utils import AssertEqual, StartSSH + + +_TEMP_OS_NAME = "TEMP-Ganeti-QA-OS" +_TEMP_OS_PATH = os.path.join(constants.OS_SEARCH_PATH[0], _TEMP_OS_NAME) + + +def TestOsList(): + """gnt-os list""" + master = qa_config.GetMasterNode() + + cmd = ['gnt-os', 'list'] + AssertEqual(StartSSH(master['primary'], + utils.ShellQuoteArgs(cmd)).wait(), 0) + + +def TestOsDiagnose(): + """gnt-os diagnose""" + master = qa_config.GetMasterNode() + + cmd = ['gnt-os', 'diagnose'] + AssertEqual(StartSSH(master['primary'], + utils.ShellQuoteArgs(cmd)).wait(), 0) + + +def _SetupTempOs(node, dir, valid): + """Creates a temporary OS definition on the given node. + + """ + sq = utils.ShellQuoteArgs + parts = [sq(["rm", "-rf", dir]), + sq(["mkdir", "-p", dir]), + sq(["cd", dir]), + sq(["ln", "-fs", "/bin/true", "export"]), + sq(["ln", "-fs", "/bin/true", "import"]), + sq(["ln", "-fs", "/bin/true", "rename"])] + + if valid: + parts.append(sq(["ln", "-fs", "/bin/true", "create"])) + + parts.append(sq(["echo", str(constants.OS_API_VERSION)]) + + " >ganeti_api_version") + + cmd = ' && '.join(parts) + + qa_utils.PrintInfo("Setting up %s with %s OS definition" % + (node["primary"], ["an invalid", "a valid"][int(valid)])) + + AssertEqual(StartSSH(node['primary'], cmd).wait(), 0) + + +def _RemoveTempOs(node, dir): + """Removes a temporary OS definition. + + """ + cmd = ['rm', '-rf', dir] + AssertEqual(StartSSH(node['primary'], + utils.ShellQuoteArgs(cmd)).wait(), 0) + + +def _TestOs(mode): + """Generic function for OS definition testing + + """ + master = qa_config.GetMasterNode() + dir = _TEMP_OS_PATH + + nodes = [] + try: + i = 0 + for node in qa_config.get('nodes'): + nodes.append(node) + if mode == 0: + valid = False + elif mode == 1: + valid = True + else: + valid = bool(i % 2) + _SetupTempOs(node, dir, valid) + i += 1 + + cmd = ['gnt-os', 'diagnose'] + result = StartSSH(master['primary'], + utils.ShellQuoteArgs(cmd)).wait() + if mode == 1: + AssertEqual(result, 0) + else: + AssertEqual(result, 1) + finally: + for node in nodes: + _RemoveTempOs(node, dir) + + +def TestOsValid(): + """Testing valid OS definition""" + return _TestOs(1) + + +def TestOsInvalid(): + """Testing invalid OS definition""" + return _TestOs(0) + + +def TestOsPartiallyValid(): + """Testing partially valid OS definition""" + return _TestOs(2) -- GitLab