From 7d9b61210d9550cb926816a020d00b25103fdd21 Mon Sep 17 00:00:00 2001 From: Zac Bergquist Date: Tue, 29 Oct 2024 10:56:53 -0600 Subject: [PATCH] Fix racy X11 forwarding test (#48069) {require,assert}.Eventually run the passed in func on a new goroutine for each attempt, so it's not safe to write to a shared variable without any synchronization. Closes #47756 --- integration/integration_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/integration/integration_test.go b/integration/integration_test.go index bad3f826bd7f8..f49dfb06f5e0c 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -4740,7 +4740,7 @@ func testX11Forwarding(t *testing.T, suite *integrationTestSuite) { // Reading the display may fail if the session is not fully initialized // and the write to stdin is swallowed. - var display string + display := make(chan string, 1) require.EventuallyWithT(t, func(t *assert.CollectT) { // enter 'printenv DISPLAY > /path/to/tmp/file' into the session (dumping the value of DISPLAY into the temp file) _, err = keyboard.Write([]byte(fmt.Sprintf("printenv %v > %s\n\r", x11.DisplayEnv, tmpFile.Name()))) @@ -4749,7 +4749,7 @@ func testX11Forwarding(t *testing.T, suite *integrationTestSuite) { assert.Eventually(t, func() bool { output, err := os.ReadFile(tmpFile.Name()) if err == nil && len(output) != 0 { - display = strings.TrimSpace(string(output)) + display <- strings.TrimSpace(string(output)) return true } return false @@ -4757,7 +4757,7 @@ func testX11Forwarding(t *testing.T, suite *integrationTestSuite) { }, 10*time.Second, time.Second) // Make a new connection to the XServer proxy to confirm that forwarding is working. - serverDisplay, err := x11.ParseDisplay(display) + serverDisplay, err := x11.ParseDisplay(<-display) require.NoError(t, err) conn, err := serverDisplay.Dial()