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

Lines changed: 4 additions & 5 deletions
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

Lines changed: 2 additions & 5 deletions
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

Lines changed: 47 additions & 25 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy