1552 """Run the 'program'.
1554 'program' -- The path to the program to run.
1556 'arguments' -- A list of the arguments to the program. This
1557 list must contain a first argument corresponding to 'argv[0]'.
1559 'context' -- A 'Context' giving run-time parameters to the
1562 'result' -- A 'Result' object. The outcome will be
1563 'Result.PASS' when this method is called. The 'result' may be
1564 modified by this method to indicate outcomes other than
1565 'Result.PASS' or to add annotations.
1567 @attention: This method has been copied from command.ExecTestBase
1568 (QMTest 2.3.0) and modified to keep stdout and stderr
1569 for tests that have been terminated by a signal.
1570 (Fundamental for debugging in the Application Area)
1574 environment = self.MakeEnvironment(context)
1576 if "slc6" in environment.get(
'CMTCONFIG',
''):
1577 environment[
'TERM'] =
'dumb'
1590 exit_status = e.Run(arguments, environment, path = program)
1592 if e.stack_trace_file
and os.path.exists(e.stack_trace_file):
1593 stack_trace = open(e.stack_trace_file).read()
1594 os.remove(e.stack_trace_file)
1598 result[
"ExecTest.stack_trace"] = result.Quote(stack_trace)
1601 if (sys.platform ==
"win32" or os.WIFEXITED(exit_status)
1607 if self.exit_code
is None:
1609 elif sys.platform ==
"win32":
1610 exit_code = exit_status
1612 exit_code = os.WEXITSTATUS(exit_status)
1617 result[
"ExecTest.exit_code"] = str(exit_code)
1618 result[
"ExecTest.stdout"] = result.Quote(stdout)
1619 result[
"ExecTest.stderr"] = result.Quote(stderr)
1621 if exit_code != self.exit_code:
1622 causes.append(
"exit_code")
1623 result[
"ExecTest.expected_exit_code"] \
1624 = str(self.exit_code)
1629 result.Fail(
"Unexpected %s." % string.join(causes,
", "))
1630 elif os.WIFSIGNALED(exit_status):
1633 signal_number = str(os.WTERMSIG(exit_status))
1635 result.Fail(
"Program terminated by signal.")
1639 result.Fail(
"Exceeded time limit (%ds), terminated." % timeout)
1640 result[
"ExecTest.signal_number"] = signal_number
1641 result[
"ExecTest.stdout"] = result.Quote(e.stdout)
1642 result[
"ExecTest.stderr"] = result.Quote(e.stderr)
1644 result[
"ExecTest.expected_signal_number"] = str(self.
signal)
1645 elif os.WIFSTOPPED(exit_status):
1648 signal_number = str(os.WSTOPSIG(exit_status))
1650 result.Fail(
"Program stopped by signal.")
1654 result.Fail(
"Exceeded time limit (%ds), stopped." % timeout)
1655 result[
"ExecTest.signal_number"] = signal_number
1656 result[
"ExecTest.stdout"] = result.Quote(e.stdout)
1657 result[
"ExecTest.stderr"] = result.Quote(e.stderr)
1661 result.Fail(
"Program did not terminate normally.")
1667 result[
"ExecTest.stdout"] = result[
"ExecTest.stdout"].replace(esc,repr_esc)
def RunProgram(self, program, arguments, context, result)
def ValidateOutput(self, stdout, stderr, result)