mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 1 | # This is used directly by server/tests/barriertest/control.srv |
| 2 | |
| 3 | import logging, time |
mbligh | f20b9cd | 2008-06-09 18:07:13 +0000 | [diff] [blame] | 4 | from autotest_lib.client.bin import test |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 5 | from autotest_lib.client.common_lib import barrier, error |
mbligh | e1417fa | 2007-12-10 16:55:13 +0000 | [diff] [blame] | 6 | |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 7 | |
mbligh | e1417fa | 2007-12-10 16:55:13 +0000 | [diff] [blame] | 8 | class barriertest(test.test): |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 9 | version = 2 |
mbligh | e1417fa | 2007-12-10 16:55:13 +0000 | [diff] [blame] | 10 | |
| 11 | |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 12 | def run_once(self, our_addr, hostnames, master, timeout=120): |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 13 | # A reusable local server as we're using multiple barriers in one test. |
| 14 | server = barrier.listen_server() |
mbligh | e1417fa | 2007-12-10 16:55:13 +0000 | [diff] [blame] | 15 | |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 16 | # Basic barrier rendezvous test. |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 17 | self.job.barrier(our_addr, 'First', timeout=timeout, |
| 18 | listen_server=server).rendezvous(*hostnames) |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 19 | logging.info('1. rendezvous "First" complete.') |
| 20 | time.sleep(2) |
mbligh | e74782b | 2008-01-03 01:58:17 +0000 | [diff] [blame] | 21 | |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 22 | # A rendezvous_servers using a different master than the default. |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 23 | self.job.barrier(our_addr, 'Second', timeout=timeout, |
| 24 | listen_server=server |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 25 | ).rendezvous_servers(hostnames[-1], *hostnames[:-1]) |
| 26 | logging.info('2. rendezvous_servers "Second" complete.') |
| 27 | time.sleep(2) |
mbligh | e74782b | 2008-01-03 01:58:17 +0000 | [diff] [blame] | 28 | |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 29 | # A regular rendezvous, this time testing the abort functionality. |
| 30 | try: |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 31 | self.job.barrier(our_addr, 'WillAbort', timeout=timeout, |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 32 | listen_server=server |
| 33 | ).rendezvous(abort=True, *hostnames) |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 34 | except error.BarrierAbortError: |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 35 | pass |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 36 | 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) |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 41 | else: |
| 42 | raise error.TestFail('Explicit barrier rendezvous abort failed.') |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 43 | logging.info('3. rendezvous(abort=True) complete.') |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 44 | time.sleep(2) |
mbligh | e1417fa | 2007-12-10 16:55:13 +0000 | [diff] [blame] | 45 | |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 46 | # Now attempt a rendezvous_servers that also includes the server. |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 47 | self.job.barrier(our_addr, 'FinalSync', timeout=timeout, |
| 48 | listen_server=server |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 49 | ).rendezvous_servers(master, *hostnames) |
mbligh | 999fb13 | 2010-04-23 17:22:03 +0000 | [diff] [blame] | 50 | 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.') |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 68 | time.sleep(2) |
mbligh | e1417fa | 2007-12-10 16:55:13 +0000 | [diff] [blame] | 69 | |
mbligh | 02fc0b9 | 2010-04-01 17:10:53 +0000 | [diff] [blame] | 70 | server.close() |