199451b44SJordan Rupprecht"""Test the lldb public C++ api when doing multiple debug sessions simultaneously."""
299451b44SJordan Rupprecht
399451b44SJordan Rupprechtfrom __future__ import print_function
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtimport os
799451b44SJordan Rupprecht
899451b44SJordan Rupprechtimport lldb
999451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
1099451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
1199451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprecht
1499451b44SJordan Rupprechtclass TestMultipleSimultaneousDebuggers(TestBase):
1599451b44SJordan Rupprecht
1699451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
1799451b44SJordan Rupprecht
18*a0a328edSJonas Devlieghere    NO_DEBUG_INFO_TESTCASE = True
19*a0a328edSJonas Devlieghere
2099451b44SJordan Rupprecht    @skipIfNoSBHeaders
2199451b44SJordan Rupprecht    def test_multiple_debuggers(self):
2299451b44SJordan Rupprecht        env = {self.dylibPath: self.getLLDBLibraryEnvVal()}
2399451b44SJordan Rupprecht
2499451b44SJordan Rupprecht        self.driver_exe = self.getBuildArtifact("multi-process-driver")
2599451b44SJordan Rupprecht        self.buildDriver('multi-process-driver.cpp', self.driver_exe)
2699451b44SJordan Rupprecht        self.addTearDownHook(lambda: os.remove(self.driver_exe))
2799451b44SJordan Rupprecht        self.signBinary(self.driver_exe)
2899451b44SJordan Rupprecht
2999451b44SJordan Rupprecht        self.inferior_exe = self.getBuildArtifact("testprog")
3099451b44SJordan Rupprecht        self.buildDriver('testprog.cpp', self.inferior_exe)
3199451b44SJordan Rupprecht        self.addTearDownHook(lambda: os.remove(self.inferior_exe))
3299451b44SJordan Rupprecht
33*a0a328edSJonas Devlieghere        # check_call will raise a CalledProcessError if multi-process-driver
34*a0a328edSJonas Devlieghere        # doesn't return exit code 0 to indicate success.  We can let this
35*a0a328edSJonas Devlieghere        # exception go - the test harness will recognize it as a test failure.
3699451b44SJordan Rupprecht
3799451b44SJordan Rupprecht        if self.TraceOn():
3899451b44SJordan Rupprecht            print("Running test %s" % self.driver_exe)
3999451b44SJordan Rupprecht            check_call([self.driver_exe, self.inferior_exe], env=env)
4099451b44SJordan Rupprecht        else:
4199451b44SJordan Rupprecht            with open(os.devnull, 'w') as fnull:
4299451b44SJordan Rupprecht                check_call([self.driver_exe, self.inferior_exe],
4399451b44SJordan Rupprecht                           env=env, stdout=fnull, stderr=fnull)
44