123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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())
- }
|