1*99451b44SJordan Rupprecht"""Test the lldb public C++ api when doing multiple debug sessions simultaneously.""" 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprechtfrom __future__ import print_function 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprechtimport os 7*99451b44SJordan Rupprecht 8*99451b44SJordan Rupprechtimport lldb 9*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 10*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 11*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprecht 14*99451b44SJordan Rupprechtclass TestMultipleSimultaneousDebuggers(TestBase): 15*99451b44SJordan Rupprecht 16*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 17*99451b44SJordan Rupprecht 18*99451b44SJordan Rupprecht # This test case fails non-deterministically. 19*99451b44SJordan Rupprecht @skipIfNoSBHeaders 20*99451b44SJordan Rupprecht @expectedFailureAll(bugnumber="llvm.org/pr20282") 21*99451b44SJordan Rupprecht def test_multiple_debuggers(self): 22*99451b44SJordan Rupprecht env = {self.dylibPath: self.getLLDBLibraryEnvVal()} 23*99451b44SJordan Rupprecht 24*99451b44SJordan Rupprecht self.driver_exe = self.getBuildArtifact("multi-process-driver") 25*99451b44SJordan Rupprecht self.buildDriver('multi-process-driver.cpp', self.driver_exe) 26*99451b44SJordan Rupprecht self.addTearDownHook(lambda: os.remove(self.driver_exe)) 27*99451b44SJordan Rupprecht self.signBinary(self.driver_exe) 28*99451b44SJordan Rupprecht 29*99451b44SJordan Rupprecht self.inferior_exe = self.getBuildArtifact("testprog") 30*99451b44SJordan Rupprecht self.buildDriver('testprog.cpp', self.inferior_exe) 31*99451b44SJordan Rupprecht self.addTearDownHook(lambda: os.remove(self.inferior_exe)) 32*99451b44SJordan Rupprecht 33*99451b44SJordan Rupprecht# check_call will raise a CalledProcessError if multi-process-driver doesn't return 34*99451b44SJordan Rupprecht# exit code 0 to indicate success. We can let this exception go - the test harness 35*99451b44SJordan Rupprecht# will recognize it as a test failure. 36*99451b44SJordan Rupprecht 37*99451b44SJordan Rupprecht if self.TraceOn(): 38*99451b44SJordan Rupprecht print("Running test %s" % self.driver_exe) 39*99451b44SJordan Rupprecht check_call([self.driver_exe, self.inferior_exe], env=env) 40*99451b44SJordan Rupprecht else: 41*99451b44SJordan Rupprecht with open(os.devnull, 'w') as fnull: 42*99451b44SJordan Rupprecht check_call([self.driver_exe, self.inferior_exe], 43*99451b44SJordan Rupprecht env=env, stdout=fnull, stderr=fnull) 44