Files
clang-p2996/lldb/test/API/commands/process/attach/TestProcessAttach.py
Jonas Devlieghere 4aafc479f2 [lldb/Test] Always set the cleanupSubprocesses tear down hook
Always clean up subprocesses on tear down instead of relying on the
caller to do so. This is not only less error prone but also means the
tests can be more concise.

Differential revision: https://reviews.llvm.org/D83787
2020-07-14 14:05:56 -07:00

89 lines
2.4 KiB
Python

"""
Test process attach.
"""
import os
import lldb
import shutil
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
exe_name = "ProcessAttach" # Must match Makefile
class ProcessAttachTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
@skipIfiOSSimulator
@expectedFailureNetBSD
def test_attach_to_process_by_id(self):
"""Test attach by process id"""
self.build()
exe = self.getBuildArtifact(exe_name)
# Spawn a new process
popen = self.spawnSubprocess(exe)
self.runCmd("process attach -p " + str(popen.pid))
target = self.dbg.GetSelectedTarget()
process = target.GetProcess()
self.assertTrue(process, PROCESS_IS_VALID)
@expectedFailureNetBSD
@skipIfReproducer # FIXME: Unexpected packet during (active) replay
def test_attach_to_process_from_different_dir_by_id(self):
"""Test attach by process id"""
newdir = self.getBuildArtifact("newdir")
try:
os.mkdir(newdir)
except OSError as e:
if e.errno != os.errno.EEXIST:
raise
testdir = self.getBuildDir()
exe = os.path.join(newdir, 'proc_attach')
self.buildProgram('main.cpp', exe)
self.addTearDownHook(lambda: shutil.rmtree(newdir))
# Spawn a new process
popen = self.spawnSubprocess(exe)
os.chdir(newdir)
self.addTearDownHook(lambda: os.chdir(testdir))
self.runCmd("process attach -p " + str(popen.pid))
target = self.dbg.GetSelectedTarget()
process = target.GetProcess()
self.assertTrue(process, PROCESS_IS_VALID)
@expectedFailureNetBSD
def test_attach_to_process_by_name(self):
"""Test attach by process name"""
self.build()
exe = self.getBuildArtifact(exe_name)
# Spawn a new process
popen = self.spawnSubprocess(exe)
self.runCmd("process attach -n " + exe_name)
target = self.dbg.GetSelectedTarget()
process = target.GetProcess()
self.assertTrue(process, PROCESS_IS_VALID)
def tearDown(self):
# Destroy process before TestBase.tearDown()
self.dbg.GetSelectedTarget().GetProcess().Destroy()
# Call super's tearDown().
TestBase.tearDown(self)