1*ff52ef33SMed Ismail Bennani"""Test the SBDModule APIs.""" 2*ff52ef33SMed Ismail Bennani 3*ff52ef33SMed Ismail Bennaniimport lldb 4*ff52ef33SMed Ismail Bennanifrom lldbsuite.test.decorators import * 5*ff52ef33SMed Ismail Bennanifrom lldbsuite.test.lldbtest import * 6*ff52ef33SMed Ismail Bennanifrom lldbsuite.test import lldbutil 7*ff52ef33SMed Ismail Bennani 8*ff52ef33SMed Ismail Bennaniimport os, signal, subprocess 9*ff52ef33SMed Ismail Bennani 10*ff52ef33SMed Ismail Bennaniclass SBModuleAPICase(TestBase): 11*ff52ef33SMed Ismail Bennani 12*ff52ef33SMed Ismail Bennani mydir = TestBase.compute_mydir(__file__) 13*ff52ef33SMed Ismail Bennani 14*ff52ef33SMed Ismail Bennani def setUp(self): 15*ff52ef33SMed Ismail Bennani TestBase.setUp(self) 16*ff52ef33SMed Ismail Bennani self.background_pid = None 17*ff52ef33SMed Ismail Bennani 18*ff52ef33SMed Ismail Bennani def tearDown(self): 19*ff52ef33SMed Ismail Bennani TestBase.tearDown(self) 20*ff52ef33SMed Ismail Bennani if self.background_pid: 21*ff52ef33SMed Ismail Bennani os.kill(self.background_pid, signal.SIGKILL) 22*ff52ef33SMed Ismail Bennani 23*ff52ef33SMed Ismail Bennani 24*ff52ef33SMed Ismail Bennani def test_module_is_file_backed(self): 25*ff52ef33SMed Ismail Bennani """Test the SBModule::IsFileBacked() method""" 26*ff52ef33SMed Ismail Bennani self.build() 27*ff52ef33SMed Ismail Bennani target, _, _, _ = lldbutil.run_to_source_breakpoint(self, "// break here", 28*ff52ef33SMed Ismail Bennani lldb.SBFileSpec("main.c")) 29*ff52ef33SMed Ismail Bennani 30*ff52ef33SMed Ismail Bennani self.assertGreater(target.GetNumModules(), 0) 31*ff52ef33SMed Ismail Bennani main_module = target.GetModuleAtIndex(0) 32*ff52ef33SMed Ismail Bennani self.assertEqual(main_module.GetFileSpec().GetFilename(), "a.out") 33*ff52ef33SMed Ismail Bennani self.assertTrue(main_module.IsFileBacked(), 34*ff52ef33SMed Ismail Bennani "The module should be backed by a file on disk") 35*ff52ef33SMed Ismail Bennani 36*ff52ef33SMed Ismail Bennani self.dbg.DeleteTarget(target) 37*ff52ef33SMed Ismail Bennani self.assertEqual(self.dbg.GetNumTargets(), 0) 38*ff52ef33SMed Ismail Bennani 39*ff52ef33SMed Ismail Bennani exe = self.getBuildArtifact("a.out") 40*ff52ef33SMed Ismail Bennani background_process = subprocess.Popen([exe]) 41*ff52ef33SMed Ismail Bennani self.assertTrue(background_process, "process is not valid") 42*ff52ef33SMed Ismail Bennani self.background_pid = background_process.pid 43*ff52ef33SMed Ismail Bennani os.unlink(exe) 44*ff52ef33SMed Ismail Bennani 45*ff52ef33SMed Ismail Bennani target = self.dbg.CreateTarget('') 46*ff52ef33SMed Ismail Bennani self.assertEqual(self.dbg.GetNumTargets(), 1) 47*ff52ef33SMed Ismail Bennani error = lldb.SBError() 48*ff52ef33SMed Ismail Bennani process = target.AttachToProcessWithID(self.dbg.GetListener(), 49*ff52ef33SMed Ismail Bennani self.background_pid, error) 50*ff52ef33SMed Ismail Bennani self.assertTrue(error.Success() and process, PROCESS_IS_VALID) 51*ff52ef33SMed Ismail Bennani main_module = target.GetModuleAtIndex(0) 52*ff52ef33SMed Ismail Bennani self.assertEqual(main_module.GetFileSpec().GetFilename(), "a.out") 53*ff52ef33SMed Ismail Bennani self.assertFalse(main_module.IsFileBacked(), 54*ff52ef33SMed Ismail Bennani "The module should not be backed by a file on disk.") 55*ff52ef33SMed Ismail Bennani 56*ff52ef33SMed Ismail Bennani error = process.Destroy() 57*ff52ef33SMed Ismail Bennani self.assertTrue(error.Success(), "couldn't destroy process %s" % background_process.pid) 58*ff52ef33SMed Ismail Bennani 59