Files
clang-p2996/lldb/test/API/tools/lldb-server/vCont-threads/TestGdbRemote_vContThreads.py
Muhammad Omair Javaid 8813bc02b4 [LLDB] Skip random fails on Arm/AArch64 Linux buildbot
Following tests fail on Arm/AArch64 randomly with timeouts:

TestMultilineNavigation.py
TestBatchMode.py
TestUnicode.py
TestGdbRemote_vContThreads.py

I am marking them as skipped until we find a away make to pass reliably.
2021-08-09 13:53:48 +05:00

231 lines
8.2 KiB
Python

import json
import re
import gdbremote_testcase
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class TestGdbRemote_vContThreads(gdbremote_testcase.GdbRemoteTestCaseBase):
mydir = TestBase.compute_mydir(__file__)
def start_threads(self, num):
procs = self.prep_debug_monitor_and_inferior(inferior_args=[str(num)])
# start the process and wait for output
self.test_sequence.add_log_lines([
"read packet: $c#63",
{"type": "output_match", "regex": self.maybe_strict_output_regex(
r"@started\r\n")},
], True)
# then interrupt it
self.add_interrupt_packets()
self.add_threadinfo_collection_packets()
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)
threads = self.parse_threadinfo_packets(context)
self.assertIsNotNone(threads)
self.assertEqual(len(threads), num + 1)
self.reset_test_sequence()
return threads
def send_and_check_signal(self, vCont_data, threads):
self.test_sequence.add_log_lines([
"read packet: $vCont;{0}#00".format(vCont_data),
{"type": "output_match",
"regex": self.maybe_strict_output_regex(
len(threads) *
r"received SIGUSR1 on thread id: ([0-9a-f]+)\r\n"),
"capture": dict((i, "tid{0}".format(i)) for i
in range(1, len(threads)+1)),
},
], True)
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)
tids = sorted(int(context["tid{0}".format(x)], 16)
for x in range(1, len(threads)+1))
self.assertEqual(tids, sorted(threads))
def get_pid(self):
self.add_process_info_collection_packets()
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)
procinfo = self.parse_process_info_response(context)
return int(procinfo['pid'], 16)
@skipIfWindows
@expectedFailureNetBSD
@expectedFailureDarwin # No signals delivered
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_process_without_tid(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}".format(lldbutil.get_signal_number('SIGUSR1')),
threads)
@skipUnlessPlatform(["netbsd"])
@expectedFailureNetBSD
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_one_thread(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
# try sending a signal to one of the two threads
self.send_and_check_signal(
"C{0:x}:{1:x};c".format(lldbutil.get_signal_number('SIGUSR1')),
threads[:1])
@skipIfWindows
@expectedFailureNetBSD
@expectedFailureDarwin # Only one signal delivered
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_all_threads(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
# try sending a signal to two threads (= the process)
self.send_and_check_signal(
"C{0:x}:{1:x};C{0:x}:{2:x}".format(
lldbutil.get_signal_number('SIGUSR1'),
*threads),
threads)
@skipIfWindows
@expectedFailureNetBSD
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_process_by_pid(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:p{1:x}".format(
lldbutil.get_signal_number('SIGUSR1'),
self.get_pid()),
threads)
@skipIfWindows
@expectedFailureNetBSD
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_process_minus_one(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:p-1".format(
lldbutil.get_signal_number('SIGUSR1')),
threads)
@skipIfWindows
@expectedFailureNetBSD
@add_test_categories(["llgs"])
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_minus_one(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:-1".format(lldbutil.get_signal_number('SIGUSR1')),
threads)
@skipIfWindows
@expectedFailureNetBSD
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_all_threads_by_pid(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
# try sending a signal to two threads (= the process)
self.send_and_check_signal(
"C{0:x}:p{1:x}.{2:x};C{0:x}:p{1:x}.{3:x}".format(
lldbutil.get_signal_number('SIGUSR1'),
self.get_pid(),
*threads),
threads)
@skipIfWindows
@expectedFailureNetBSD
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_minus_one_by_pid(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:p{1:x}.-1".format(
lldbutil.get_signal_number('SIGUSR1'),
self.get_pid()),
threads)
@skipIfWindows
@expectedFailureNetBSD
@add_test_categories(["llgs"])
@skipIfAsan # Times out under asan
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_minus_one_by_minus_one(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
self.send_and_check_signal(
"C{0:x}:p-1.-1".format(
lldbutil.get_signal_number('SIGUSR1')),
threads)
@skipUnlessPlatform(["netbsd"])
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_two_of_three_threads(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(2)
# try sending a signal to 2 out of 3 threads
self.test_sequence.add_log_lines([
"read packet: $vCont;C{0:x}:{1:x};C{0:x}:{2:x};c#00".format(
lldbutil.get_signal_number('SIGUSR1'),
threads[1], threads[2]),
{"direction": "send", "regex": r"^\$E1e#db$"},
], True)
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)
@skipUnlessPlatform(["netbsd"])
@skipIf(oslist=["linux"], archs=["arm", "aarch64"]) # Randomly fails on buildbot
def test_signal_two_signals(self):
self.build()
self.set_inferior_startup_launch()
threads = self.start_threads(1)
# try sending two different signals to two threads
self.test_sequence.add_log_lines([
"read packet: $vCont;C{0:x}:{1:x};C{2:x}:{3:x}#00".format(
lldbutil.get_signal_number('SIGUSR1'), threads[0],
lldbutil.get_signal_number('SIGUSR2'), threads[1]),
{"direction": "send", "regex": r"^\$E1e#db$"},
], True)
context = self.expect_gdbremote_sequence()
self.assertIsNotNone(context)