15 """Manage PHP child processes for the main PHP xDS Interop client"""
28 if __name__ ==
'__main__':
29 parser = argparse.ArgumentParser()
30 parser.add_argument(
'--tmp_file1', nargs=
'?', default=
'')
31 parser.add_argument(
'--tmp_file2', nargs=
'?', default=
'')
32 parser.add_argument(
'--bootstrap_path', nargs=
'?', default=
'')
33 args = parser.parse_args()
37 client_env = dict(os.environ)
38 client_env[
'GRPC_XDS_BOOTSTRAP'] = args.bootstrap_path
42 f1 =
open(args.tmp_file1,
'r+')
43 fcntl.flock(f1, fcntl.LOCK_EX)
49 if key.startswith(
'server_address'):
50 if not server_address:
51 server_address = key[15:]
52 elif not key
in rpcs_started:
55 items = key.split(
'|')
58 timeout_sec = items[3]
59 if items[1] ==
'UnaryCall':
60 p = subprocess.Popen([
61 'php',
'-d',
'extension=grpc.so',
'-d',
62 'extension=pthreads.so',
63 'src/php/tests/interop/xds_unary_call.php',
64 '--server=' + server_address,
'--num=' +
str(num),
65 '--metadata=' + metadata,
'--timeout_sec=' + timeout_sec
68 elif items[1] ==
'EmptyCall':
69 p = subprocess.Popen([
70 'php',
'-d',
'extension=grpc.so',
'-d',
71 'extension=pthreads.so',
72 'src/php/tests/interop/xds_empty_call.php',
73 '--server=' + server_address,
'--num=' +
str(num),
74 '--metadata=' + metadata,
'--timeout_sec=' + timeout_sec
79 rpcs_started.append(key)
80 open_processes[key] = p
82 fcntl.flock(f1, fcntl.LOCK_UN)
85 f2 =
open(args.tmp_file2,
'a')
86 fcntl.flock(f2, fcntl.LOCK_EX)
88 for key, process
in open_processes.items():
89 result = process.poll()
90 if result
is not None:
93 f2.write(key +
',' +
str(process.returncode) +
"\n")
94 keys_to_delete.append(key)
95 for key
in keys_to_delete:
96 del open_processes[key]
97 fcntl.flock(f2, fcntl.LOCK_UN)