Skip to content

Commit

Permalink
Fix data race in x11 forwarding test. (#51006)
Browse files Browse the repository at this point in the history
  • Loading branch information
Joerger authored Jan 14, 2025
1 parent e83d69d commit df3a6a9
Showing 1 changed file with 21 additions and 15 deletions.
36 changes: 21 additions & 15 deletions lib/srv/regular/sshserver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1197,24 +1197,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)

// 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
}, 5*time.Second, 10*time.Millisecond, "failed to read display")
// 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)

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 df3a6a9

Please sign in to comment.