Files
v2ray_simple/advLayer/ws/ws_test.go
e1732a364fed cc758dec66 全面修订代码;完成 grpcSimple包;使用 tag选择编译quic 和 grpc
grpcSimple包的服务端和客户端现在都已完成,且兼容v2ray等内核。
grpcSimple包 简洁、高效,更加科学。暂不支持multiMode。

若 grpc_full 给出,则使用grpc包,否则默认使用 grpcSimple包。
若 noquic给出,则不使用 quic,否则 默认使用 quic。

修复 ws early 失效问题;
2022-04-28 05:41:56 +08:00

122 lines
2.1 KiB
Go

package ws_test
import (
"bytes"
"crypto/rand"
"encoding/base64"
"net"
"testing"
"github.com/e1732a364fed/v2ray_simple/advLayer/ws"
"github.com/e1732a364fed/v2ray_simple/netLayer"
)
func TestBase64Len(t *testing.T) {
var arr [2048]byte
str := base64.StdEncoding.EncodeToString(arr[:])
t.Log(len(str)) //2732
//t.Log((str)) //一堆A后面跟一个等号
}
// ws基本读写功能测试.
// 分别测试写入短数据和长数据
func TestWs(t *testing.T) {
listenAddr := netLayer.GetRandLocalAddr(true, false)
listener, err := net.Listen("tcp", listenAddr)
if err != nil {
t.Log(err)
t.FailNow()
}
wsPath := "/thepath"
bigBytes := make([]byte, 10240)
n, err := rand.Reader.Read(bigBytes)
if err != nil || n != 10240 {
t.Log(err)
t.FailNow()
}
go func() {
conn, err := listener.Accept()
if err != nil {
t.Log(err)
t.Fail()
return
}
s := ws.NewServer(wsPath, nil, false)
wsConn, err := s.Handshake(nil, conn)
if err != nil {
t.Log(err)
t.Fail()
return
}
bs := make([]byte, 1500)
msgCount := 0
for {
n, err := wsConn.Read(bs)
if err != nil {
t.Log(err)
t.Fail()
return
}
nbs := bs[:n]
t.Log("listener got", n, string(nbs))
if msgCount == 0 {
wsConn.Write([]byte("world"))
} else {
wsConn.Write(bigBytes)
}
msgCount++
}
}()
cli, err := ws.NewClient(listenAddr, wsPath, nil, false)
if err != nil {
t.Log(err)
t.FailNow()
}
tcpConn, err := net.Dial("tcp", listenAddr)
if err != nil {
t.Log(err)
t.FailNow()
}
wsConn, err := cli.Handshake(tcpConn, nil)
if err != nil {
t.Log(err)
t.FailNow()
}
_, err = wsConn.Write([]byte("hello"))
if err != nil {
t.Log(err)
t.FailNow()
}
bs := make([]byte, 15000)
n, err = wsConn.Read(bs)
if err != nil {
t.Log(err)
t.FailNow()
}
t.Log("client got", n, string(bs[:n]))
_, err = wsConn.Write([]byte("hello2"))
if err != nil {
t.Log(err)
t.FailNow()
}
n, err = wsConn.Read(bs)
if err != nil {
t.Log(err)
t.FailNow()
}
if n != len(bigBytes) || !bytes.Equal(bs[:n], bigBytes) {
t.Log("not equal", n)
t.FailNow()
}
}