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