Disable disk-based recording for TestWebAgentForward (#19580)

Also improve the correctness of web tests that use waitForOutput
by checking if the output was received even when the read fails
with an error.

Fixes #17918
This commit is contained in:
Zac Bergquist 2022-12-22 14:13:47 -07:00 committed by GitHub
parent c286e4cd94
commit 749dbcd5a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -166,6 +166,8 @@ func newWebSuite(t *testing.T) *WebSuite {
type webSuiteConfig struct {
// AuthPreferenceSpec is custom initial AuthPreference spec for the test.
authPreferenceSpec *types.AuthPreferenceSpecV2
disableDiskBasedRecording bool
}
func newWebSuiteWithConfig(t *testing.T, cfg webSuiteConfig) *WebSuite {
@ -190,17 +192,33 @@ func newWebSuiteWithConfig(t *testing.T, cfg webSuiteConfig) *WebSuite {
})
require.NoError(t, err)
s.server, err = auth.NewTestServer(auth.TestServerConfig{
authCfg := auth.TestServerConfig{
Auth: auth.TestAuthServerConfig{
ClusterName: "localhost",
Dir: t.TempDir(),
Clock: s.clock,
ClusterNetworkingConfig: networkingConfig,
AuthPreferenceSpec: cfg.authPreferenceSpec,
AuthPreferenceSpec: cfg.authPreferenceSpec,
},
})
}
if cfg.disableDiskBasedRecording {
authCfg.Auth.AuditLog = events.NewDiscardAuditLog()
}
s.server, err = auth.NewTestServer(authCfg)
require.NoError(t, err)
if cfg.disableDiskBasedRecording {
// use a sync recording mode because the disk-based uploader
// that runs in the background introduces races with test cleanup
recConfig := types.DefaultSessionRecordingConfig()
recConfig.SetMode(types.RecordAtNodeSync)
err := s.server.AuthServer.AuthServer.SetSessionRecordingConfig(context.Background(), recConfig)
require.NoError(t, err)
}
// Register the auth server, since test auth server doesn't start its own
// heartbeat.
err = s.server.Auth().UpsertAuthServer(&types.ServerV2{
@ -1784,7 +1802,7 @@ func handleMFAWebauthnChallenge(t *testing.T, ws *websocket.Conn, dev *auth.Test
func TestWebAgentForward(t *testing.T) {
t.Parallel()
s := newWebSuite(t)
s := newWebSuiteWithConfig(t, webSuiteConfig{disableDiskBasedRecording: true})
ws, _, err := s.makeTerminal(t, s.authPack(t, "foo"))
require.NoError(t, err)
t.Cleanup(func() { require.NoError(t, ws.Close()) })
@ -6084,13 +6102,16 @@ func waitForOutput(stream *terminalStream, substr string) error {
}
out := make([]byte, 100)
_, err := stream.Read(out)
n, err := stream.Read(out)
// check for the string before checking the error,
// as it's valid for n > 0 even when there is an error
if n > 0 && strings.Contains(removeSpace(string(out[:n])), substr) {
return nil
}
if err != nil {
return trace.Wrap(err)
}
if strings.Contains(removeSpace(string(out)), substr) {
return nil
}
}
}