Index: server/tests/barriertest_2client/control.srv |
diff --git a/server/tests/barriertest_2client/control.srv b/server/tests/barriertest_2client/control.srv |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d6a70bb0685e8845316cd186c64daa2c09312bb5 |
--- /dev/null |
+++ b/server/tests/barriertest_2client/control.srv |
@@ -0,0 +1,78 @@ |
+AUTHOR = "gps@google.com (Gregory P. Smith)" |
+TIME = "SHORT" |
+NAME = "barrier_2client" |
+TEST_CATEGORY = "Functional" |
+TEST_CLASS = 'Network' |
+TEST_TYPE = "Server" |
+EXPERIMENTAL = True # This is functional a test of autotest itself. |
+SYNC_COUNT = 2 |
+DOC = """ |
+A functional test of autotest's Barrier mechanisms for synchronizing |
+events between two clients without the help of the server. |
+""" |
+ |
+from autotest_lib.server import utils |
+ |
+def run(pair): |
+ logging.info('Running on %s and %s', pair[0], pair[1]) |
+ host_objs = [hosts.create_host(machine) for machine in pair] |
+ host_at_objs = [autotest.Autotest(host) for host in host_objs] |
+ |
+ client_control_template = """ |
+import logging, platform, socket, traceback |
+try: |
+ client_hostnames = %r |
+ master_hostname = client_hostnames[0] |
+ client_hostname = client_hostnames[1] |
+ |
+ logging.info('Testing hostname only barrier') |
+ barrier = job.barrier(platform.node(), 'barriertest_2client', 120) |
+ logging.info('rendezvous-ing') |
+ barrier.rendezvous(master_hostname, client_hostname) |
+ logging.info('done.') |
+ |
+ logging.info('Testing local identifier barrier') |
+ barrier = job.barrier(platform.node() + '#id0', 'barriertest_2client', 120) |
+ logging.info('rendezvous-ing') |
+ barrier.rendezvous(master_hostname + '#id0', |
+ client_hostname + '#id0') |
+ logging.info('done.') |
+ |
+ logging.info('Testing IP@ barrier') |
+ barrier = job.barrier(socket.gethostbyname(platform.node()), |
+ 'barriertest_2client', 120) |
+ logging.info('rendezvous-ing') |
+ barrier.rendezvous(socket.gethostbyname(master_hostname), |
+ socket.gethostbyname(client_hostname)) |
+ logging.info('done.') |
+ |
+ logging.info('Testing IP@ barrier with ids') |
+ barrier = job.barrier(socket.gethostbyname(platform.node()) + '#42', |
+ 'barriertest_2client', 120) |
+ logging.info('rendezvous-ing') |
+ barrier.rendezvous(socket.gethostbyname(master_hostname) + '#42', |
+ socket.gethostbyname(client_hostname) + '#42') |
+ logging.info('done.') |
+except: |
+ traceback.print_exc() |
+ raise |
+""" |
+ client_controls = [client_control_template % (pair,) for host in host_objs] |
+ |
+ subcommand_list = [] |
+ for host, host_at, control in zip(host_objs, host_at_objs, client_controls): |
+ subcommand_list.append(subcommand(host_at.run, |
+ (control, host.hostname))) |
+ |
+ parallel(subcommand_list) |
+ |
+ |
+# grab the pairs (and failures) |
+(pairs, failures) = utils.form_ntuples_from_machines(machines, 2) |
+ |
+# log the failures |
+for failure in failures: |
+ job.record("FAIL", failure[0], "barrier_2client", failure[1]) |
+ |
+# now run through each pair and run |
+job.parallel_simple(run, pairs, log=False) |