mirror of
https://github.com/ii64/gouring.git
synced 2024-10-18 15:11:09 +02:00
chore: test code
Signed-off-by: Nugraha <26342994+ii64@users.noreply.github.com>
This commit is contained in:
parent
0d089ce00d
commit
c232c10e24
1 changed files with 155 additions and 5 deletions
|
@ -1,16 +1,166 @@
|
|||
package syscall
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"syscall"
|
||||
"testing"
|
||||
"unsafe"
|
||||
"time"
|
||||
|
||||
"github.com/ii64/gouring"
|
||||
"github.com/ii64/gouring/queue"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestAccept(t *testing.T) {
|
||||
func initRing(t *testing.T) (ring *gouring.Ring, q *queue.Queue, cq chan *gouring.CQEntry) {
|
||||
ring, err := gouring.New(128, nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
q = queue.New(ring)
|
||||
|
||||
var raw syscall.RawSockaddrAny
|
||||
cq = make(chan *gouring.CQEntry)
|
||||
|
||||
t.Logf("%d\n", unsafe.Sizeof(raw))
|
||||
go q.RunPoll(true, 1, func(cqe *gouring.CQEntry) (err error) {
|
||||
fmt.Printf("got cqe: %+#v\n", cqe)
|
||||
cq <- cqe
|
||||
return nil
|
||||
})
|
||||
|
||||
t.Fail()
|
||||
go func() {
|
||||
<-time.After(5 * time.Second)
|
||||
t.Logf("timeout")
|
||||
t.Fail()
|
||||
}()
|
||||
return
|
||||
}
|
||||
|
||||
// func TestAccept(t *testing.T) {
|
||||
// sqe := q.GetSQEntry()
|
||||
// }
|
||||
|
||||
func TestRead(t *testing.T) {
|
||||
ring, q, cq := initRing(t)
|
||||
defer q.Close()
|
||||
defer ring.Close()
|
||||
|
||||
var f *os.File
|
||||
var err error
|
||||
f, err = os.Open("/dev/urandom")
|
||||
assert.NoError(t, err, "urandom")
|
||||
fd := f.Fd()
|
||||
defer f.Close()
|
||||
|
||||
b := make([]byte, 25)
|
||||
ud := uint64(gouring.IORING_OP_READ)
|
||||
sqe := q.GetSQEntry()
|
||||
Read(sqe, int(fd), b)
|
||||
sqe.UserData = ud
|
||||
|
||||
ret, err := q.Submit()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 1, ret, "mismatch submit return value")
|
||||
|
||||
cqe := <-cq
|
||||
assert.Equal(t, ud, cqe.UserData)
|
||||
assert.Equal(t, len(b), int(cqe.Res))
|
||||
}
|
||||
|
||||
func TestReadv(t *testing.T) {
|
||||
ring, q, cq := initRing(t)
|
||||
defer q.Close()
|
||||
defer ring.Close()
|
||||
|
||||
var f *os.File
|
||||
var err error
|
||||
f, err = os.Open("/dev/urandom")
|
||||
assert.NoError(t, err, "urandom")
|
||||
fd := f.Fd()
|
||||
defer f.Close()
|
||||
|
||||
bs := [][]byte{}
|
||||
bN := 25
|
||||
iovs := []syscall.Iovec{}
|
||||
iovN := 5
|
||||
for i := 0; i < iovN; i++ {
|
||||
b := make([]byte, bN)
|
||||
bs = append(bs, b)
|
||||
iovs = append(iovs, syscall.Iovec{
|
||||
Base: &b[0],
|
||||
Len: uint64(len(b)),
|
||||
})
|
||||
}
|
||||
|
||||
ud := uint64(gouring.IORING_OP_READV)
|
||||
sqe := q.GetSQEntry()
|
||||
Readv(sqe, int(fd), iovs)
|
||||
sqe.UserData = ud
|
||||
|
||||
ret, err := q.Submit()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 1, ret, "mismatch submit return value")
|
||||
|
||||
cqe := <-cq
|
||||
assert.Equal(t, ud, cqe.UserData)
|
||||
assert.Equal(t, bN*iovN, int(cqe.Res))
|
||||
|
||||
eb := make([]byte, bN)
|
||||
for i := 0; i < iovN; i++ {
|
||||
if bytes.Compare(bs[i], eb) == 0 {
|
||||
assert.NotEqual(t, eb, bs[i], "read urandom")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestWrite(t *testing.T) {
|
||||
ring, q, cq := initRing(t)
|
||||
defer q.Close()
|
||||
defer ring.Close()
|
||||
|
||||
wr := "hello"
|
||||
ud := uint64(gouring.IORING_OP_WRITE)
|
||||
sqe := q.GetSQEntry()
|
||||
Write(sqe, syscall.Stdout, []byte(wr))
|
||||
sqe.UserData = ud
|
||||
|
||||
ret, err := q.Submit()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 1, ret, "mismatch submit return value")
|
||||
|
||||
cqe := <-cq
|
||||
assert.Equal(t, ud, cqe.UserData)
|
||||
assert.Equal(t, len(wr), int(cqe.Res))
|
||||
}
|
||||
|
||||
func TestWritev(t *testing.T) {
|
||||
ring, q, cq := initRing(t)
|
||||
defer q.Close()
|
||||
defer ring.Close()
|
||||
|
||||
wr := "hello\n"
|
||||
bs := [][]byte{}
|
||||
iovs := []syscall.Iovec{}
|
||||
iovN := 5
|
||||
for i := 0; i < iovN; i++ {
|
||||
b := []byte(wr)
|
||||
bs = append(bs, b)
|
||||
iovs = append(iovs, syscall.Iovec{
|
||||
Base: &b[0],
|
||||
Len: uint64(len(b)),
|
||||
})
|
||||
}
|
||||
|
||||
ud := uint64(gouring.IORING_OP_WRITEV)
|
||||
sqe := q.GetSQEntry()
|
||||
Writev(sqe, syscall.Stdout, iovs)
|
||||
sqe.UserData = ud
|
||||
|
||||
ret, err := q.Submit()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 1, ret, "mismatch submit retrun value")
|
||||
|
||||
cqe := <-cq
|
||||
assert.Equal(t, ud, cqe.UserData)
|
||||
assert.Equal(t, len(wr)*iovN, int(cqe.Res))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue