Skip to content

Commit

Permalink
Fix data race in x11 forwarding test. (#50997)
Browse files Browse the repository at this point in the history
  • Loading branch information
Joerger authored Jan 13, 2025
1 parent ce30037 commit 4034d7c
Showing 1 changed file with 20 additions and 14 deletions.
34 changes: 20 additions & 14 deletions lib/srv/regular/sshserver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1349,24 +1349,30 @@ func x11EchoSession(ctx context.Context, t *testing.T, clt *tracessh.Client) x11
os.Remove(tmpFile.Name())
})

// type '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())))
require.NoError(t, err)
// Reading the display may fail if the session is not fully initialized
// and the write to stdin is swallowed.
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())))
assert.NoError(t, err)

// wait for the output
var display string
require.Eventually(t, func() bool {
output, err := os.ReadFile(tmpFile.Name())
if err == nil && len(output) != 0 {
display = strings.TrimSpace(string(output))
return true
}
return false
}, 10*time.Second, 100*time.Millisecond, "failed to read display")
assert.Eventually(t, func() bool {
output, err := os.ReadFile(tmpFile.Name())
if err == nil && len(output) != 0 {
select {
case display <- strings.TrimSpace(string(output)):
default:
}
return true
}
return false
}, time.Second, 100*time.Millisecond, "failed to read display")
}, 10*time.Second, 1*time.Second)

// Make a new connection to the XServer proxy, the client
// XServer should echo back anything written on it.
serverDisplay, err := x11.ParseDisplay(display)
serverDisplay, err := x11.ParseDisplay(<-display)
require.NoError(t, err)

return serverDisplay
Expand Down

0 comments on commit 4034d7c

Please sign in to comment.