mirror of https://github.com/XTLS/Xray-core
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.3 KiB
72 lines
1.3 KiB
// +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) |
|
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) |
|
} |
|
}
|
|
|