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