import sys import os import subprocess import shlex TIMEOUT = 100 # Runner for elasticurl integration tests mvn_args = " ".join(map(shlex.quote, sys.argv[1:])) java_command = ['mvn', '-e', 'exec:java', '-Dexec.classpathScope=\"test\"', '-Dexec.mainClass=\"software.amazon.awssdk.crt.test.Elasticurl\"', '-Dexec.args=\"{}\"'.format(mvn_args)] if os.name == 'nt': # Windows uses mvn.cmd instead java_command[0] = 'mvn.cmd' command_string = " ".join(java_command) def run_command(args_str): print(args_str) # gather all stderr and stdout to a single string that we print only if things go wrong process = subprocess.Popen( args_str, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) timedout = False try: output = process.communicate(timeout=TIMEOUT)[0] except subprocess.TimeoutExpired: timedout = True process.kill() output = process.communicate()[0] finally: if process.returncode != 0 or timedout: for line in output.splitlines(): print(line.decode()) if timedout: raise RuntimeError("Timeout happened after {secs} secs from: {cmd}".format( secs=TIMEOUT, cmd=args_str)) else: raise RuntimeError("Return code {code} from: {cmd}".format( code=process.returncode, cmd=args_str)) run_command(command_string)