This patch creates a test case the runs the following steps: 1: start all nodes 2: isolate node n1 3: Kill corosync on n1 4: unisolate node n1 5: start corosync on n1 6: start cpg on all nodes 7: isolate node n1 8: Kill corosync on n1 9: unisolate node n1 10: start corosync on n1 11: Waiting for config change on n2
-Angus Signed-off-by: Angus Salkeld <[email protected]> --- cts/agents/cpg_test_agent.c | 3 +- cts/agents/net_breaker.sh | 4 +-- cts/corosync.py | 18 +++++++++++---- cts/corotests.py | 49 +++++++++++++++++++++++++++++++++++-------- 4 files changed, 56 insertions(+), 18 deletions(-) diff --git a/cts/agents/cpg_test_agent.c b/cts/agents/cpg_test_agent.c index 139b74b..1b6a067 100644 --- a/cts/agents/cpg_test_agent.c +++ b/cts/agents/cpg_test_agent.c @@ -464,7 +464,7 @@ static void context_test (int sock) char *cmp; cpg_context_set (cpg_handle, response); - cpg_context_get (cpg_handle, &cmp); + cpg_context_get (cpg_handle, (void**)&cmp); if (response != cmp) { snprintf (response, 100, "%s", FAIL_STR); } @@ -567,6 +567,7 @@ static void do_command (int sock, char* func, char*args[], int num_args) } sleep(1); retry_count++; + result = cpg_initialize (&cpg_handle, &callbacks); } cpg_fd_get (cpg_handle, &cpg_fd); diff --git a/cts/agents/net_breaker.sh b/cts/agents/net_breaker.sh index 216d948..5715498 100755 --- a/cts/agents/net_breaker.sh +++ b/cts/agents/net_breaker.sh @@ -10,9 +10,7 @@ then fi if [ $1 = "FixCommCmd" ] then - iptables -D INPUT -s $2 -j DROP >/dev/null 2>&1 - iptables -D OUTPUT -s $2 -j DROP >/dev/null 2>&1 - iptables -D INPUT -m pkttype --pkt-type multicast -j DROP + iptables -F >/dev/null 2>&1 fi exit 0 diff --git a/cts/corosync.py b/cts/corosync.py index bb818d6..64b096d 100644 --- a/cts/corosync.py +++ b/cts/corosync.py @@ -135,6 +135,7 @@ class corosync_flatiron(ClusterManager): ), "LogFileName" : Environment["LogFileName"], }) + self.start_cpg = True self.cpg_agent = {} self.confdb_agent = {} self.sam_agent = {} @@ -214,8 +215,13 @@ class corosync_flatiron(ClusterManager): self.debug('starting corosync on : ' + node) ret = ClusterManager.StartaCM(self, node) - if self.cpg_agent.has_key(node): - self.cpg_agent[node].restart() + if self.start_cpg: + if self.cpg_agent.has_key(node): + self.cpg_agent[node].restart() + else: + self.cpg_agent[node] = CpgTestAgent(node, self.Env) + self.cpg_agent[node].start() + if self.confdb_agent.has_key(node): self.confdb_agent[node].restart() if self.sam_agent.has_key(node): @@ -340,8 +346,9 @@ class TestAgentComponent(ScenarioComponent): if not CM.StataCM(node): raise RuntimeError ("corosync not up") - self.CM.cpg_agent[node] = CpgTestAgent(node, CM.Env) - self.CM.cpg_agent[node].start() + if self.CM.start_cpg: + self.CM.cpg_agent[node] = CpgTestAgent(node, CM.Env) + self.CM.cpg_agent[node].start() self.CM.confdb_agent[node] = ConfdbTestAgent(node, CM.Env) self.CM.confdb_agent[node].start() self.CM.sam_agent[node] = SamTestAgent(node, CM.Env) @@ -356,7 +363,8 @@ class TestAgentComponent(ScenarioComponent): '''Tear down (undo) the given ScenarioComponent''' self.CM = CM for node in self.Env["nodes"]: - self.CM.cpg_agent[node].stop() + if self.CM.cpg_agent.has_key(node): + self.CM.cpg_agent[node].stop() self.CM.confdb_agent[node].stop() self.CM.sam_agent[node].stop() if self.CM.votequorum_agent.has_key(node): diff --git a/cts/corotests.py b/cts/corotests.py index 7c7c481..a3d0dc7 100644 --- a/cts/corotests.py +++ b/cts/corotests.py @@ -34,6 +34,7 @@ Copyright (c) 2010 Red Hat, Inc. from UserDict import UserDict from cts.CTStests import * +from corosync import CpgTestAgent ################################################################### class CoroTest(CTSTest): @@ -47,6 +48,7 @@ class CoroTest(CTSTest): self.stop = StopTest(cm) self.config = {} self.need_all_up = True + self.CM.start_cpg = True def setup(self, node): ret = CTSTest.setup(self, node) @@ -117,15 +119,18 @@ class CpgConfigChangeBase(CoroTest): self.listener = None self.wobbly = None for n in self.CM.Env["nodes"]: - self.CM.cpg_agent[n].clean_start() - self.CM.cpg_agent[n].cpg_join(self.name) - if self.listener is None: - self.listener = n - elif self.wobbly is None: + if self.CM.start_cpg: + self.CM.cpg_agent[n].clean_start() + self.CM.cpg_agent[n].cpg_join(self.name) + if self.wobbly is None: self.wobbly = n + elif self.listener is None: + self.listener = n - self.wobbly_id = self.CM.cpg_agent[self.wobbly].cpg_local_get() - self.CM.cpg_agent[self.listener].record_config_events(truncate=True) + if self.CM.cpg_agent.has_key(self.wobbly): + self.wobbly_id = self.CM.cpg_agent[self.wobbly].cpg_local_get() + if self.CM.cpg_agent.has_key(self.listener): + self.CM.cpg_agent[self.listener].record_config_events(truncate=True) return ret @@ -330,6 +335,7 @@ class CpgCfgChgOnNodeRestart(CpgConfigChangeBase): def __init__(self, cm): CpgConfigChangeBase.__init__(self,cm) self.name="CpgCfgChgOnNodeRestart" + self.CM.start_cpg = False def config_valid(self, config): if config.has_key('totem/rrp_mode'): @@ -338,11 +344,36 @@ class CpgCfgChgOnNodeRestart(CpgConfigChangeBase): return True def failure_action(self): - self.CM.log("isolating node " + self.wobbly) + self.CM.log("2: isolating node " + self.wobbly) + self.CM.isolate_node(self.wobbly) + self.CM.log("3: Killing corosync on " + self.wobbly) + self.CM.rsh(self.wobbly, "killall -9 corosync") + self.CM.rsh(self.wobbly, "rm -f /var/run/corosync.pid") + self.CM.ShouldBeStatus[self.wobbly] = "down" + self.CM.log("4: unisolating node " + self.wobbly) + self.CM.unisolate_node (self.wobbly) + self.CM.log("5: starting corosync on " + self.wobbly) + self.CM.StartaCM(self.wobbly) + time.sleep(5) + self.CM.log("6: starting cpg on all nodes") + self.CM.start_cpg = True + for node in self.CM.Env["nodes"]: + self.CM.cpg_agent[node] = CpgTestAgent(node, self.CM.Env) + self.CM.cpg_agent[node].start() + self.CM.cpg_agent[node].cpg_join(self.name) + + self.wobbly_id = self.CM.cpg_agent[self.wobbly].cpg_local_get() + self.CM.cpg_agent[self.listener].record_config_events(truncate=True) + + self.CM.log("7: isolating node " + self.wobbly) self.CM.isolate_node(self.wobbly) - self.CM.log("Restarting corosync on " + self.wobbly) + self.CM.log("8: Killing corosync on " + self.wobbly) self.CM.rsh(self.wobbly, "killall -9 corosync") self.CM.rsh(self.wobbly, "rm -f /var/run/corosync.pid") + self.CM.ShouldBeStatus[self.wobbly] = "down" + self.CM.log("9: unisolating node " + self.wobbly) + self.CM.unisolate_node (self.wobbly) + self.CM.log("10: starting corosync on " + self.wobbly) self.CM.StartaCM(self.wobbly) def __call__(self, node): -- 1.6.6.1 _______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
