nps/core/handler/socks5_udp_test.go
2022-01-23 17:30:38 +08:00

45 lines
996 B
Go

package handler
import (
"ehang.io/nps/lib/common"
"ehang.io/nps/lib/enet"
"github.com/stretchr/testify/assert"
"net"
"testing"
)
func TestSocks5Handle(t *testing.T) {
h := Socks5UdpHandler{}
rule := &testRule{}
h.AddRule(rule)
finish := make(chan struct{}, 0)
pc, err := net.ListenPacket("udp", "127.0.0.1:0")
assert.NoError(t, err)
go func() {
buf := make([]byte, 1024)
n, addr, err := pc.ReadFrom(buf)
assert.NoError(t, err)
rPc := enet.NewReaderPacketConn(nil, buf[:n], addr)
res, err := h.HandlePacketConn(rPc)
assert.NoError(t, err)
assert.Equal(t, true, res)
assert.Equal(t, true, rule.run)
finish <- struct{}{}
}()
data := []byte("test")
go func() {
cPc, err := net.ListenPacket("udp", "127.0.0.1:0")
assert.NoError(t, err)
pAddr, err := common.ParseAddr("8.8.8.8:53")
assert.NoError(t, err)
b := append([]byte{0, 0, 0}, pAddr...)
b = append(b, data...)
_, err = cPc.WriteTo(b, pc.LocalAddr())
assert.NoError(t, err)
}()
<-finish
}