From 2214cf1456caf5ea51660a2bb04f0fc67ee69346 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Fri, 10 Dec 2010 16:45:20 +0100
Subject: [PATCH] QA: Extend unittests for query operations, add tests for
 list-fields
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: RenΓ© Nussbaumer <rn@google.com>
---
 qa/ganeti-qa.py   |  4 ++++
 qa/qa_instance.py |  5 +++++
 qa/qa_node.py     |  5 +++++
 qa/qa_utils.py    | 31 +++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+)

diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index f94746cfa..c350571f1 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -138,6 +138,10 @@ def SetupCluster(rapi_user, rapi_secret):
 
   RunTestIf("node-list", qa_node.TestNodeList)
 
+  # Test listing fields
+  RunTestIf("node-list", qa_node.TestNodeListFields)
+  RunTestIf("instance-list", qa_instance.TestInstanceListFields)
+
   RunTestIf("node-info", qa_node.TestNodeInfo)
 
 
diff --git a/qa/qa_instance.py b/qa/qa_instance.py
index 0b27e115f..cb598de9b 100644
--- a/qa/qa_instance.py
+++ b/qa/qa_instance.py
@@ -213,6 +213,11 @@ def TestInstanceList():
   qa_utils.GenericQueryTest("gnt-instance", query.INSTANCE_FIELDS.keys())
 
 
+def TestInstanceListFields():
+  """gnt-instance list-fields"""
+  qa_utils.GenericQueryFieldsTest("gnt-instance", query.INSTANCE_FIELDS.keys())
+
+
 def TestInstanceConsole(instance):
   """gnt-instance console"""
   AssertCommand(["gnt-instance", "console", "--show-cmd", instance["name"]])
diff --git a/qa/qa_node.py b/qa/qa_node.py
index ed7c95082..6e3e0a7a6 100644
--- a/qa/qa_node.py
+++ b/qa/qa_node.py
@@ -195,3 +195,8 @@ def TestNodeModify(node):
 def TestNodeList():
   """gnt-node list"""
   qa_utils.GenericQueryTest("gnt-node", query.NODE_FIELDS.keys())
+
+
+def TestNodeListFields():
+  """gnt-node list-fields"""
+  qa_utils.GenericQueryFieldsTest("gnt-node", query.NODE_FIELDS.keys())
diff --git a/qa/qa_utils.py b/qa/qa_utils.py
index 112e2cec8..6a8ed18e3 100644
--- a/qa/qa_utils.py
+++ b/qa/qa_utils.py
@@ -31,6 +31,7 @@ import random
 
 from ganeti import utils
 from ganeti import compat
+from ganeti import constants
 
 import qa_config
 import qa_error
@@ -139,6 +140,8 @@ def AssertCommand(cmd, fail=False, node=None):
       raise qa_error.Error("Command '%s' on node %s failed, exit code %s" %
                            (cmdstr, nodename, rcode))
 
+  return rcode
+
 
 def GetSSHCommand(node, cmd, strict=True):
   """Builds SSH command to be executed.
@@ -352,6 +355,34 @@ def GenericQueryTest(cmd, fields):
   rnd.shuffle(randnames)
   AssertEqual(namelist_fn(randnames), randnames)
 
+  # Listing unknown items must fail
+  AssertCommand([cmd, "list", "this.name.certainly.does.not.exist"], fail=True)
+
+  # Check exit code for listing unknown field
+  AssertEqual(AssertCommand([cmd, "list", "--output=field/does/not/exist"],
+                            fail=True),
+              constants.EXIT_UNKNOWN_FIELD)
+
+
+def GenericQueryFieldsTest(cmd, fields):
+  master = qa_config.GetMasterNode()
+
+  # Listing fields
+  AssertCommand([cmd, "list-fields"])
+  AssertCommand([cmd, "list-fields"] + fields)
+
+  # Check listed fields (all, must be sorted)
+  realcmd = [cmd, "list-fields", "--separator=|", "--no-headers"]
+  output = GetCommandOutput(master["primary"],
+                            utils.ShellQuoteArgs(realcmd)).splitlines()
+  AssertEqual([line.split("|", 1)[0] for line in output],
+              sorted(fields))
+
+  # Check exit code for listing unknown field
+  AssertEqual(AssertCommand([cmd, "list-fields", "field/does/not/exist"],
+                            fail=True),
+              constants.EXIT_UNKNOWN_FIELD)
+
 
 def _FormatWithColor(text, seq):
   if not seq:
-- 
GitLab