"""
Test the 'memory region' command.
"""

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
from lldbsuite.test.gdbclientutils import MockGDBServerResponder
from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase


class MemoryCommandRegion(TestBase):
    NO_DEBUG_INFO_TESTCASE = True

    def setUp(self):
        TestBase.setUp(self)
        # Find the line number to break for main.c.
        self.line = line_number(
            "main.cpp", "// Run here before printing memory regions"
        )

    def test_help(self):
        """Test that help shows you must have one of address or --all, not both."""
        self.expect(
            "help memory region",
            substrs=["memory region <address-expression>", "memory region -a"],
        )

    def setup_program(self):
        self.build()

        # Set breakpoint in main and run
        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
        lldbutil.run_break_set_by_file_and_line(
            self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True
        )

        self.runCmd("run", RUN_SUCCEEDED)

    # This test and the next build a large result string in such a way that
    # when run under ASAN the test always times out.  Most of the time is in the asan
    # checker under PyUnicode_Append.
    # This seems to be a worst-case scenario for ASAN performance.
    @skipIfAsan
    def test_command(self):
        self.setup_program()

        interp = self.dbg.GetCommandInterpreter()
        result = lldb.SBCommandReturnObject()

        # Test that the first 'memory region' command prints the usage.
        interp.HandleCommand("memory region", result)
        self.assertFalse(result.Succeeded())
        self.assertEqual(
            result.GetError(),
            "error: 'memory region' takes one argument or \"--all\" option:\n"
            "Usage: memory region <address-expression> (or --all)\n",
        )

        # We allow --all or an address argument, not both
        interp.HandleCommand("memory region --all 0", result)
        self.assertFalse(result.Succeeded())
        self.assertRegex(
            result.GetError(),
            'The "--all" option cannot be used when an address argument is given',
        )

        # Test that when the address fails to parse, we show an error and do not continue
        interp.HandleCommand("memory region not_an_address", result)
        self.assertFalse(result.Succeeded())
        self.assertEqual(
            result.GetError(),
            'error: invalid address argument "not_an_address": address expression "not_an_address" evaluation failed\n',
        )

        # Accumulate the results to compare with the --all output
        all_regions = ""

        # Now let's print the memory region starting at 0 which should always work.
        interp.HandleCommand("memory region 0x0", result)
        self.assertTrue(result.Succeeded())
        self.assertRegex(result.GetOutput(), "\\[0x0+-")
        all_regions += result.GetOutput()

        # Keep printing memory regions until we printed all of them.
        while True:
            interp.HandleCommand("memory region", result)
            if not result.Succeeded():
                break
            all_regions += result.GetOutput()

        # Now that we reached the end, 'memory region' should again print the usage.
        interp.HandleCommand("memory region", result)
        self.assertFalse(result.Succeeded())
        self.assertRegex(
            result.GetError(),
            "Usage: memory region <address\-expression> \(or \-\-all\)",
        )

        # --all should match what repeating the command gives you
        interp.HandleCommand("memory region --all", result)
        self.assertTrue(result.Succeeded())
        self.assertEqual(result.GetOutput(), all_regions)

    @skipIfAsan
    def test_no_overlapping_regions(self):
        # In the past on Windows we were recording AllocationBase as the base address
        # of the current region, not BaseAddress. So if a range of pages was split
        # into regions you would see several regions with the same base address.
        # This checks that this no longer happens (and it shouldn't happen on any
        # other OS either).
        self.setup_program()

        regions = self.process().GetMemoryRegions()
        num_regions = regions.GetSize()

        if num_regions:
            region = lldb.SBMemoryRegionInfo()
            regions.GetMemoryRegionAtIndex(0, region)
            previous_base = region.GetRegionBase()
            previous_end = region.GetRegionEnd()

            for idx in range(1, regions.GetSize()):
                regions.GetMemoryRegionAtIndex(idx, region)

                # Check that it does not overlap the previous region.
                # This could happen if we got the base addresses or size wrong.
                # Also catches the base addresses being the same.
                region_base = region.GetRegionBase()
                region_end = region.GetRegionEnd()

                self.assertFalse(
                    (region_base < previous_end) and (previous_base < region_end),
                    "Unexpected overlapping memory region found.",
                )

                previous_base = region_base
                previous_end = region_end


class MemoryCommandRegionAll(GDBRemoteTestBase):
    NO_DEBUG_INFO_TESTCASE = True

    def test_all_error(self):
        # The --all option should keep looping until the end of the memory range.
        # If there is an error it should be reported as if you were just asking
        # for one region. In this case the error is the remote not supporting
        # qMemoryRegionInfo.
        # (a region being unmapped is not an error, we just get a result
        # describing an unmapped range)
        class MyResponder(MockGDBServerResponder):
            def qMemoryRegionInfo(self, addr):
                # Empty string means unsupported.
                return ""

        self.server.responder = MyResponder()
        target = self.dbg.CreateTarget("")
        if self.TraceOn():
            self.runCmd("log enable gdb-remote packets")
            self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets"))

        process = self.connect(target)
        lldbutil.expect_state_changes(
            self, self.dbg.GetListener(), process, [lldb.eStateStopped]
        )

        interp = self.dbg.GetCommandInterpreter()
        result = lldb.SBCommandReturnObject()
        interp.HandleCommand("memory region --all ", result)
        self.assertFalse(result.Succeeded())
        self.assertEqual(
            result.GetError(), "error: qMemoryRegionInfo is not supported\n"
        )

    @skipIfAsan
    def test_all_no_abi_plugin(self):
        # There are two conditions for breaking the all loop. Either we get to
        # LLDB_INVALID_ADDRESS, or the ABI plugin tells us we have got beyond
        # the mappable range. If we don't have an ABI plugin, the option should still
        # work and only check the first condition.

        class MyResponder(MockGDBServerResponder):
            def qMemoryRegionInfo(self, addr):
                if addr == 0:
                    return "start:0;size:100000000;"
                # Goes until the end of memory.
                if addr == 0x100000000:
                    return "start:100000000;size:fffffffeffffffff;"

        self.server.responder = MyResponder()
        target = self.dbg.CreateTarget("")
        if self.TraceOn():
            self.runCmd("log enable gdb-remote packets")
            self.addTearDownHook(lambda: self.runCmd("log disable gdb-remote packets"))

        process = self.connect(target)
        lldbutil.expect_state_changes(
            self, self.dbg.GetListener(), process, [lldb.eStateStopped]
        )

        interp = self.dbg.GetCommandInterpreter()
        result = lldb.SBCommandReturnObject()
        interp.HandleCommand("memory region --all ", result)
        self.assertTrue(result.Succeeded())
        self.assertEqual(
            result.GetOutput(),
            "[0x0000000000000000-0x0000000100000000) ---\n"
            "[0x0000000100000000-0xffffffffffffffff) ---\n",
        )
