[Lldb-commits] [lldb] 4b284b9 - [lldb] Fix TestPlatformProcessConnect.py

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Thu Jan 14 00:49:40 PST 2021


Author: Pavel Labath
Date: 2021-01-14T09:49:19+01:00
New Revision: 4b284b9ca8098e284b8d965a633b71bd283043d6

URL: https://github.com/llvm/llvm-project/commit/4b284b9ca8098e284b8d965a633b71bd283043d6
DIFF: https://github.com/llvm/llvm-project/commit/4b284b9ca8098e284b8d965a633b71bd283043d6.diff

LOG: [lldb] Fix TestPlatformProcessConnect.py

The test was marked as remote-only, which means it was run ~never, and
accumulated various problems. This commit modifies the test to run
locally and includes a couple of other fixes necessary to make it run:
- moves the "invoke" method into the "Base" test class
- adds []'s around the IP address in a couple more places to make things
  work with IPv6

The test is now marked as skipped when running the remote test suite. It
would be possible to make it run both locally and remotely, but this
would require writing a lot special logic for the remote case, and that
is not worth it.

Added: 
    

Modified: 
    lldb/packages/Python/lldbsuite/test/lldbtest.py
    lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
    lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp
    lldb/test/API/tools/lldb-server/platform-process-connect/TestPlatformProcessConnect.py

Removed: 
    


################################################################################
diff  --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py
index d240050cc4c6..c377b64e9b9e 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -1765,6 +1765,19 @@ def cleanup(self, dictionary=None):
                 "Don't know how to do cleanup with dictionary: " +
                 dictionary)
 
+    def invoke(self, obj, name, trace=False):
+        """Use reflection to call a method dynamically with no argument."""
+        trace = (True if traceAlways else trace)
+
+        method = getattr(obj, name)
+        import inspect
+        self.assertTrue(inspect.ismethod(method),
+                        name + "is a method name of object: " + str(obj))
+        result = method()
+        with recording(self, trace) as sbuf:
+            print(str(method) + ":", result, file=sbuf)
+        return result
+
     def getLLDBLibraryEnvVal(self):
         """ Returns the path that the OS-specific library search environment variable
             (self.dylibPath) should be set to in order for a program to find the LLDB
@@ -2624,19 +2637,6 @@ def expect_var_path(
         value_check.check_value(self, eval_result, str(eval_result))
         return eval_result
 
-    def invoke(self, obj, name, trace=False):
-        """Use reflection to call a method dynamically with no argument."""
-        trace = (True if traceAlways else trace)
-
-        method = getattr(obj, name)
-        import inspect
-        self.assertTrue(inspect.ismethod(method),
-                        name + "is a method name of object: " + str(obj))
-        result = method()
-        with recording(self, trace) as sbuf:
-            print(str(method) + ":", result, file=sbuf)
-        return result
-
     def build(
             self,
             architecture=None,

diff  --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
index a64ee2634e2b..6a4275d249f6 100644
--- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
+++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp
@@ -825,7 +825,7 @@ std::string PlatformRemoteGDBServer::MakeUrl(const char *scheme,
                                              const char *hostname,
                                              uint16_t port, const char *path) {
   StreamString result;
-  result.Printf("%s://%s", scheme, hostname);
+  result.Printf("%s://[%s]", scheme, hostname);
   if (port != 0)
     result.Printf(":%u", port);
   if (path)

diff  --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp
index 4aa153460941..3462fb7ec8b9 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp
@@ -205,7 +205,7 @@ Status GDBRemoteCommunicationServerPlatform::LaunchGDBServer(
                                platform_port, platform_path);
     UNUSED_IF_ASSERT_DISABLED(ok);
     assert(ok);
-    url << platform_ip.str() << ":" << *port;
+    url << '[' << platform_ip.str() << "]:" << *port;
   } else {
     socket_name = GetDomainSocketPath("gdbserver").GetPath();
     url << socket_name;

diff  --git a/lldb/test/API/tools/lldb-server/platform-process-connect/TestPlatformProcessConnect.py b/lldb/test/API/tools/lldb-server/platform-process-connect/TestPlatformProcessConnect.py
index 177388fad5fc..95a210059b6d 100644
--- a/lldb/test/API/tools/lldb-server/platform-process-connect/TestPlatformProcessConnect.py
+++ b/lldb/test/API/tools/lldb-server/platform-process-connect/TestPlatformProcessConnect.py
@@ -1,44 +1,22 @@
-
-import time
-
+import socket
 import gdbremote_testcase
+import lldbgdbserverutils
 from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *
 from lldbsuite.test import lldbutil
 
-
 class TestPlatformProcessConnect(gdbremote_testcase.GdbRemoteTestCaseBase):
     mydir = TestBase.compute_mydir(__file__)
 
-    @llgs_test
-    @no_debug_info_test
-    @skipIf(remote=False)
+    @skipIfRemote
     @expectedFailureAll(hostoslist=["windows"], triple='.*-android')
     def test_platform_process_connect(self):
         self.build()
 
-        working_dir = lldb.remote_platform.GetWorkingDirectory()
-        src = lldb.SBFileSpec(self.getBuildArtifact("a.out"))
-        dest = lldb.SBFileSpec(os.path.join(working_dir, "a.out"))
-        err = lldb.remote_platform.Put(src, dest)
-        if err.Fail():
-            raise RuntimeError(
-                "Unable copy '%s' to '%s'.\n>>> %s" %
-                (f, wd, err.GetCString()))
+        hostname = socket.getaddrinfo("localhost", 0, proto=socket.IPPROTO_TCP)[0][4][0]
+        listen_url = "[%s]:0"%hostname
 
-        m = re.search("^(.*)://([^:/]*)", configuration.lldb_platform_url)
-        protocol = m.group(1)
-        hostname = m.group(2)
-        unix_protocol = protocol.startswith("unix-")
-        if unix_protocol:
-            p = re.search("^(.*)-connect", protocol)
-            path = lldbutil.join_remote_paths(configuration.lldb_platform_working_dir,
-                    self.getBuildDirBasename(), "platform-%d.sock" % int(time.time()))
-            listen_url = "%s://%s" % (p.group(1), path)
-        else:
-            listen_url = "*:0"
-
-        port_file = "%s/port" % working_dir
+        port_file = self.getBuildArtifact("port")
         commandline_args = [
             "platform",
             "--listen",
@@ -46,25 +24,19 @@ def test_platform_process_connect(self):
             "--socket-file",
             port_file,
             "--",
-            "%s/a.out" %
-            working_dir,
+            self.getBuildArtifact("a.out"),
             "foo"]
         self.spawnSubprocess(
-            self.debug_monitor_exe,
-            commandline_args,
-            install_remote=False)
+            lldbgdbserverutils.get_lldb_server_exe(),
+            commandline_args)
 
         socket_id = lldbutil.wait_for_file_on_target(self, port_file)
 
         self.dbg.SetAsync(False)
-
-        new_platform = lldb.SBPlatform(lldb.remote_platform.GetName())
+        new_platform = lldb.SBPlatform("remote-" + self.getPlatform())
         self.dbg.SetSelectedPlatform(new_platform)
 
-        if unix_protocol:
-            connect_url = "%s://%s%s" % (protocol, hostname, socket_id)
-        else:
-            connect_url = "%s://%s:%s" % (protocol, hostname, socket_id)
+        connect_url = "connect://[%s]:%s" % (hostname, socket_id)
 
         command = "platform connect %s" % (connect_url)
         result = lldb.SBCommandReturnObject()
@@ -72,7 +44,7 @@ def test_platform_process_connect(self):
         self.assertTrue(
             result.Succeeded(),
             "platform process connect failed: %s" %
-            result.GetOutput())
+            result.GetError())
 
         target = self.dbg.GetSelectedTarget()
         process = target.GetProcess()


        


More information about the lldb-commits mailing list