xref: /aosp_15_r20/external/aws-crt-java/integration-testing/java_elasticurl_runner.py (revision 3c7ae9de214676c52d19f01067dc1a404272dc11)
1*3c7ae9deSAndroid Build Coastguard Workerimport sys
2*3c7ae9deSAndroid Build Coastguard Workerimport os
3*3c7ae9deSAndroid Build Coastguard Workerimport subprocess
4*3c7ae9deSAndroid Build Coastguard Workerimport shlex
5*3c7ae9deSAndroid Build Coastguard Worker
6*3c7ae9deSAndroid Build Coastguard WorkerTIMEOUT = 100
7*3c7ae9deSAndroid Build Coastguard Worker# Runner for elasticurl integration tests
8*3c7ae9deSAndroid Build Coastguard Worker
9*3c7ae9deSAndroid Build Coastguard Workermvn_args = " ".join(map(shlex.quote, sys.argv[1:]))
10*3c7ae9deSAndroid Build Coastguard Worker
11*3c7ae9deSAndroid Build Coastguard Workerjava_command = ['mvn', '-e', 'exec:java', '-Dexec.classpathScope=\"test\"',
12*3c7ae9deSAndroid Build Coastguard Worker                '-Dexec.mainClass=\"software.amazon.awssdk.crt.test.Elasticurl\"', '-Dexec.args=\"{}\"'.format(mvn_args)]
13*3c7ae9deSAndroid Build Coastguard Worker
14*3c7ae9deSAndroid Build Coastguard Workerif os.name == 'nt':
15*3c7ae9deSAndroid Build Coastguard Worker    # Windows uses mvn.cmd instead
16*3c7ae9deSAndroid Build Coastguard Worker    java_command[0] = 'mvn.cmd'
17*3c7ae9deSAndroid Build Coastguard Workercommand_string = " ".join(java_command)
18*3c7ae9deSAndroid Build Coastguard Worker
19*3c7ae9deSAndroid Build Coastguard Worker
20*3c7ae9deSAndroid Build Coastguard Workerdef run_command(args_str):
21*3c7ae9deSAndroid Build Coastguard Worker    print(args_str)
22*3c7ae9deSAndroid Build Coastguard Worker    # gather all stderr and stdout to a single string that we print only if things go wrong
23*3c7ae9deSAndroid Build Coastguard Worker    process = subprocess.Popen(
24*3c7ae9deSAndroid Build Coastguard Worker        args_str, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
25*3c7ae9deSAndroid Build Coastguard Worker    timedout = False
26*3c7ae9deSAndroid Build Coastguard Worker    try:
27*3c7ae9deSAndroid Build Coastguard Worker        output = process.communicate(timeout=TIMEOUT)[0]
28*3c7ae9deSAndroid Build Coastguard Worker    except subprocess.TimeoutExpired:
29*3c7ae9deSAndroid Build Coastguard Worker        timedout = True
30*3c7ae9deSAndroid Build Coastguard Worker        process.kill()
31*3c7ae9deSAndroid Build Coastguard Worker        output = process.communicate()[0]
32*3c7ae9deSAndroid Build Coastguard Worker    finally:
33*3c7ae9deSAndroid Build Coastguard Worker        if process.returncode != 0 or timedout:
34*3c7ae9deSAndroid Build Coastguard Worker            for line in output.splitlines():
35*3c7ae9deSAndroid Build Coastguard Worker                print(line.decode())
36*3c7ae9deSAndroid Build Coastguard Worker            if timedout:
37*3c7ae9deSAndroid Build Coastguard Worker                raise RuntimeError("Timeout happened after {secs} secs from: {cmd}".format(
38*3c7ae9deSAndroid Build Coastguard Worker                    secs=TIMEOUT, cmd=args_str))
39*3c7ae9deSAndroid Build Coastguard Worker            else:
40*3c7ae9deSAndroid Build Coastguard Worker                raise RuntimeError("Return code {code} from: {cmd}".format(
41*3c7ae9deSAndroid Build Coastguard Worker                    code=process.returncode, cmd=args_str))
42*3c7ae9deSAndroid Build Coastguard Worker
43*3c7ae9deSAndroid Build Coastguard Worker
44*3c7ae9deSAndroid Build Coastguard Workerrun_command(command_string)
45