1""" 2Tests large source files are not locked on Windows when source cache is disabled 3""" 4 5import lldb 6import os 7from lldbsuite.test.decorators import * 8from lldbsuite.test.lldbtest import * 9from lldbsuite.test import lldbutil 10from shutil import copy 11 12class SettingsUseSourceCacheTestCase(TestBase): 13 14 mydir = TestBase.compute_mydir(__file__) 15 NO_DEBUG_INFO_TESTCASE = True 16 17 def test_set_use_source_cache_false(self): 18 """Test that after 'set use-source-cache false', files are not locked.""" 19 self.set_use_source_cache_and_test(False) 20 21 @skipIf(hostoslist=no_match(["windows"])) 22 def test_set_use_source_cache_true(self): 23 """Test that after 'set use-source-cache false', files are locked.""" 24 self.set_use_source_cache_and_test(True) 25 26 def set_use_source_cache_and_test(self, is_cache_enabled): 27 """Common test for both True/False values of use-source-cache.""" 28 self.build() 29 30 # Enable/Disable source cache 31 self.runCmd( 32 "settings set use-source-cache " + 33 ("true" if is_cache_enabled else "false")) 34 35 # Get paths for the main source file. 36 src = self.getBuildArtifact("main-copy.cpp") 37 self.assertTrue(src) 38 39 # Make sure source file is bigger than 16K to trigger memory mapping 40 self.assertGreater(os.stat(src).st_size, 4*4096) 41 42 target, process, thread, breakpoint = lldbutil.run_to_name_breakpoint( 43 self, 44 "calc") 45 46 # Show the source file contents to make sure LLDB loads src file. 47 self.runCmd("source list") 48 49 # Try deleting the source file. 50 is_file_removed = self.removeFile(src) 51 52 if is_cache_enabled: 53 self.assertFalse( 54 is_file_removed, 55 "Source cache is enabled, but delete file succeeded") 56 57 if not is_cache_enabled: 58 self.assertTrue( 59 is_file_removed, 60 "Source cache is disabled, but delete file failed") 61 62 def removeFile(self, src): 63 """Remove file and return true iff file was successfully removed.""" 64 try: 65 os.remove(src) 66 return True 67 except Exception: 68 return False 69 70