Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcb44b2b

Browse files
committed
use docker api to inject failures
1 parent236f81e commitcb44b2b

File tree

4 files changed

+60
-47
lines changed

4 files changed

+60
-47
lines changed

‎tests2/docker-entrypoint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ if [ "$1" = 'postgres' ]; then
6666
multimaster.ignore_tables_without_pk = 1
6767
multimaster.node_id =$NODE_ID
6868
multimaster.conn_strings = '$CONNSTRS'
69-
multimaster.heartbeat_recv_timeout =1000
69+
multimaster.heartbeat_recv_timeout =1100
7070
multimaster.heartbeat_send_timeout = 250
7171
multimaster.twopc_min_timeout = 200000
7272
EOF

‎tests2/lib/bank_client.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,16 @@ def bgrun(self):
195195
self.evloop_process=multiprocessing.Process(target=self.run,args=())
196196
self.evloop_process.start()
197197

198-
defget_status(self):
198+
# XXX: rename to start/get aggregation
199+
# XXX: introduce periodic report from client
200+
defget_status(self,print=True):
199201
# print('test: sending status request')
200202
self.parent_pipe.send('status')
201203
# print('test: awaitng status response')
202204
resp=self.parent_pipe.recv()
203205
# print('test: got status response')
206+
ifprint:
207+
MtmClient.print_aggregates(resp)
204208
returnresp
205209

206210
defstop(self):

‎tests2/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
psycopg2
22
aiopg
33
aioprocessing
4-
git+git://github.com/douglas/toxiproxy-python.git
4+
docker

‎tests2/test_recovery.py

Lines changed: 53 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
1+
#
2+
# Based on Aphyr's test for CockroachDB.
3+
#
4+
15
importunittest
26
importtime
37
importsubprocess
48
importdatetime
9+
importdocker
510

6-
fromtoxiproxyimportToxiproxy
711
fromlib.bank_clientimportMtmClient
12+
fromlib.failure_injectorimport*
813

14+
TEST_DURATION=10
15+
TEST_RECOVERY_TIME=10
916

1017
classRecoveryTest(unittest.TestCase):
1118
@classmethod
@@ -23,69 +30,71 @@ def setUpClass(self):
2330
],n_accounts=1000)
2431
self.client.bgrun()
2532

26-
# self.toxiproxy = Toxiproxy() #Toxiproxy(server_host="toxi")
27-
28-
2933
@classmethod
3034
deftearDownClass(self):
3135
print('tearDown')
3236
self.client.stop()
37+
# XXX: check nodes data identity here
38+
3339
# subprocess.check_call(['docker-compose','down'])
3440

35-
# def test_normal_operations(self):
36-
# print('### normalOpsTest ###')
41+
deftest_normal_operations(self):
42+
print('### normal_operations ###')
43+
44+
# nofailure here
45+
# clean aggregates
46+
self.client.get_status()
47+
48+
time.sleep(TEST_DURATION)
49+
aggs=self.client.get_status()
50+
51+
foragginaggs:
52+
self.assertTrue(aggs[agg]['finish']['commit']>0 )
53+
54+
# nofailure ends here
55+
self.client.get_status()
56+
57+
time.sleep(TEST_RECOVERY_TIME)
58+
aggs=self.client.get_status()
59+
60+
foragginaggs:
61+
self.assertTrue(aggs[agg]['finish']['commit']>0 )
3762

38-
# for i in range(3):
39-
# time.sleep(3)
40-
# aggs = self.client.get_status()
41-
# MtmClient.print_aggregates(aggs)
42-
# print(aggs)
43-
# for agg in aggs:
44-
# self.assertTrue( aggs[agg]['finish']['commit'] > 0 )
4563

4664
deftest_node_partition(self):
4765
print('### nodePartitionTest ###')
4866

49-
# print('### split node3 ###')
50-
# for proxy in ['rep31', 'rep32', 'rep23', 'rep13', 'arb31', 'arb32', 'arb23', 'arb13']:
51-
# self.toxiproxy.get_proxy(proxy).disable()
67+
failure=SingleNodePartition('node3')
5268

53-
# clear tx history
54-
self.client.get_status()
69+
# split one node
70+
failure.start()
71+
# clean aggregates
72+
self.client.get_status(print=False)
5573

56-
foriinrange(1000):
57-
print(i,datetime.datetime.now())
58-
time.sleep(3)
59-
aggs=self.client.get_status()
60-
MtmClient.print_aggregates(aggs)
61-
# self.assertTrue( aggs['transfer_0']['finish']['commit'] > 0 )
62-
# self.assertTrue( aggs['transfer_1']['finish']['commit'] > 0 )
63-
# self.assertTrue( aggs['transfer_2']['finish']['commit'] == 0 )
64-
self.assertTrue(aggs['sumtotal_0']['isolation']==0)
65-
self.assertTrue(aggs['sumtotal_1']['isolation']==0)
66-
self.assertTrue(aggs['sumtotal_2']['isolation']==0)
67-
68-
# print('### join node3 ###')
69-
# for proxy in ['rep31', 'rep32', 'rep23', 'rep13', 'arb31', 'arb32', 'arb23', 'arb13']:
70-
# self.toxiproxy.get_proxy(proxy).enable()
74+
time.sleep(TEST_DURATION)
75+
aggs=self.client.get_status()
76+
77+
self.assertTrue(aggs['transfer_0']['finish']['commit']>0 )
78+
self.assertTrue(aggs['transfer_1']['finish']['commit']>0 )
79+
self.assertTrue('commit'notinaggs['transfer_2']['finish'] )
80+
self.assertTrue(aggs['sumtotal_0']['isolation']==0)
81+
self.assertTrue(aggs['sumtotal_1']['isolation']==0)
82+
self.assertTrue(aggs['sumtotal_2']['isolation']==0)
7183

84+
# join splitted node
85+
failure.stop()
7286
# clear tx history
73-
self.client.get_status()
87+
self.client.get_status(print=False)
7488

75-
foriinrange(5):
76-
print(i,datetime.datetime.now())
77-
time.sleep(3)
78-
aggs=self.client.get_status()
79-
MtmClient.print_aggregates(aggs)
80-
self.assertTrue(aggs['sumtotal_0']['isolation']==0)
81-
self.assertTrue(aggs['sumtotal_1']['isolation']==0)
82-
self.assertTrue(aggs['sumtotal_2']['isolation']==0)
89+
time.sleep(TEST_RECOVERY_TIME)
90+
aggs=self.client.get_status()
8391

84-
# check that during last aggregation all nodes were working
8592
self.assertTrue(aggs['transfer_0']['finish']['commit']>0 )
8693
self.assertTrue(aggs['transfer_1']['finish']['commit']>0 )
8794
self.assertTrue(aggs['transfer_2']['finish']['commit']>0 )
88-
95+
self.assertTrue(aggs['sumtotal_0']['isolation']==0)
96+
self.assertTrue(aggs['sumtotal_1']['isolation']==0)
97+
self.assertTrue(aggs['sumtotal_2']['isolation']==0)
8998

9099

91100
subprocess.check_call(['blockade','join'])

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp