| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | //go:build !wasm// +build !wasmpackage buf_testimport (	"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)	}}
 |