| package jsonstream |
| |
| import ( |
| "context" |
| "io" |
| "testing" |
| "time" |
| |
| "github.com/docker/cli/cli/streams" |
| "gotest.tools/v3/assert" |
| ) |
| |
| func TestDisplay(t *testing.T) { |
| ctx, cancel := context.WithCancel(context.Background()) |
| t.Cleanup(cancel) |
| |
| client, server := io.Pipe() |
| t.Cleanup(func() { |
| assert.NilError(t, server.Close()) |
| }) |
| |
| go func() { |
| for range 100 { |
| select { |
| case <-ctx.Done(): |
| assert.NilError(t, server.Close(), "failed to close jsonmessage server") |
| return |
| default: |
| time.Sleep(100 * time.Millisecond) |
| } |
| } |
| }() |
| |
| streamCtx, cancelStream := context.WithCancel(context.Background()) |
| t.Cleanup(cancelStream) |
| |
| done := make(chan error) |
| go func() { |
| done <- Display(streamCtx, client, streams.NewOut(io.Discard)) |
| }() |
| |
| cancelStream() |
| |
| select { |
| case <-time.After(time.Second * 3): |
| case err := <-done: |
| assert.ErrorIs(t, err, context.Canceled) |
| } |
| } |