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