def executeScriptInternal(test, litConfig, tmpBase, commands, cwd): cmds = [] for ln in commands: try: cmds.append( ShUtil.ShParser(ln, litConfig.isWindows, test.config.pipefail).parse()) except: return lit.Test.Result(Test.FAIL, "shell parser error on: %r" % ln) cmd = cmds[0] for c in cmds[1:]: cmd = ShUtil.Seq(cmd, '&&', c) results = [] try: exitCode = executeShCmd(cmd, test.config, cwd, results) except InternalShellError: e = sys.exc_info()[1] exitCode = 127 results.append((e.command, '', e.message, exitCode)) out = err = '' for i, (cmd, cmd_out, cmd_err, res) in enumerate(results): out += 'Command %d: %s\n' % (i, ' '.join('"%s"' % s for s in cmd.args)) out += 'Command %d Result: %r\n' % (i, res) out += 'Command %d Output:\n%s\n\n' % (i, cmd_out) out += 'Command %d Stderr:\n%s\n\n' % (i, cmd_err) return out, err, exitCode
def executeScriptInternal(test, litConfig, tmpBase, commands, cwd): cmds = [] for ln in commands: try: cmds.append( ShUtil.ShParser(ln, litConfig.isWindows, test.config.pipefail).parse()) except: return lit.Test.Result(Test.FAIL, "shell parser error on: %r" % ln) cmd = cmds[0] for c in cmds[1:]: cmd = ShUtil.Seq(cmd, '&&', c) results = [] timeoutInfo = None try: shenv = ShellEnvironment(cwd, test.config.environment) exitCode, timeoutInfo = executeShCmd( cmd, shenv, results, timeout=litConfig.maxIndividualTestTime) except InternalShellError: e = sys.exc_info()[1] exitCode = 127 results.append( ShellCommandResult(e.command, '', e.message, exitCode, False)) out = err = '' for i, result in enumerate(results): # Write the command line run. out += '$ %s\n' % (' '.join('"%s"' % s for s in result.command.args), ) # If nothing interesting happened, move on. if litConfig.maxIndividualTestTime == 0 and \ result.exitCode == 0 and \ not result.stdout.strip() and not result.stderr.strip(): continue # Otherwise, something failed or was printed, show it. if result.stdout.strip(): out += '# command output:\n%s\n' % (result.stdout, ) if result.stderr.strip(): out += '# command stderr:\n%s\n' % (result.stderr, ) if not result.stdout.strip() and not result.stderr.strip(): out += "note: command had no output on stdout or stderr\n" # Show the error conditions: if result.exitCode != 0: out += "error: command failed with exit status: %d\n" % ( result.exitCode, ) if litConfig.maxIndividualTestTime > 0: out += 'error: command reached timeout: %s\n' % ( i, str(result.timeoutReached)) return out, err, exitCode, timeoutInfo
def executeScriptInternal(test, litConfig, tmpBase, commands, cwd): cmds = [] for ln in commands: try: cmds.append(ShUtil.ShParser(ln, litConfig.isWindows, test.config.pipefail).parse()) except: return lit.Test.Result(Test.FAIL, "shell parser error on: %r" % ln) cmd = cmds[0] for c in cmds[1:]: cmd = ShUtil.Seq(cmd, '&&', c) results = [] timeoutInfo = None try: shenv = ShellEnvironment(cwd, test.config.environment) exitCode, timeoutInfo = executeShCmd(cmd, shenv, results, timeout=litConfig.maxIndividualTestTime) except InternalShellError: e = sys.exc_info()[1] exitCode = 127 results.append( ShellCommandResult(e.command, '', e.message, exitCode, False)) out = err = '' for i,result in enumerate(results): # Write the command line run. out += '$ %s\n' % (' '.join('"%s"' % s for s in result.command.args),) # If nothing interesting happened, move on. if litConfig.maxIndividualTestTime == 0 and \ result.exitCode == 0 and \ not result.stdout.strip() and not result.stderr.strip(): continue # Otherwise, something failed or was printed, show it. # Add the command output, if redirected. for (name, path, data) in result.outputFiles: if data.strip(): out += "# redirected output from %r:\n" % (name,) data = to_string(data.decode('utf-8', errors='replace')) if len(data) > 1024: out += data[:1024] + "\n...\n" out += "note: data was truncated\n" else: out += data out += "\n" if result.stdout.strip(): out += '# command output:\n%s\n' % (result.stdout,) if result.stderr.strip(): out += '# command stderr:\n%s\n' % (result.stderr,) if not result.stdout.strip() and not result.stderr.strip(): out += "note: command had no output on stdout or stderr\n" # Show the error conditions: if result.exitCode != 0: # On Windows, a negative exit code indicates a signal, and those are # easier to recognize or look up if we print them in hex. if litConfig.isWindows and result.exitCode < 0: codeStr = hex(int(result.exitCode & 0xFFFFFFFF)).rstrip("L") else: codeStr = str(result.exitCode) out += "error: command failed with exit status: %s\n" % ( codeStr,) if litConfig.maxIndividualTestTime > 0: out += 'error: command reached timeout: %s\n' % ( str(result.timeoutReached),) return out, err, exitCode, timeoutInfo