Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit bcbc076

Browse files
committed
test helpers
1 parent 8819813 commit bcbc076

File tree

3 files changed

+53
-35
lines changed

3 files changed

+53
-35
lines changed

contrib/mmts/tests2/lib/bank_client.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,10 @@ def status(self):
111111
while self.running:
112112
msg = yield from self.child_pipe.coro_recv()
113113
if msg == 'status':
114-
serialized_aggs = {}
114+
serialized_aggs = []
115115

116116
for conn_id, conn_aggs in self.aggregates.items():
117-
serialized_aggs[conn_id] = {}
117+
serialized_aggs.append({})
118118
for aggname, agg in conn_aggs.items():
119119
serialized_aggs[conn_id][aggname] = agg.as_dict()
120120
agg.clear_values()
@@ -224,9 +224,8 @@ def print_aggregates(cls, aggs):
224224
print(col, end="\t")
225225
print("\n", end="")
226226

227-
for conn_id in aggs.keys():
228-
for aggname in aggs[conn_id].keys():
229-
agg = aggs[conn_id][aggname]
227+
for conn_id, agg_conn in enumerate(aggs):
228+
for aggname, agg in agg_conn.items():
230229
print("Node %d: %s\t" % (conn_id + 1, aggname), end="")
231230
for col in columns:
232231
if isinstance(agg[col], float):

contrib/mmts/tests2/lib/failure_injector.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@
22

33
class FailureInjector(object):
44

5-
# def __init__(self):
6-
# self.docker_api = docker.Client()
5+
def __init__(self):
6+
self.docker_api = docker.Client()
77

88
def container_exec(self, node, command):
9-
self.docker_api = docker.Client()
109
exec_id = self.docker_api.exec_create(node, command, user='root')
1110
output = self.docker_api.exec_start(exec_id)
12-
self.docker_api.close()
13-
# print(command, ' -> ', output)
1411

1512

1613
class SingleNodePartition(FailureInjector):

contrib/mmts/tests2/test_recovery.py

+47-25
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,47 @@
1414
TEST_DURATION = 10
1515
TEST_RECOVERY_TIME = 20
1616

17-
class RecoveryTest(unittest.TestCase):
17+
class TestHelper(object):
18+
19+
def assertIsolation(self, aggs):
20+
isolated = True
21+
for conn_id, agg in enumerate(aggs):
22+
isolated = isolated and agg['sumtotal']['isolation'] == 0
23+
if not isolated:
24+
raise AssertionError('Isolation failure')
25+
26+
def assertCommits(self, aggs):
27+
commits = True
28+
for conn_id, agg in enumerate(aggs):
29+
commits = commits and 'commit' in agg['transfer']['finish']
30+
if not commits:
31+
raise AssertionError('No commits during aggregation interval')
32+
33+
def assertNoCommits(self, aggs):
34+
commits = True
35+
for conn_id, agg in enumerate(aggs):
36+
commits = commits and 'commit' in agg['transfer']['finish']
37+
if commits:
38+
raise AssertionError('There are commits during aggregation interval')
39+
40+
def performFailure(self, failure):
41+
failure.start()
42+
43+
self.client.clean_aggregates()
44+
time.sleep(TEST_DURATION)
45+
aggs_failure = self.client.get_aggregates()
46+
47+
failure.stop()
48+
49+
self.client.clean_aggregates()
50+
time.sleep(TEST_RECOVERY_TIME)
51+
aggs = self.client.get_aggregates()
52+
53+
return (aggs_failure, aggs)
54+
55+
56+
class RecoveryTest(unittest.TestCase, TestHelper):
57+
1858
@classmethod
1959
def setUpClass(self):
2060
# subprocess.check_call(['docker-compose','up',
@@ -58,32 +98,14 @@ def test_normal_operations(self):
5898
def test_node_partition(self):
5999
print('### nodePartitionTest ###')
60100

61-
failure = SingleNodePartition('node3')
62-
failure.start()
63-
64-
self.client.clean_aggregates()
65-
time.sleep(TEST_DURATION)
66-
aggs_failure = self.client.get_aggregates()
67-
68-
failure.stop()
101+
aggs_failure, aggs = self.performFailure(SingleNodePartition('node3'))
69102

70-
self.client.clean_aggregates()
71-
time.sleep(TEST_RECOVERY_TIME)
72-
aggs = self.client.get_aggregates()
103+
self.assertCommits(aggs_failure[:2])
104+
self.assertNoCommits(aggs_failure[2:])
105+
self.assertIsolation(aggs_failure)
73106

74-
self.assertTrue( 'commit' in aggs_failure[0]['transfer']['finish'] )
75-
self.assertTrue( 'commit' in aggs_failure[1]['transfer']['finish'] )
76-
self.assertTrue( 'commit' not in aggs_failure[2]['transfer']['finish'] )
77-
self.assertTrue( aggs_failure[0]['sumtotal']['isolation'] == 0)
78-
self.assertTrue( aggs_failure[1]['sumtotal']['isolation'] == 0)
79-
self.assertTrue( aggs_failure[2]['sumtotal']['isolation'] == 0)
80-
81-
self.assertTrue( 'commit' in aggs[0]['transfer']['finish'] )
82-
self.assertTrue( 'commit' in aggs[1]['transfer']['finish'] )
83-
self.assertTrue( 'commit' in aggs[2]['transfer']['finish'] )
84-
self.assertTrue( aggs[0]['sumtotal']['isolation'] == 0)
85-
self.assertTrue( aggs[1]['sumtotal']['isolation'] == 0)
86-
self.assertTrue( aggs[2]['sumtotal']['isolation'] == 0)
107+
self.assertCommits(aggs)
108+
self.assertIsolation(aggs)
87109

88110

89111
def test_edge_partition(self):

0 commit comments

Comments
 (0)