mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-04-30 09:18:34 +00:00
v1.0.0
This commit is contained in:
parent
47d23e9972
commit
c7f7c08ead
711 changed files with 82154 additions and 2 deletions
72
common/buf/readv_test.go
Normal file
72
common/buf/readv_test.go
Normal file
|
@ -0,0 +1,72 @@
|
|||
// +build !wasm
|
||||
|
||||
package buf_test
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
|
||||
"github.com/xtls/xray-core/v1/common"
|
||||
. "github.com/xtls/xray-core/v1/common/buf"
|
||||
"github.com/xtls/xray-core/v1/testing/servers/tcp"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
func TestReadvReader(t *testing.T) {
|
||||
tcpServer := &tcp.Server{
|
||||
MsgProcessor: func(b []byte) []byte {
|
||||
return b
|
||||
},
|
||||
}
|
||||
dest, err := tcpServer.Start()
|
||||
common.Must(err)
|
||||
defer tcpServer.Close()
|
||||
|
||||
conn, err := net.Dial("tcp", dest.NetAddr())
|
||||
common.Must(err)
|
||||
defer conn.Close()
|
||||
|
||||
const size = 8192
|
||||
data := make([]byte, 8192)
|
||||
common.Must2(rand.Read(data))
|
||||
|
||||
var errg errgroup.Group
|
||||
errg.Go(func() error {
|
||||
writer := NewWriter(conn)
|
||||
mb := MergeBytes(nil, data)
|
||||
|
||||
return writer.WriteMultiBuffer(mb)
|
||||
})
|
||||
|
||||
defer func() {
|
||||
if err := errg.Wait(); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
}()
|
||||
|
||||
rawConn, err := conn.(*net.TCPConn).SyscallConn()
|
||||
common.Must(err)
|
||||
|
||||
reader := NewReadVReader(conn, rawConn)
|
||||
var rmb MultiBuffer
|
||||
for {
|
||||
mb, err := reader.ReadMultiBuffer()
|
||||
if err != nil {
|
||||
t.Fatal("unexpected error: ", err)
|
||||
}
|
||||
rmb, _ = MergeMulti(rmb, mb)
|
||||
if rmb.Len() == size {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
rdata := make([]byte, size)
|
||||
SplitBytes(rmb, rdata)
|
||||
|
||||
if r := cmp.Diff(data, rdata); r != "" {
|
||||
t.Fatal(r)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue