[test] Relax stderr expectations on targets with chatty output

Summary:
On some android targets, a binary can produce additional garbage (e.g. warning messages from the
dynamic linker) on the standard error, which confuses some tests. This relaxes the stderr
expectations for targets known for their chattyness.

Reviewers: tfiala, ovyalov

Subscribers: tberghammer, danalbert, srhines, lldb-commits

Differential Revision: http://reviews.llvm.org/D19114

llvm-svn: 266326
This commit is contained in:
Pavel Labath 2016-04-14 15:52:53 +00:00
parent f677cd539f
commit e6961d0306
7 changed files with 31 additions and 12 deletions

View File

@ -139,3 +139,10 @@ def createPlatformContext():
return _PlatformContext('LD_LIBRARY_PATH', 'lib', 'so')
else:
return None
def hasChattyStderr(test_case):
"""Some targets produce garbage on the standard error output. This utility function
determines whether the tests can be strict about the expected stderr contents."""
if match_android_device(test_case.getArchitecture(), ['aarch64'], [22]):
return True # The dynamic linker on the device will complain about unknown DT entries
return False

View File

@ -312,8 +312,11 @@ class SettingsCommandTestCase(TestBase):
with open('stderr.txt', 'r') as f:
output = f.read()
self.expect(output, exe=False,
startstr = "This message should go to standard error.")
message = "This message should go to standard error."
if lldbplatformutil.hasChattyStderr(self):
self.expect(output, exe=False, substrs = [message])
else:
self.expect(output, exe=False, startstr = message)
# The 'stdout.txt' file should now exist.
self.assertTrue(os.path.isfile("stdout.txt"),

View File

@ -25,7 +25,7 @@ class TestGdbRemoteAuxvSupport(gdbremote_testcase.GdbRemoteTestCaseBase):
# Start the inferior...
"read packet: $c#63",
# ... match output....
{ "type":"output_match", "regex":r"^message:main entered\r\n$" },
{ "type":"output_match", "regex":self.maybe_strict_output_regex(r"message:main entered\r\n") },
], True)
# ... then interrupt.
self.add_interrupt_packets()

View File

@ -26,7 +26,7 @@ class TestGdbRemoteRegisterState(gdbremote_testcase.GdbRemoteTestCaseBase):
# Start the inferior...
"read packet: $c#63",
# ... match output....
{ "type":"output_match", "regex":r"^message:main entered\r\n$" },
{ "type":"output_match", "regex":self.maybe_strict_output_regex(r"message:main entered\r\n") },
], True)
# ... then interrupt.
self.add_interrupt_packets()

View File

@ -232,7 +232,7 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
self.add_verified_launch_packets(launch_args)
self.test_sequence.add_log_lines(
["read packet: $vCont;c#a8",
{"type":"output_match", "regex":r"^hello, world\r\n$" },
{"type":"output_match", "regex": self.maybe_strict_output_regex(r"hello, world\r\n")},
"send packet: $W00#00"],
True)
@ -868,7 +868,8 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
"read packet: $c#63",
# Match output line that prints the memory address of the message buffer within the inferior.
# Note we require launch-only testing so we can get inferior otuput.
{ "type":"output_match", "regex":r"^data address: 0x([0-9a-fA-F]+)\r\n$", "capture":{ 1:"message_address"} },
{ "type":"output_match", "regex":self.maybe_strict_output_regex(r"data address: 0x([0-9a-fA-F]+)\r\n"),
"capture":{ 1:"message_address"} },
# Now stop the inferior.
"read packet: {}".format(chr(3)),
# And wait for the stop notification.
@ -950,7 +951,8 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
"read packet: $c#63",
# Match output line that prints the memory address of the message buffer within the inferior.
# Note we require launch-only testing so we can get inferior otuput.
{ "type":"output_match", "regex":r"^code address: 0x([0-9a-fA-F]+)\r\n$", "capture":{ 1:"code_address"} },
{ "type":"output_match", "regex":self.maybe_strict_output_regex(r"code address: 0x([0-9a-fA-F]+)\r\n"),
"capture":{ 1:"code_address"} },
# Now stop the inferior.
"read packet: {}".format(chr(3)),
# And wait for the stop notification.
@ -1011,7 +1013,8 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
"read packet: $c#63",
# Match output line that prints the memory address of the message buffer within the inferior.
# Note we require launch-only testing so we can get inferior otuput.
{ "type":"output_match", "regex":r"^stack address: 0x([0-9a-fA-F]+)\r\n$", "capture":{ 1:"stack_address"} },
{ "type":"output_match", "regex":self.maybe_strict_output_regex(r"stack address: 0x([0-9a-fA-F]+)\r\n"),
"capture":{ 1:"stack_address"} },
# Now stop the inferior.
"read packet: {}".format(chr(3)),
# And wait for the stop notification.
@ -1072,7 +1075,8 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
"read packet: $c#63",
# Match output line that prints the memory address of the message buffer within the inferior.
# Note we require launch-only testing so we can get inferior otuput.
{ "type":"output_match", "regex":r"^heap address: 0x([0-9a-fA-F]+)\r\n$", "capture":{ 1:"heap_address"} },
{ "type":"output_match", "regex":self.maybe_strict_output_regex(r"heap address: 0x([0-9a-fA-F]+)\r\n"),
"capture":{ 1:"heap_address"} },
# Now stop the inferior.
"read packet: {}".format(chr(3)),
# And wait for the stop notification.
@ -1135,7 +1139,8 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
"read packet: $c#63",
# Match output line that prints the memory address of the function call entry point.
# Note we require launch-only testing so we can get inferior otuput.
{ "type":"output_match", "regex":r"^code address: 0x([0-9a-fA-F]+)\r\n$", "capture":{ 1:"function_address"} },
{ "type":"output_match", "regex":self.maybe_strict_output_regex(r"code address: 0x([0-9a-fA-F]+)\r\n"),
"capture":{ 1:"function_address"} },
# Now stop the inferior.
"read packet: {}".format(chr(3)),
# And wait for the stop notification.
@ -1279,7 +1284,8 @@ class LldbGdbServerTestCase(gdbremote_testcase.GdbRemoteTestCaseBase):
"read packet: $c#63",
# Match output line that prints the memory address of the message buffer within the inferior.
# Note we require launch-only testing so we can get inferior otuput.
{ "type":"output_match", "regex":r"^data address: 0x([0-9a-fA-F]+)\r\n$", "capture":{ 1:"message_address"} },
{ "type":"output_match", "regex":self.maybe_strict_output_regex(r"data address: 0x([0-9a-fA-F]+)\r\n"),
"capture":{ 1:"message_address"} },
# Now stop the inferior.
"read packet: {}".format(chr(3)),
# And wait for the stop notification.

View File

@ -1374,3 +1374,6 @@ class GdbRemoteTestCaseBase(TestBase):
self.assertTrue(state_reached)
self.assertEqual(step_count, expected_step_count)
def maybe_strict_output_regex(self, regex):
return '.*'+regex+'.*' if lldbplatformutil.hasChattyStderr(self) else '^'+regex+'$'

View File

@ -787,7 +787,7 @@ class GdbRemoteTestSequence(object):
regex = line.get("regex", None)
# Compile the regex.
if regex and (type(regex) == str):
regex = re.compile(regex)
regex = re.compile(regex, re.DOTALL)
regex_mode = line.get("regex_mode", "match")
capture = line.get("capture", None)