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  }