-
Notifications
You must be signed in to change notification settings - Fork 84
/
Copy pathbarriertest.py
71 lines (60 loc) · 2.97 KB
/
barriertest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# This is used directly by server/tests/barriertest/control.srv
import logging
import time
from autotest.client import test
from autotest.client.shared import barrier, error
class barriertest(test.test):
version = 2
def run_once(self, our_addr, hostnames, master, timeout=120):
# A reusable local server as we're using multiple barriers in one test.
server = barrier.listen_server()
# Basic barrier rendezvous test.
self.job.barrier(our_addr, 'First', timeout=timeout,
listen_server=server).rendezvous(*hostnames)
logging.info('1. rendezvous "First" complete.')
time.sleep(2)
# A rendezvous_servers using a different master than the default.
self.job.barrier(our_addr, 'Second', timeout=timeout,
listen_server=server
).rendezvous_servers(hostnames[-1], *hostnames[:-1])
logging.info('2. rendezvous_servers "Second" complete.')
time.sleep(2)
# A regular rendezvous, this time testing the abort functionality.
try:
self.job.barrier(our_addr, 'WillAbort', timeout=timeout,
listen_server=server
).rendezvous(abort=True, *hostnames)
except error.BarrierAbortError:
pass
except error.BarrierError, e:
# We did get an error from the barrier, but was is acceptable or
# not? Site code may not be able to indicate an explicit abort.
self.job.record('WARN', None, 'barriertest',
'BarrierError %s instead of BarrierAbortError.' % e)
else:
raise error.TestFail('Explicit barrier rendezvous abort failed.')
logging.info('3. rendezvous(abort=True) complete.')
time.sleep(2)
# Now attempt a rendezvous_servers that also includes the server.
self.job.barrier(our_addr, 'FinalSync', timeout=timeout,
listen_server=server
).rendezvous_servers(master, *hostnames)
logging.info('4. rendezvous_servers "FinalSync" complete.')
time.sleep(2)
# rendezvous_servers, aborted from the master.
try:
self.job.barrier(our_addr, 'WillAbortServers', timeout=timeout,
listen_server=server
).rendezvous_servers(master, *hostnames)
except error.BarrierAbortError:
pass
except error.BarrierError, e:
# We did get an error from the barrier, but was is acceptable or
# not? Site code may not be able to indicate an explicit abort.
self.job.record('WARN', None, 'barriertest',
'BarrierError %s instead of BarrierAbortError.' % e)
else:
raise error.TestFail('Explicit barrier rendezvous abort failed.')
logging.info('5. rendezvous_servers(abort=True) complete.')
time.sleep(2)
server.close()