github.com/dshulyak/uring@v0.0.0-20210209113719-1b2ec51f1542/fs/fixed_test.go (about)

     1  package fs
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/dshulyak/uring/loop"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func makeFiles(tb testing.TB, n int) []*os.File {
    13  	tb.Helper()
    14  	files := make([]*os.File, n)
    15  	for i := range files {
    16  		f, err := ioutil.TempFile("", "testing-fixed-")
    17  		require.NoError(tb, err)
    18  		tb.Cleanup(func() {
    19  			os.Remove(f.Name())
    20  		})
    21  		files[i] = f
    22  	}
    23  	return files
    24  }
    25  
    26  func TestFixedFiles(t *testing.T) {
    27  	queue, err := loop.Setup(32, nil, nil)
    28  	require.NoError(t, err)
    29  	defer queue.Close()
    30  
    31  	ff := newFixedFiles(queue, 10)
    32  	files := makeFiles(t, 10)
    33  
    34  	for i, f := range files {
    35  		idx, err := ff.register(f.Fd())
    36  		require.NoError(t, err)
    37  		require.Equal(t, i, int(idx))
    38  	}
    39  	for i := range files {
    40  		require.NoError(t, ff.unregister(uintptr(i)))
    41  	}
    42  	for i, f := range files {
    43  		idx, err := ff.register(f.Fd())
    44  		require.NoError(t, err)
    45  		require.Equal(t, i, int(idx))
    46  	}
    47  	files2 := makeFiles(t, 5)
    48  	for i, f := range files2 {
    49  		idx, err := ff.register(f.Fd())
    50  		require.NoError(t, err)
    51  		require.Equal(t, i+len(files), int(idx))
    52  	}
    53  
    54  }