From 21e2734ff4966735948b309d9664819f47810e64 Mon Sep 17 00:00:00 2001
From: Bernardo Dal Seno <bdalseno@google.com>
Date: Mon, 21 Jan 2013 14:58:55 +0100
Subject: [PATCH] QA: Cluster-verify reports shared PVs with exclusive storage

Exclusive storage forbids sharing PVs between unrelated LVs. This is a test
that cluster-verify correctly report such cases.

Signed-off-by: Bernardo Dal Seno <bdalseno@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 qa/ganeti-qa.py  |  2 ++
 qa/qa_cluster.py | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index f4c678561..9a207ce85 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -468,6 +468,8 @@ def RunExclusiveStorageTests():
     qa_cluster.TestExclStorSingleNode(node)
 
     qa_cluster.TestSetExclStorCluster(True)
+    qa_cluster.TestExclStorSharedPv(node)
+
     if qa_config.TestEnabled("instance-add-plain-disk"):
       # Make sure that the cluster doesn't have any pre-existing problem
       qa_cluster.AssertClusterVerify()
diff --git a/qa/qa_cluster.py b/qa/qa_cluster.py
index 1960acd72..aeb4d43bf 100644
--- a/qa/qa_cluster.py
+++ b/qa/qa_cluster.py
@@ -674,3 +674,21 @@ def TestExclStorSingleNode(node):
   AssertClusterVerify(fail=True, errors=[constants.CV_EGROUPMIXEDESFLAG])
   AssertCommand(_BuildSetESCmd("default", node_name))
   AssertClusterVerify()
+
+
+def TestExclStorSharedPv(node):
+  """cluster-verify reports LVs that share the same PV with exclusive_storage.
+
+  """
+  vgname = qa_config.get("vg-name", constants.DEFAULT_VG)
+  lvname1 = _QA_LV_PREFIX + "vol1"
+  lvname2 = _QA_LV_PREFIX + "vol2"
+  node_name = node["primary"]
+  AssertCommand(["lvcreate", "-L1G", "-n", lvname1, vgname], node=node_name)
+  AssertClusterVerify(fail=True, errors=[constants.CV_ENODEORPHANLV])
+  AssertCommand(["lvcreate", "-L1G", "-n", lvname2, vgname], node=node_name)
+  AssertClusterVerify(fail=True, errors=[constants.CV_ENODELVM,
+                                         constants.CV_ENODEORPHANLV])
+  AssertCommand(["lvremove", "-f", "/".join([vgname, lvname1])], node=node_name)
+  AssertCommand(["lvremove", "-f", "/".join([vgname, lvname2])], node=node_name)
+  AssertClusterVerify()
-- 
GitLab