mirror of
https://github.com/ehang-io/nps.git
synced 2025-07-02 04:00:42 +00:00
45 lines
996 B
Go
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
|
|
}
|