72 lines · python
1"""2Tests large source files are not locked on Windows when source cache is disabled3"""4 5import lldb6import os7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9from lldbsuite.test import lldbutil10from shutil import copy11 12 13class SettingsUseSourceCacheTestCase(TestBase):14 NO_DEBUG_INFO_TESTCASE = True15 16 def test_set_use_source_cache_false(self):17 """Test that after 'set use-source-cache false', files are not locked."""18 self.set_use_source_cache_and_test(False)19 20 @skipIf(hostoslist=no_match(["windows"]))21 def test_set_use_source_cache_true(self):22 """Test that after 'set use-source-cache true', files are locked."""23 self.set_use_source_cache_and_test(True)24 25 def set_use_source_cache_and_test(self, is_cache_enabled):26 """Common test for both True/False values of use-source-cache."""27 self.build()28 29 # Enable/Disable source cache30 self.runCmd(31 "settings set use-source-cache " + ("true" if is_cache_enabled else "false")32 )33 34 # Get paths for the main source file.35 src = self.getBuildArtifact("main-copy.cpp")36 self.assertTrue(src)37 38 # Make sure source file is bigger than 16K to trigger memory mapping39 self.assertGreater(os.stat(src).st_size, 4 * 4096)40 41 target, process, thread, breakpoint = lldbutil.run_to_name_breakpoint(42 self, "calc"43 )44 45 # Show the source file contents to make sure LLDB loads src file.46 self.runCmd("source list")47 48 # Try overwriting the source file.49 is_file_overwritten = self.overwriteFile(src)50 51 if is_cache_enabled:52 self.assertFalse(53 is_file_overwritten,54 "Source cache is enabled, but writing to file succeeded",55 )56 57 if not is_cache_enabled:58 self.assertTrue(59 is_file_overwritten,60 "Source cache is disabled, but writing to file failed",61 )62 63 def overwriteFile(self, src):64 """Write to file and return true iff file was successfully written."""65 try:66 f = open(src, "w")67 f.writelines(["// hello world\n"])68 f.close()69 return True70 except Exception:71 return False72