Blob Blame History Raw
From 94ebc967f2e74301ef5e10ed102832168503c7d9 Mon Sep 17 00:00:00 2001
From: Ken Gaillot <kgaillot@redhat.com>
Date: Thu, 1 Oct 2015 12:00:26 -0500
Subject: [PATCH] Test: CTS: get Reattach test working again and up-to-date

Prevously, Reattach relied on command lines being logged,
which 8dae683 removed. Now, it doesn't.

Previously, Reattach used the now-deprecated is-managed-default cluster option;
now, it uses the is-managed option in rsc_defaults.
---
 cts/CTStests.py | 59 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 29 insertions(+), 30 deletions(-)

diff --git a/cts/CTStests.py b/cts/CTStests.py
index ddd8c4a..e4207aa 100644
--- a/cts/CTStests.py
+++ b/cts/CTStests.py
@@ -1693,6 +1693,19 @@ class Reattach(CTSTest):
         self.stopall = SimulStopLite(cm)
         self.is_unsafe = 0 # Handled by canrunnow()
 
+    def _is_managed(self, node):
+        is_managed = self.rsh(node, "crm_attribute -t rsc_defaults -n is-managed -Q -G -d true", 1)
+        is_managed = is_managed[:-1] # Strip off the newline
+        return is_managed == "true"
+
+    def _set_unmanaged(self, node):
+        self.debug("Disable resource management")
+        self.rsh(node, "crm_attribute -t rsc_defaults -n is-managed -v false")
+
+    def _set_managed(self, node):
+        self.debug("Re-enable resource management")
+        self.rsh(node, "crm_attribute -t rsc_defaults -n is-managed -D")
+
     def setup(self, node):
         attempt = 0
         if not self.startall(None):
@@ -1717,17 +1730,11 @@ class Reattach(CTSTest):
         start = StartTest(self.CM)
         start(node)
 
-        is_managed = self.rsh(node, "crm_attribute -Q -G -t crm_config -n is-managed-default -d true", 1)
-        is_managed = is_managed[:-1] # Strip off the newline
-        if is_managed != "true":
-            self.logger.log("Attempting to re-enable resource management on %s (%s)" % (node, is_managed))
-            managed = self.create_watch(["is-managed-default"], 60)
-            managed.setwatch()
-
-            self.rsh(node, "crm_attribute -V -D -n is-managed-default")
-
-            if not managed.lookforall():
-                self.logger.log("Patterns not found: " + repr(managed.unmatched))
+        if not self._is_managed(node):
+            self.logger.log("Attempting to re-enable resource management on %s" % node)
+            self._set_managed(node)
+            self.CM.cluster_stable()
+            if not self._is_managed(node):
                 self.logger.log("Could not re-enable resource management")
                 return 0
 
@@ -1744,11 +1751,12 @@ class Reattach(CTSTest):
         self.incr("calls")
 
         pats = []
-        managed = self.create_watch(["is-managed-default"], 60)
+        # Conveniently, pengine will display this message when disabling management,
+        # even if fencing is not enabled, so we can rely on it.
+        managed = self.create_watch(["Delaying fencing operations"], 60)
         managed.setwatch()
 
-        self.debug("Disable resource management")
-        self.rsh(node, "crm_attribute -V -n is-managed-default -v false")
+        self._set_unmanaged(node)
 
         if not managed.lookforall():
             self.logger.log("Patterns not found: " + repr(managed.unmatched))
@@ -1767,37 +1775,28 @@ class Reattach(CTSTest):
         self.debug("Shutting down the cluster")
         ret = self.stopall(None)
         if not ret:
-            self.debug("Re-enable resource management")
-            self.rsh(node, "crm_attribute -V -D -n is-managed-default")
+            self._set_managed(node)
             return self.failure("Couldn't shut down the cluster")
 
         self.debug("Bringing the cluster back up")
         ret = self.startall(None)
         time.sleep(5) # allow ping to update the CIB
         if not ret:
-            self.debug("Re-enable resource management")
-            self.rsh(node, "crm_attribute -V -D -n is-managed-default")
+            self._set_managed(node)
             return self.failure("Couldn't restart the cluster")
 
         if self.local_badnews("ResourceActivity:", watch):
-            self.debug("Re-enable resource management")
-            self.rsh(node, "crm_attribute -V -D -n is-managed-default")
+            self._set_managed(node)
             return self.failure("Resources stopped or started during cluster restart")
 
         watch = self.create_watch(pats, 60, "StartupActivity")
         watch.setwatch()
 
-        managed = self.create_watch(["is-managed-default"], 60)
-        managed.setwatch()
-
-        self.debug("Re-enable resource management")
-        self.rsh(node, "crm_attribute -V -D -n is-managed-default")
-
-        if not managed.lookforall():
-            self.logger.log("Patterns not found: " + repr(managed.unmatched))
-            return self.failure("Resource management not enabled")
-
+        # Re-enable resource management (and verify it happened).
+        self._set_managed(node)
         self.CM.cluster_stable()
+        if not self._is_managed(node):
+            return self.failure("Could not re-enable resource management")
 
         # Ignore actions for STONITH resources
         ignore = []
-- 
1.8.3.1