Skip to content

Commit

Permalink
Fix racy X11 forwarding test (#48069)
Browse files Browse the repository at this point in the history
{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
  • Loading branch information
zmb3 authored Oct 29, 2024
1 parent c3a475e commit 7d9b612
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions integration/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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())))
Expand All @@ -4749,15 +4749,15 @@ 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
}, time.Second, 100*time.Millisecond, "failed to read display")
}, 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()
Expand Down

0 comments on commit 7d9b612

Please sign in to comment.