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