1865996ddSEmre Kultursay""" 2865996ddSEmre KultursayTests large source files are not locked on Windows when source cache is disabled 3865996ddSEmre Kultursay""" 4865996ddSEmre Kultursay 5865996ddSEmre Kultursayimport lldb 6865996ddSEmre Kultursayimport os 7865996ddSEmre Kultursayfrom lldbsuite.test.decorators import * 8865996ddSEmre Kultursayfrom lldbsuite.test.lldbtest import * 9865996ddSEmre Kultursayfrom lldbsuite.test import lldbutil 10865996ddSEmre Kultursayfrom shutil import copy 11865996ddSEmre Kultursay 122238dcc3SJonas Devlieghere 13865996ddSEmre Kultursayclass SettingsUseSourceCacheTestCase(TestBase): 14865996ddSEmre Kultursay NO_DEBUG_INFO_TESTCASE = True 15865996ddSEmre Kultursay 16865996ddSEmre Kultursay def test_set_use_source_cache_false(self): 17865996ddSEmre Kultursay """Test that after 'set use-source-cache false', files are not locked.""" 18865996ddSEmre Kultursay self.set_use_source_cache_and_test(False) 19865996ddSEmre Kultursay 20865996ddSEmre Kultursay @skipIf(hostoslist=no_match(["windows"])) 21865996ddSEmre Kultursay def test_set_use_source_cache_true(self): 22*47d9ca87SIgor Kudrin """Test that after 'set use-source-cache true', files are locked.""" 23865996ddSEmre Kultursay self.set_use_source_cache_and_test(True) 24865996ddSEmre Kultursay 25865996ddSEmre Kultursay def set_use_source_cache_and_test(self, is_cache_enabled): 26865996ddSEmre Kultursay """Common test for both True/False values of use-source-cache.""" 27865996ddSEmre Kultursay self.build() 28865996ddSEmre Kultursay 29865996ddSEmre Kultursay # Enable/Disable source cache 30865996ddSEmre Kultursay self.runCmd( 312238dcc3SJonas Devlieghere "settings set use-source-cache " + ("true" if is_cache_enabled else "false") 322238dcc3SJonas Devlieghere ) 33865996ddSEmre Kultursay 34865996ddSEmre Kultursay # Get paths for the main source file. 35865996ddSEmre Kultursay src = self.getBuildArtifact("main-copy.cpp") 36865996ddSEmre Kultursay self.assertTrue(src) 37865996ddSEmre Kultursay 38865996ddSEmre Kultursay # Make sure source file is bigger than 16K to trigger memory mapping 39865996ddSEmre Kultursay self.assertGreater(os.stat(src).st_size, 4 * 4096) 40865996ddSEmre Kultursay 41865996ddSEmre Kultursay target, process, thread, breakpoint = lldbutil.run_to_name_breakpoint( 422238dcc3SJonas Devlieghere self, "calc" 432238dcc3SJonas Devlieghere ) 44865996ddSEmre Kultursay 45865996ddSEmre Kultursay # Show the source file contents to make sure LLDB loads src file. 46865996ddSEmre Kultursay self.runCmd("source list") 47865996ddSEmre Kultursay 48*47d9ca87SIgor Kudrin # Try overwriting the source file. 49*47d9ca87SIgor Kudrin is_file_overwritten = self.overwriteFile(src) 50865996ddSEmre Kultursay 51865996ddSEmre Kultursay if is_cache_enabled: 52865996ddSEmre Kultursay self.assertFalse( 53*47d9ca87SIgor Kudrin is_file_overwritten, 54*47d9ca87SIgor Kudrin "Source cache is enabled, but writing to file succeeded", 552238dcc3SJonas Devlieghere ) 56865996ddSEmre Kultursay 57865996ddSEmre Kultursay if not is_cache_enabled: 58865996ddSEmre Kultursay self.assertTrue( 59*47d9ca87SIgor Kudrin is_file_overwritten, 60*47d9ca87SIgor Kudrin "Source cache is disabled, but writing to file failed", 612238dcc3SJonas Devlieghere ) 62865996ddSEmre Kultursay 63*47d9ca87SIgor Kudrin def overwriteFile(self, src): 64*47d9ca87SIgor Kudrin """Write to file and return true iff file was successfully written.""" 65865996ddSEmre Kultursay try: 66*47d9ca87SIgor Kudrin f = open(src, "w") 67*47d9ca87SIgor Kudrin f.writelines(["// hello world\n"]) 68*47d9ca87SIgor Kudrin f.close() 69865996ddSEmre Kultursay return True 70865996ddSEmre Kultursay except Exception: 71865996ddSEmre Kultursay return False 72