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