Repository: cassandra-dtest
Updated Branches:
  refs/heads/master 99c695e85 -> 2415aa0ef


make sure we don't depend on hard coded versions or order of output

Patch by marcuse; reviewed by Jay Zhuang for CASSANDRA-14610


Project: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/commit/2415aa0e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/tree/2415aa0e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/diff/2415aa0e

Branch: refs/heads/master
Commit: 2415aa0efeabba0f3a3bedc5ebdc3412e713b1e4
Parents: 99c695e
Author: Marcus Eriksson <marc...@apache.org>
Authored: Wed Oct 3 14:58:59 2018 +0200
Committer: Marcus Eriksson <marc...@apache.org>
Committed: Mon Oct 8 06:54:19 2018 +0200

----------------------------------------------------------------------
 nodetool_test.py | 101 +++++++++++++++++++++++++++++++++-----------------
 1 file changed, 66 insertions(+), 35 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra-dtest/blob/2415aa0e/nodetool_test.py
----------------------------------------------------------------------
diff --git a/nodetool_test.py b/nodetool_test.py
index d6446e9..fb73d30 100644
--- a/nodetool_test.py
+++ b/nodetool_test.py
@@ -340,9 +340,9 @@ class TestNodetool(Tester):
         @expected_result This test invokes nodetool describecluster and 
matches the output with the expected one
         """
         cluster = self.cluster
-        cluster.populate([2, 3, 1]).start(wait_for_binary_proto=True)
+        cluster.populate([1, 2, 1]).start(wait_for_binary_proto=True)
 
-        node1_dc1, node2_dc1, node1_dc2, node2_dc2, node3_dc2, node1_dc3 = 
cluster.nodelist()
+        node1_dc1, node1_dc2, node2_dc2, node1_dc3 = cluster.nodelist()
 
         session_dc1 = self.patient_cql_connection(node1_dc1)
         session_dc1.execute("create KEYSPACE ks1 WITH replication = {'class': 
'NetworkTopologyStrategy', 'dc1': 3, 'dc2':5, 'dc3':1}")
@@ -350,47 +350,78 @@ class TestNodetool(Tester):
         session_dc3 = self.patient_cql_connection(node1_dc3)
         session_dc3.execute("create KEYSPACE ks2 WITH replication = {'class': 
'NetworkTopologyStrategy', 'dc1': 3, 'dc2':5, 'dc3':1}")
 
-        out_node1_dc1, err, _ = node1_dc1.nodetool('describecluster')
-        assert 0 == len(err), err
-
-        out_node2_dc1, err, _ = node2_dc1.nodetool('describecluster')
-        assert 0 == len(err), err
-        assert out_node1_dc1 == out_node2_dc1
+        all_nodes = cluster.nodelist()
 
-        out_node1_dc2, err, _ = node1_dc2.nodetool('describecluster')
-        assert 0 == len(err), err
-        assert out_node1_dc1 == out_node1_dc2
+        out_node1_dc1, node1_dc1_sorted = self._describe(all_nodes.pop())
 
-        out_node2_dc2, err, _ = node2_dc2.nodetool('describecluster')
-        assert 0 == len(err), err
-        assert out_node1_dc1 == out_node2_dc2
-
-        out_node2_dc3, err, _ = node3_dc2.nodetool('describecluster')
-        assert 0 == len(err), err
-        assert out_node1_dc1 == out_node2_dc3
-
-        out_node1_dc3, err, _ = node1_dc3.nodetool('describecluster')
-        assert 0 == len(err), err
-        assert out_node1_dc1 == out_node1_dc3
+        for node in all_nodes:
+            out, out_sorted = self._describe(node)
+            assert node1_dc1_sorted == out_sorted
 
         logger.debug(out_node1_dc1)
-        assert 'Live: 6' in out_node1_dc1
+        assert 'Live: 4' in out_node1_dc1
         assert 'Joining: 0' in out_node1_dc1
         assert 'Moving: 0' in out_node1_dc1
         assert 'Leaving: 0' in out_node1_dc1
         assert 'Unreachable: 0' in out_node1_dc1
         assert 'Data Centers:' in out_node1_dc1
-        assert 'dc1 #Nodes: 2 #Down: 0' in out_node1_dc1
-        assert 'dc2 #Nodes: 3 #Down: 0' in out_node1_dc1
+        assert 'dc1 #Nodes: 1 #Down: 0' in out_node1_dc1
+        assert 'dc2 #Nodes: 2 #Down: 0' in out_node1_dc1
         assert 'dc3 #Nodes: 1 #Down: 0' in out_node1_dc1
-        assert 'Database versions:' in out_node1_dc1
-        assert '4.0.0: [127.0.0.6:7000, 127.0.0.5:7000, 127.0.0.4:7000, 
127.0.0.3:7000, 127.0.0.2:7000, 127.0.0.1:7000]' in out_node1_dc1
         assert 'Keyspaces:' in out_node1_dc1
-        assert 'system_schema -> Replication class: LocalStrategy {}' in 
out_node1_dc1
-        assert 'system -> Replication class: LocalStrategy {}' in out_node1_dc1
-        assert 'system_traces -> Replication class: SimpleStrategy 
{replication_factor=2}' in out_node1_dc1
-        assert 'system_distributed -> Replication class: SimpleStrategy 
{replication_factor=3}' in out_node1_dc1
-        assert 'system_auth -> Replication class: SimpleStrategy 
{replication_factor=1}' in out_node1_dc1
-        assert 'ks1 -> Replication class: NetworkTopologyStrategy {dc2=5, 
dc1=3, dc3=1}' in out_node1_dc1
-        assert 'ks2 -> Replication class: NetworkTopologyStrategy {dc2=5, 
dc1=3, dc3=1}' in out_node1_dc1
-        assert 'Cluster Information:' in out_node1_dc1
+
+        expected_keyspaces = [('system_schema', 'LocalStrategy', {''}),
+                              ('system', 'LocalStrategy', {''}),
+                              ('system_traces', 'SimpleStrategy', 
{'replication_factor=2'}),
+                              ('system_distributed', 'SimpleStrategy', 
{'replication_factor=3'}),
+                              ('system_auth', 'SimpleStrategy', 
{'replication_factor=1'}),
+                              ('ks1', 'NetworkTopologyStrategy', 
{'dc1=3','dc2=5','dc3=1'}),
+                              ('ks2', 'NetworkTopologyStrategy', 
{'dc1=3','dc2=5','dc3=1'})]
+
+        for (ks, strategy, _) in expected_keyspaces:
+            assert "{} -> Replication class: {}".format(ks, strategy) in 
out_node1_dc1 # replication factor is verified below
+
+        # now check db versions & replication factor:
+        # Database versions:
+        #       4.0.0: [127.0.0.6:7000, 127.0.0.5:7000, 127.0.0.4:7000, 
127.0.0.3:7000, 127.0.0.2:7000, 127.0.0.1:7000]
+
+        lines = out_node1_dc1.splitlines()
+        rex = r'(\S+)\s\[(.*)\]'
+        found_keyspaces = False
+        found_database = False
+        verified_rfs = 0
+        for i in range(0, len(lines)):
+            if 'Keyspaces' in lines[i]:
+                found_keyspaces = True
+                for x in range(i+1, len(lines)):
+                    for (ks, strategy, replication) in expected_keyspaces:
+                        if "{} ->".format(ks) in lines[x]:
+                            verified_rfs += 1
+                            assert strategy in lines[x]
+                            assert replication == 
self._get_replication(lines[x])
+
+            if 'Database versions:' in lines[i]:
+                found_database = True
+                m = re.search(rex, lines[i+1])
+                # group(1) is the version, and all nodes are on the same 
version
+                assert "{}".format(node1_dc1.get_cassandra_version()) in 
m.group(1)
+                nodestring = m.group(2)
+                for n in cluster.nodelist():
+                    assert n.address_and_port() in nodestring
+
+        assert found_keyspaces
+        assert found_database
+        assert verified_rfs == len(expected_keyspaces)
+
+    def _get_replication(self, line):
+        # ks1 -> Replication class: NetworkTopologyStrategy {dc2=5, dc1=3, 
dc3=1}
+        repl_rex = r'{(.*)}'
+        repl_m = re.search(repl_rex, line)
+        return {x.strip() for x in repl_m.group(1).split(",")}
+
+    def _describe(self, node):
+        node_describe, err, _ = node.nodetool('describecluster')
+        assert 0 == len(err), err
+        out_sorted = node_describe.split()
+        out_sorted.sort()
+        return (node_describe, out_sorted)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to