xref: /llvm-project/lldb/test/API/commands/settings/use_source_cache/TestUseSourceCache.py (revision 47d9ca87b0385975e8b14f5df06886ddd6057b17)
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