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
16a0a328edSJonas Devlieghere    NO_DEBUG_INFO_TESTCASE = True
17a0a328edSJonas Devlieghere
1899451b44SJordan Rupprecht    @skipIfNoSBHeaders
19*5a7b61b1SJonas Devlieghere    @skipIfWindows
2099451b44SJordan Rupprecht    def test_multiple_debuggers(self):
2199451b44SJordan Rupprecht        env = {self.dylibPath: self.getLLDBLibraryEnvVal()}
2299451b44SJordan Rupprecht
2399451b44SJordan Rupprecht        self.driver_exe = self.getBuildArtifact("multi-process-driver")
2499451b44SJordan Rupprecht        self.buildDriver('multi-process-driver.cpp', self.driver_exe)
2599451b44SJordan Rupprecht        self.addTearDownHook(lambda: os.remove(self.driver_exe))
2699451b44SJordan Rupprecht        self.signBinary(self.driver_exe)
2799451b44SJordan Rupprecht
2899451b44SJordan Rupprecht        self.inferior_exe = self.getBuildArtifact("testprog")
2999451b44SJordan Rupprecht        self.buildDriver('testprog.cpp', self.inferior_exe)
3099451b44SJordan Rupprecht        self.addTearDownHook(lambda: os.remove(self.inferior_exe))
3199451b44SJordan Rupprecht
32a0a328edSJonas Devlieghere        # check_call will raise a CalledProcessError if multi-process-driver
33a0a328edSJonas Devlieghere        # doesn't return exit code 0 to indicate success.  We can let this
34a0a328edSJonas Devlieghere        # exception go - the test harness will recognize it as a test failure.
3599451b44SJordan Rupprecht
3699451b44SJordan Rupprecht        if self.TraceOn():
3799451b44SJordan Rupprecht            print("Running test %s" % self.driver_exe)
3899451b44SJordan Rupprecht            check_call([self.driver_exe, self.inferior_exe], env=env)
3999451b44SJordan Rupprecht        else:
4099451b44SJordan Rupprecht            with open(os.devnull, 'w') as fnull:
4199451b44SJordan Rupprecht                check_call([self.driver_exe, self.inferior_exe],
4299451b44SJordan Rupprecht                           env=env, stdout=fnull, stderr=fnull)
43