| # This is used directly by server/tests/barriertest/control.srv |
| |
| import logging, time |
| from autotest_lib.client.bin import test |
| from autotest_lib.client.common_lib 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() |