123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //go:build !wasm
- // +build !wasm
- package buf_test
- import (
- "crypto/rand"
- "net"
- "testing"
- "github.com/google/go-cmp/cmp"
- "github.com/xtls/xray-core/common"
- . "github.com/xtls/xray-core/common/buf"
- "github.com/xtls/xray-core/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, nil)
- 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)
- }
- }
|