mirror of
https://github.com/ehang-io/nps.git
synced 2025-07-02 04:00:42 +00:00
114 lines
2.6 KiB
Go
114 lines
2.6 KiB
Go
package process
|
|
|
|
import (
|
|
"context"
|
|
"crypto/tls"
|
|
"ehang.io/nps/core/action"
|
|
"ehang.io/nps/lib/enet"
|
|
"ehang.io/nps/lib/pb"
|
|
"fmt"
|
|
"github.com/stretchr/testify/assert"
|
|
"net"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestProtobufProcess(t *testing.T) {
|
|
sAddr, err := startHttps(t)
|
|
assert.NoError(t, err)
|
|
|
|
h := &PbAppProcessor{}
|
|
ac := &action.LocalAction{
|
|
DefaultAction: action.DefaultAction{},
|
|
TargetAddr: []string{sAddr},
|
|
}
|
|
ac.Init()
|
|
err = h.Init(ac)
|
|
assert.NoError(t, err)
|
|
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
|
assert.NoError(t, err)
|
|
go func() {
|
|
for {
|
|
c, err := ln.Accept()
|
|
assert.NoError(t, err)
|
|
go func() {
|
|
_, _ = h.ProcessConn(enet.NewReaderConn(c))
|
|
_ = c.Close()
|
|
}()
|
|
}
|
|
}()
|
|
|
|
client := http.Client{Transport: &http.Transport{
|
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
|
MaxIdleConns: 10000,
|
|
IdleConnTimeout: 30 * time.Second,
|
|
DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) {
|
|
conn, err := net.Dial("tcp", ln.Addr().String())
|
|
_, err = pb.WriteMessage(conn, &pb.AppInfo{AppAddr: sAddr})
|
|
return conn, err
|
|
},
|
|
}}
|
|
|
|
resp, err := client.Get(fmt.Sprintf("https://%s%s", ln.Addr().String(), "/now"))
|
|
assert.NoError(t, err)
|
|
assert.NotEmpty(t, resp)
|
|
}
|
|
|
|
func TestProtobufUdpProcess(t *testing.T) {
|
|
finish := make(chan struct{}, 0)
|
|
lAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:0")
|
|
assert.NoError(t, err)
|
|
|
|
udpServer, err := net.ListenUDP("udp", lAddr)
|
|
assert.NoError(t, err)
|
|
|
|
h := &PbAppProcessor{}
|
|
ac := &action.LocalAction{
|
|
DefaultAction: action.DefaultAction{},
|
|
TargetAddr: []string{udpServer.LocalAddr().String()},
|
|
}
|
|
ac.Init()
|
|
err = h.Init(ac)
|
|
assert.NoError(t, err)
|
|
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
|
assert.NoError(t, err)
|
|
go func() {
|
|
for {
|
|
c, err := ln.Accept()
|
|
assert.NoError(t, err)
|
|
go func() {
|
|
_, _ = h.ProcessConn(enet.NewReaderConn(c))
|
|
_ = c.Close()
|
|
}()
|
|
}
|
|
}()
|
|
|
|
data := []byte{1, 2, 3, 4}
|
|
dataReturn := []byte{4, 5, 6, 7}
|
|
conn, err := net.Dial("tcp", ln.Addr().String())
|
|
_, err = pb.WriteMessage(conn, &pb.AppInfo{AppAddr: udpServer.LocalAddr().String(), ConnType: pb.ConnType_udp})
|
|
|
|
go func() {
|
|
b := make([]byte, 1024)
|
|
n, addr, err := udpServer.ReadFrom(b)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, b[:n], data)
|
|
|
|
_, err = udpServer.WriteTo(dataReturn, addr)
|
|
assert.NoError(t, err)
|
|
finish <- struct{}{}
|
|
}()
|
|
|
|
c := enet.NewTcpPacketConn(conn)
|
|
_, err = c.WriteTo(data, udpServer.LocalAddr())
|
|
assert.NoError(t, err)
|
|
|
|
<-finish
|
|
b := make([]byte, 1024)
|
|
n, addr, err := c.ReadFrom(b)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, dataReturn, b[:n])
|
|
assert.Equal(t, addr.String(), udpServer.LocalAddr().String())
|
|
}
|