blob: e3bd9e35a303cb7c80c11255238f49709f9807a8 [file] [log] [blame]
mbligh02fc0b92010-04-01 17:10:53 +00001# This is used directly by server/tests/barriertest/control.srv
2
3import logging, time
mblighf20b9cd2008-06-09 18:07:13 +00004from autotest_lib.client.bin import test
mbligh999fb132010-04-23 17:22:03 +00005from autotest_lib.client.common_lib import barrier, error
mblighe1417fa2007-12-10 16:55:13 +00006
mbligh02fc0b92010-04-01 17:10:53 +00007
mblighe1417fa2007-12-10 16:55:13 +00008class barriertest(test.test):
mbligh02fc0b92010-04-01 17:10:53 +00009 version = 2
mblighe1417fa2007-12-10 16:55:13 +000010
11
mbligh999fb132010-04-23 17:22:03 +000012 def run_once(self, our_addr, hostnames, master, timeout=120):
mbligh02fc0b92010-04-01 17:10:53 +000013 # A reusable local server as we're using multiple barriers in one test.
14 server = barrier.listen_server()
mblighe1417fa2007-12-10 16:55:13 +000015
mbligh02fc0b92010-04-01 17:10:53 +000016 # Basic barrier rendezvous test.
mbligh999fb132010-04-23 17:22:03 +000017 self.job.barrier(our_addr, 'First', timeout=timeout,
18 listen_server=server).rendezvous(*hostnames)
mbligh02fc0b92010-04-01 17:10:53 +000019 logging.info('1. rendezvous "First" complete.')
20 time.sleep(2)
mblighe74782b2008-01-03 01:58:17 +000021
mbligh02fc0b92010-04-01 17:10:53 +000022 # A rendezvous_servers using a different master than the default.
mbligh999fb132010-04-23 17:22:03 +000023 self.job.barrier(our_addr, 'Second', timeout=timeout,
24 listen_server=server
mbligh02fc0b92010-04-01 17:10:53 +000025 ).rendezvous_servers(hostnames[-1], *hostnames[:-1])
26 logging.info('2. rendezvous_servers "Second" complete.')
27 time.sleep(2)
mblighe74782b2008-01-03 01:58:17 +000028
mbligh02fc0b92010-04-01 17:10:53 +000029 # A regular rendezvous, this time testing the abort functionality.
30 try:
mbligh999fb132010-04-23 17:22:03 +000031 self.job.barrier(our_addr, 'WillAbort', timeout=timeout,
mbligh02fc0b92010-04-01 17:10:53 +000032 listen_server=server
33 ).rendezvous(abort=True, *hostnames)
mbligh999fb132010-04-23 17:22:03 +000034 except error.BarrierAbortError:
mbligh02fc0b92010-04-01 17:10:53 +000035 pass
mbligh999fb132010-04-23 17:22:03 +000036 except error.BarrierError, e:
37 # We did get an error from the barrier, but was is acceptable or
38 # not? Site code may not be able to indicate an explicit abort.
39 self.job.record('WARN', None, 'barriertest',
40 'BarrierError %s instead of BarrierAbortError.' % e)
mbligh02fc0b92010-04-01 17:10:53 +000041 else:
42 raise error.TestFail('Explicit barrier rendezvous abort failed.')
mbligh999fb132010-04-23 17:22:03 +000043 logging.info('3. rendezvous(abort=True) complete.')
mbligh02fc0b92010-04-01 17:10:53 +000044 time.sleep(2)
mblighe1417fa2007-12-10 16:55:13 +000045
mbligh02fc0b92010-04-01 17:10:53 +000046 # Now attempt a rendezvous_servers that also includes the server.
mbligh999fb132010-04-23 17:22:03 +000047 self.job.barrier(our_addr, 'FinalSync', timeout=timeout,
48 listen_server=server
mbligh02fc0b92010-04-01 17:10:53 +000049 ).rendezvous_servers(master, *hostnames)
mbligh999fb132010-04-23 17:22:03 +000050 logging.info('4. rendezvous_servers "FinalSync" complete.')
51 time.sleep(2)
52
53 # rendezvous_servers, aborted from the master.
54 try:
55 self.job.barrier(our_addr, 'WillAbortServers', timeout=timeout,
56 listen_server=server
57 ).rendezvous_servers(master, *hostnames)
58 except error.BarrierAbortError:
59 pass
60 except error.BarrierError, e:
61 # We did get an error from the barrier, but was is acceptable or
62 # not? Site code may not be able to indicate an explicit abort.
63 self.job.record('WARN', None, 'barriertest',
64 'BarrierError %s instead of BarrierAbortError.' % e)
65 else:
66 raise error.TestFail('Explicit barrier rendezvous abort failed.')
67 logging.info('5. rendezvous_servers(abort=True) complete.')
mbligh02fc0b92010-04-01 17:10:53 +000068 time.sleep(2)
mblighe1417fa2007-12-10 16:55:13 +000069
mbligh02fc0b92010-04-01 17:10:53 +000070 server.close()