| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package virtqueue
- import (
- "testing"
- "time"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "gvisor.dev/gvisor/pkg/eventfd"
- )
- // Tests how an eventfd and a waiting goroutine can be gracefully closed.
- // Extends the eventfd test suite:
- // https://github.com/google/gvisor/blob/0799336d64be65eb97d330606c30162dc3440cab/pkg/eventfd/eventfd_test.go
- func TestEventFD_CancelWait(t *testing.T) {
- efd, err := eventfd.Create()
- require.NoError(t, err)
- t.Cleanup(func() {
- assert.NoError(t, efd.Close())
- })
- var stop bool
- done := make(chan struct{})
- go func() {
- for !stop {
- _ = efd.Wait()
- }
- close(done)
- }()
- select {
- case <-done:
- t.Fatalf("goroutine ended early")
- case <-time.After(500 * time.Millisecond):
- }
- stop = true
- assert.NoError(t, efd.Notify())
- select {
- case <-done:
- break
- case <-time.After(5 * time.Second):
- t.Error("goroutine did not end")
- }
- }
|