From 8a7f241107084cc4fa8b1c407745e02c3ece3f84 Mon Sep 17 00:00:00 2001 From: Tony <52470376+wongtonyb@users.noreply.github.com> Date: Wed, 12 Nov 2025 12:47:44 -0500 Subject: [PATCH] chore(e2e): Add helper func ConnectCliStdoutPipe (#6243) --- testing/internal/e2e/boundary/connect.go | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/testing/internal/e2e/boundary/connect.go b/testing/internal/e2e/boundary/connect.go index ce96f45a54..ba2a24d1dd 100644 --- a/testing/internal/e2e/boundary/connect.go +++ b/testing/internal/e2e/boundary/connect.go @@ -43,3 +43,46 @@ func ConnectCli(t testing.TB, ctx context.Context, targetId string) ConnectCliOu return connectCliOutput } + +// ConnectCliStdoutPipe uses the boundary CLI to establish connection to the target. +// It captures stdout via a pipe, parses proxy details from the command output, and returns them. +// The connection must be closed separately via the `boundary sessions cancel` command +// This implementation works on cross platforms (Windows, Unix, Linux, macOS) - unlike the pty-based version above (Unix, Linux, macOS). +// StdoutPipe only captures stdout, as opposed to pty which is an interactive pseudo-terminal +func ConnectCliStdoutPipe(t testing.TB, ctx context.Context, targetId string) ConnectCliOutput { + cmd := exec.CommandContext(ctx, + "boundary", "connect", + "-target-id", targetId, + "-format", "json", + ) + + // Capture stdout + stdoutPipe, err := cmd.StdoutPipe() + require.NoError(t, err) + + // Start the command + err = cmd.Start() + require.NoError(t, err) + + // Register cleanup to kill the process + t.Cleanup(func() { + if cmd.Process != nil { + _ = cmd.Process.Kill() + } + }) + + // Read the first line of output (JSON with connection info) + scanner := bufio.NewScanner(stdoutPipe) + var outputLine string + if scanner.Scan() { + outputLine = scanner.Text() + } + require.NoError(t, scanner.Err()) + + // Parse the JSON output + var connectOutput ConnectCliOutput + err = json.Unmarshal([]byte(outputLine), &connectOutput) + require.NoError(t, err) + + return connectOutput +}