]> git.puffer.fish Git - mirror/frr.git/commitdiff
tests: update munet 0.14.14, 0.14.15
authorChristian Hopps <chopps@labn.net>
Sat, 14 Sep 2024 03:32:47 +0000 (23:32 -0400)
committerChristian Hopps <chopps@labn.net>
Sat, 14 Sep 2024 14:05:19 +0000 (10:05 -0400)
- improvement to remote CLI
- 0.14.15 fixed a small bug in 0.14.14

Signed-off-by: Christian Hopps <chopps@labn.net>
tests/topotests/munet/cli.py

index cd642d423a6505ef3be4c337285f6df164701c59..d273a30ead48cf73b4d7bbf2e8122afe3900d014 100644 (file)
@@ -745,7 +745,7 @@ async def cli_client_connected(unet, background, reader, writer):
         await writer.drain()
 
 
-async def remote_cli(unet, prompt, title, background):
+async def remote_cli(unet, prompt, title, background, remote_wait=False):
     """Open a CLI in a new window."""
     try:
         if not unet.cli_sockpath:
@@ -756,7 +756,12 @@ async def remote_cli(unet, prompt, title, background):
             unet.cli_sockpath = sockpath
             logging.info("server created on :\n%s\n", sockpath)
 
-        wait_tmux = bool(os.getenv("TMUX", "")) and not sys.stdin.isatty()
+        if remote_wait:
+            wait_tmux = bool(os.getenv("TMUX", ""))
+            wait_x11 = not wait_tmux and bool(os.getenv("DISPLAY", ""))
+        else:
+            wait_tmux = False
+            wait_x11 = False
 
         # Open a new window with a new CLI
         python_path = await unet.async_get_exec_path(["python3", "python"])
@@ -778,14 +783,21 @@ async def remote_cli(unet, prompt, title, background):
             if channel is not None:
                 Commander.tmux_wait_gen += 1
 
-        unet.run_in_window(cmd, title=title, background=False, wait_for=channel)
+        pane_info = unet.run_in_window(
+            cmd, title=title, background=False, wait_for=channel
+        )
 
         if wait_tmux and channel:
             from .base import commander  # pylint: disable=import-outside-toplevel
 
+            logger.debug("Waiting on TMUX CLI window")
             await commander.async_cmd_raises(
                 [commander.get_exec_path("tmux"), "wait", channel]
             )
+        elif wait_x11 and isinstance(pane_info, subprocess.Popen):
+            logger.debug("Waiting on xterm CLI process %s", pane_info)
+            if hasattr(asyncio, "to_thread"):
+                await asyncio.to_thread(pane_info.wait)  # pylint: disable=no-member
     except Exception as error:
         logging.error("cli server: unexpected exception: %s", error)
 
@@ -926,8 +938,22 @@ def cli(
     prompt=None,
     background=True,
 ):
+    # In the case of no tty a remote_cli will be used, and we want it to wait on finish
+    # of the spawned cli.py script, otherwise it returns back here and exits async loop
+    # which kills the server side CLI socket operation.
+    remote_wait = not sys.stdin.isatty()
+
     asyncio.run(
-        async_cli(unet, histfile, sockpath, force_window, title, prompt, background)
+        async_cli(
+            unet,
+            histfile,
+            sockpath,
+            force_window,
+            title,
+            prompt,
+            background,
+            remote_wait=remote_wait,
+        )
     )
 
 
@@ -939,12 +965,14 @@ async def async_cli(
     title=None,
     prompt=None,
     background=True,
+    remote_wait=False,
 ):
     if prompt is None:
         prompt = "munet> "
 
     if force_window or not sys.stdin.isatty():
-        await remote_cli(unet, prompt, title, background)
+        await remote_cli(unet, prompt, title, background, remote_wait)
+        return
 
     if not unet:
         logger.debug("client-cli using sockpath %s", sockpath)