github.com/dshulyak/uring@v0.0.0-20210209113719-1b2ec51f1542/loop/poll_test.go (about) 1 package loop 2 3 import ( 4 "testing" 5 6 "github.com/dshulyak/uring" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestPoll(t *testing.T) { 11 ring, err := uring.Setup(64, nil) 12 require.NoError(t, err) 13 defer ring.Close() 14 pl, err := newPoll(1) 15 require.NoError(t, err) 16 defer pl.close() 17 18 require.NoError(t, ring.SetupEventfd()) 19 defer ring.CloseEventfd() 20 require.NoError(t, pl.addRead(int32(ring.Eventfd()))) 21 22 for i := uint64(1); i < 100; i++ { 23 for j := 0; j < 3; j++ { 24 sqe := ring.GetSQEntry() 25 uring.Nop(sqe) 26 sqe.SetUserData(i) 27 } 28 _, err = ring.Submit(0) 29 require.NoError(t, err) 30 require.NoError(t, pl.wait(func(efd int32) { 31 require.Equal(t, int32(ring.Eventfd()), efd) 32 })) 33 34 for j := 0; j < 3; j++ { 35 cqe, err := ring.GetCQEntry(0) 36 require.NoError(t, err) 37 require.Equal(t, i, cqe.UserData()) 38 } 39 } 40 }