1*bbb1b6f9SApple OSS Distributions#!/usr/bin/python 2*bbb1b6f9SApple OSS Distributionsfrom __future__ import absolute_import, print_function 3*bbb1b6f9SApple OSS Distributionsimport socket 4*bbb1b6f9SApple OSS Distributionsimport time 5*bbb1b6f9SApple OSS Distributionsimport select 6*bbb1b6f9SApple OSS Distributionsimport sys 7*bbb1b6f9SApple OSS Distributions 8*bbb1b6f9SApple OSS Distributions_CONTROL_PORT = 17694 9*bbb1b6f9SApple OSS Distributions 10*bbb1b6f9SApple OSS Distributionsdef waitformsgs(client_sockets, msg): 11*bbb1b6f9SApple OSS Distributions client_sockets_set = set(client_sockets) 12*bbb1b6f9SApple OSS Distributions while len(client_sockets_set) > 0: 13*bbb1b6f9SApple OSS Distributions rl, _, _ = select.select(client_sockets_set, [], []) 14*bbb1b6f9SApple OSS Distributions for client_socket in rl: 15*bbb1b6f9SApple OSS Distributions sentmsg = client_socket.recv(1024) 16*bbb1b6f9SApple OSS Distributions if sentmsg == msg: 17*bbb1b6f9SApple OSS Distributions client_sockets_set.remove(client_socket) 18*bbb1b6f9SApple OSS Distributions 19*bbb1b6f9SApple OSS Distributionsdef main(num_clients, test_type, num_threads, job_size, args): 20*bbb1b6f9SApple OSS Distributions client_sockets = [] 21*bbb1b6f9SApple OSS Distributions control_socket = socket.socket() 22*bbb1b6f9SApple OSS Distributions control_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 23*bbb1b6f9SApple OSS Distributions control_socket.bind(("", _CONTROL_PORT)) 24*bbb1b6f9SApple OSS Distributions control_socket.listen(num_clients) 25*bbb1b6f9SApple OSS Distributions while(len(client_sockets)<num_clients): 26*bbb1b6f9SApple OSS Distributions client_socket, _ = control_socket.accept() 27*bbb1b6f9SApple OSS Distributions msg = "\0".join(["%s\0%d\0%d" % (test_type, num_threads, job_size)] + args) + "\0\0" 28*bbb1b6f9SApple OSS Distributions client_socket.send(msg) 29*bbb1b6f9SApple OSS Distributions client_sockets.append(client_socket) 30*bbb1b6f9SApple OSS Distributions 31*bbb1b6f9SApple OSS Distributions control_socket.close() 32*bbb1b6f9SApple OSS Distributions 33*bbb1b6f9SApple OSS Distributions waitformsgs(client_sockets, "Ready") 34*bbb1b6f9SApple OSS Distributions 35*bbb1b6f9SApple OSS Distributions start_time = time.time() 36*bbb1b6f9SApple OSS Distributions 37*bbb1b6f9SApple OSS Distributions for client_socket in client_sockets: 38*bbb1b6f9SApple OSS Distributions client_socket.shutdown(socket.SHUT_WR) 39*bbb1b6f9SApple OSS Distributions 40*bbb1b6f9SApple OSS Distributions waitformsgs(client_sockets, "Done") 41*bbb1b6f9SApple OSS Distributions 42*bbb1b6f9SApple OSS Distributions 43*bbb1b6f9SApple OSS Distributions for client_socket in client_sockets: 44*bbb1b6f9SApple OSS Distributions client_socket.close() 45*bbb1b6f9SApple OSS Distributions 46*bbb1b6f9SApple OSS Distributions end_time = time.time() 47*bbb1b6f9SApple OSS Distributions return end_time - start_time 48*bbb1b6f9SApple OSS Distributions 49*bbb1b6f9SApple OSS Distributionsdef usage(): 50*bbb1b6f9SApple OSS Distributions sys.stderr.write("usage: start_tests.py num_clients type threads size\n") 51*bbb1b6f9SApple OSS Distributions exit(1) 52*bbb1b6f9SApple OSS Distributions 53*bbb1b6f9SApple OSS Distributionsif __name__ == "__main__": 54*bbb1b6f9SApple OSS Distributions if len(sys.argv) < 5: 55*bbb1b6f9SApple OSS Distributions usage() 56*bbb1b6f9SApple OSS Distributions try: 57*bbb1b6f9SApple OSS Distributions num_clients = int(sys.argv[1]) 58*bbb1b6f9SApple OSS Distributions test_type = sys.argv[2] 59*bbb1b6f9SApple OSS Distributions num_threads = int(sys.argv[3]) 60*bbb1b6f9SApple OSS Distributions job_size = int(sys.argv[4]) 61*bbb1b6f9SApple OSS Distributions args = sys.argv[5:] 62*bbb1b6f9SApple OSS Distributions except ValueError: 63*bbb1b6f9SApple OSS Distributions usage() 64*bbb1b6f9SApple OSS Distributions 65*bbb1b6f9SApple OSS Distributions print(main(num_clients, test_type, num_threads, job_size, args)) 66