11
11
12
12
from lib .bank_client import MtmClient
13
13
from lib .failure_injector import *
14
-
15
- TEST_WARMING_TIME = 5
16
- TEST_DURATION = 10
17
- TEST_RECOVERY_TIME = 30
18
- TEST_SETUP_TIME = 20
19
- TEST_STOP_DELAY = 5
20
-
21
- class TestHelper (object ):
22
-
23
- def assertIsolation (self , aggs ):
24
- isolated = True
25
- for conn_id , agg in enumerate (aggs ):
26
- isolated = isolated and agg ['sumtotal' ]['isolation' ] == 0
27
- if not isolated :
28
- raise AssertionError ('Isolation failure' )
29
-
30
- def assertCommits (self , aggs ):
31
- commits = True
32
- for conn_id , agg in enumerate (aggs ):
33
- commits = commits and 'commit' in agg ['transfer' ]['finish' ]
34
- if not commits :
35
- print ('No commits during aggregation interval' )
36
- # time.sleep(100000)
37
- raise AssertionError ('No commits during aggregation interval' )
38
-
39
- def assertNoCommits (self , aggs ):
40
- commits = True
41
- for conn_id , agg in enumerate (aggs ):
42
- commits = commits and 'commit' in agg ['transfer' ]['finish' ]
43
- if commits :
44
- raise AssertionError ('There are commits during aggregation interval' )
45
-
46
- def performFailure (self , failure ):
47
-
48
- time .sleep (TEST_WARMING_TIME )
49
-
50
- print ('Simulate failure at ' ,datetime .datetime .utcnow ())
51
-
52
- failure .start ()
53
-
54
- self .client .clean_aggregates ()
55
- time .sleep (TEST_DURATION )
56
- aggs_failure = self .client .get_aggregates ()
57
-
58
- failure .stop ()
59
-
60
- print ('Eliminate failure at ' ,datetime .datetime .utcnow ())
61
-
62
- self .client .clean_aggregates ()
63
- time .sleep (TEST_RECOVERY_TIME )
64
- aggs = self .client .get_aggregates ()
65
-
66
- return (aggs_failure , aggs )
67
-
14
+ from lib .test_helper import *
68
15
69
16
class RecoveryTest (unittest .TestCase , TestHelper ):
70
17
@@ -124,7 +71,8 @@ def test_normal_operations(self):
124
71
def test_node_partition (self ):
125
72
print ('### test_node_partition ###' )
126
73
127
- aggs_failure , aggs = self .performFailure (SingleNodePartition ('node3' ))
74
+ aggs_failure , aggs = self .performFailure (SingleNodePartition ('node3' ),
75
+ node_wait_for_online = "dbname=regression user=postgres host=127.0.0.1 port=15434" , stop_load = True )
128
76
129
77
self .assertCommits (aggs_failure [:2 ])
130
78
self .assertNoCommits (aggs_failure [2 :])
@@ -148,7 +96,8 @@ def test_edge_partition(self):
148
96
def test_node_restart (self ):
149
97
print ('### test_node_restart ###' )
150
98
151
- aggs_failure , aggs = self .performFailure (RestartNode ('node3' ))
99
+ aggs_failure , aggs = self .performFailure (RestartNode ('node3' ),
100
+ node_wait_for_online = "dbname=regression user=postgres host=127.0.0.1 port=15434" , stop_load = True )
152
101
153
102
self .assertCommits (aggs_failure [:2 ])
154
103
self .assertNoCommits (aggs_failure [2 :])
@@ -160,7 +109,8 @@ def test_node_restart(self):
160
109
def test_node_crash (self ):
161
110
print ('### test_node_crash ###' )
162
111
163
- aggs_failure , aggs = self .performFailure (CrashRecoverNode ('node3' ))
112
+ aggs_failure , aggs = self .performFailure (CrashRecoverNode ('node3' ),
113
+ node_wait_for_online = "dbname=regression user=postgres host=127.0.0.1 port=15434" , stop_load = True )
164
114
165
115
self .assertCommits (aggs_failure [:2 ])
166
116
self .assertNoCommits (aggs_failure [2 :])
@@ -172,7 +122,8 @@ def test_node_crash(self):
172
122
def test_node_bicrash (self ):
173
123
print ('### test_node_bicrash ###' )
174
124
175
- aggs_failure , aggs = self .performFailure (CrashRecoverNode ('node3' ))
125
+ aggs_failure , aggs = self .performFailure (CrashRecoverNode ('node3' ),
126
+ node_wait_for_online = "dbname=regression user=postgres host=127.0.0.1 port=15434" , stop_load = True )
176
127
177
128
self .assertCommits (aggs_failure [:2 ])
178
129
self .assertNoCommits (aggs_failure [2 :])
@@ -181,10 +132,11 @@ def test_node_bicrash(self):
181
132
self .assertCommits (aggs )
182
133
self .assertIsolation (aggs )
183
134
184
- aggs_failure , aggs = self .performFailure (CrashRecoverNode ('node3' ))
135
+ aggs_failure , aggs = self .performFailure (CrashRecoverNode ('node1' ),
136
+ node_wait_for_online = "dbname=regression user=postgres host=127.0.0.1 port=15432" , stop_load = True )
185
137
186
- self .assertCommits (aggs_failure [: 2 ])
187
- self .assertNoCommits (aggs_failure [2 :])
138
+ self .assertNoCommits (aggs_failure [0 : 1 ]) # [1]
139
+ self .assertCommits (aggs_failure [1 :]) # [2, 3]
188
140
self .assertIsolation (aggs_failure )
189
141
190
142
self .assertCommits (aggs )
0 commit comments