Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 30 additions & 30 deletions tool/tsh/tsh_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -365,39 +365,40 @@ func TestOIDCLogin(t *testing.T) {
proxyAddr, err := proxyProcess.ProxyWebAddr()
require.NoError(t, err)

// set up watcher to approve the automatic request in background
var didAutoRequest atomic.Bool
watcher, err := authServer.NewWatcher(ctx, types.Watch{
Kinds: []types.WatchKind{
{Kind: types.KindAccessRequest},
},
})
require.NoError(t, err)

// ensure that we observe init event prior to moving watcher to background
// goroutine (ensures watcher init does not race with request creation).
select {
case event := <-watcher.Events():
require.Equal(t, event.Type, types.OpInit)
case <-watcher.Done():
require.FailNow(t, "watcher closed unexpected", "err: %v", watcher.Error())
}

errCh := make(chan error)
go func() {
watcher, err := authServer.NewWatcher(ctx, types.Watch{
Kinds: []types.WatchKind{
{Kind: types.KindAccessRequest},
},
})
if err != nil {
errCh <- err
return
}
for {
select {
case event := <-watcher.Events():
if event.Type != types.OpPut {
continue
}
err = authServer.SetAccessRequestState(ctx, types.AccessRequestUpdate{
RequestID: event.Resource.(types.AccessRequest).GetName(),
State: types.RequestState_APPROVED,
})
didAutoRequest.Store(true)
errCh <- err
return
case <-watcher.Done():
errCh <- nil
return
case <-ctx.Done():
errCh <- nil
return
select {
case event := <-watcher.Events():
if event.Type != types.OpPut {
panic(fmt.Sprintf("unexpected event type: %v\n", event))
}
err = authServer.SetAccessRequestState(ctx, types.AccessRequestUpdate{
RequestID: event.Resource.(types.AccessRequest).GetName(),
State: types.RequestState_APPROVED,
})
if err != nil {
panic(fmt.Sprintf("failed to approve request: %v", err))
}
didAutoRequest.Store(true)
case <-watcher.Done():
panic(fmt.Sprintf("watcher exited unexpectedly: %v", watcher.Error()))
}
}()

Expand All @@ -418,7 +419,6 @@ func TestOIDCLogin(t *testing.T) {
})

require.NoError(t, err)
require.NoError(t, <-errCh)

// verify that auto-request happened
require.True(t, didAutoRequest.Load())
Expand Down