From f3fd2c9d5f5f941312a3d56ae0a02df8f7677cba Mon Sep 17 00:00:00 2001 From: Adeodato Simo <dato@google.com> Date: Fri, 7 Jan 2011 21:56:39 +0000 Subject: [PATCH] Add QA tests for OpAssignGroupNodes Signed-off-by: Adeodato Simo <dato@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- qa/ganeti-qa.py | 4 ++++ qa/qa_group.py | 43 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py index ffb4b806e..ed56dec97 100755 --- a/qa/ganeti-qa.py +++ b/qa/ganeti-qa.py @@ -41,6 +41,7 @@ import qa_utils from ganeti import utils from ganeti import rapi +from ganeti import constants import ganeti.rapi.client @@ -437,6 +438,9 @@ def main(): instance = RunTest(func, pnode, snode) RunCommonInstanceTests(instance) RunGroupListTests() + RunTest(qa_group.TestAssignNodesIncludingSplit, + constants.INITIAL_NODE_GROUP_NAME, + pnode["primary"], snode["primary"]) if qa_config.TestEnabled('instance-convert-disk'): RunTest(qa_instance.TestInstanceShutdown, instance) RunTest(qa_instance.TestInstanceConvertDisk, instance, snode) diff --git a/qa/qa_group.py b/qa/qa_group.py index 891531e01..38a9d7a09 100644 --- a/qa/qa_group.py +++ b/qa/qa_group.py @@ -21,11 +21,12 @@ from ganeti import constants from ganeti import query +from ganeti import utils import qa_config import qa_utils -from qa_utils import AssertCommand +from qa_utils import AssertCommand, AssertEqual, GetCommandOutput def TestGroupAddRemoveRename(): @@ -94,3 +95,43 @@ def TestGroupList(): def TestGroupListFields(): """gnt-group list-fields""" qa_utils.GenericQueryFieldsTest("gnt-group", query.GROUP_FIELDS.keys()) + + +def TestAssignNodesIncludingSplit(orig_group, node1, node2): + """gnt-group assign-nodes --force + + Expects node1 and node2 to be primary and secondary for a common instance. + + """ + assert node1 != node2 + groups = qa_config.get("groups", {}) + other_group = groups.get("inexistent-groups", ["group1"])[0] + + master_node = qa_config.GetMasterNode()["primary"] + + def AssertInGroup(group, nodes): + real_output = GetCommandOutput(master_node, + "gnt-node list --no-headers -o group " + + utils.ShellQuoteArgs(nodes)) + AssertEqual(real_output.splitlines(), [group] * len(nodes)) + + AssertInGroup(orig_group, [node1, node2]) + AssertCommand(["gnt-group", "add", other_group]) + + try: + AssertCommand(["gnt-group", "assign-nodes", other_group, node1, node2]) + AssertInGroup(other_group, [node1, node2]) + + # This should fail because moving node1 to orig_group would leave their + # common instance split between orig_group and other_group. + AssertCommand(["gnt-group", "assign-nodes", orig_group, node1], fail=True) + AssertInGroup(other_group, [node1, node2]) + + AssertCommand(["gnt-group", "assign-nodes", "--force", orig_group, node1]) + AssertInGroup(orig_group, [node1]) + AssertInGroup(other_group, [node2]) + + AssertCommand(["gnt-group", "assign-nodes", orig_group, node2]) + AssertInGroup(orig_group, [node1, node2]) + finally: + AssertCommand(["gnt-group", "remove", other_group]) -- GitLab