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 Bennani 112238dcc3SJonas Devlieghereclass SBModuleAPICase(TestBase): 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 2266b829acSJonas 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() 262238dcc3SJonas Devlieghere target, _, _, _ = lldbutil.run_to_source_breakpoint( 272238dcc3SJonas Devlieghere self, "// break here", lldb.SBFileSpec("main.c") 282238dcc3SJonas Devlieghere ) 29ff52ef33SMed Ismail Bennani 30ff52ef33SMed Ismail Bennani self.assertGreater(target.GetNumModules(), 0) 31ff52ef33SMed Ismail Bennani main_module = target.GetModuleAtIndex(0) 32ff52ef33SMed Ismail Bennani self.assertEqual(main_module.GetFileSpec().GetFilename(), "a.out") 332238dcc3SJonas Devlieghere self.assertTrue( 342238dcc3SJonas Devlieghere main_module.IsFileBacked(), "The module should be backed by a file on disk" 352238dcc3SJonas Devlieghere ) 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 462238dcc3SJonas Devlieghere target = self.dbg.CreateTarget("") 47ff52ef33SMed Ismail Bennani self.assertEqual(self.dbg.GetNumTargets(), 1) 48ff52ef33SMed Ismail Bennani error = lldb.SBError() 492238dcc3SJonas Devlieghere process = target.AttachToProcessWithID( 502238dcc3SJonas Devlieghere self.dbg.GetListener(), self.background_pid, error 512238dcc3SJonas Devlieghere ) 52a6b56243SMed Ismail Bennani self.assertTrue(error.Success() and process, PROCESS_IS_VALID) 5367c73d88SFelipe de Azevedo Piovezan main_module = target.FindModule(lldb.SBFileSpec("a.out")) 54*9c246882SJordan Rupprecht self.assertIsNotNone(main_module) 552238dcc3SJonas Devlieghere self.assertFalse( 562238dcc3SJonas Devlieghere main_module.IsFileBacked(), 572238dcc3SJonas Devlieghere "The module should not be backed by a file on disk.", 582238dcc3SJonas Devlieghere ) 59ff52ef33SMed Ismail Bennani 60a6b56243SMed Ismail Bennani error = process.Destroy() 612238dcc3SJonas Devlieghere self.assertSuccess( 622238dcc3SJonas Devlieghere error, "couldn't destroy process %s" % background_process.pid 632238dcc3SJonas Devlieghere ) 64