socks5_udp_test.go 996 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package handler
  2. import (
  3. "ehang.io/nps/lib/common"
  4. "ehang.io/nps/lib/enet"
  5. "github.com/stretchr/testify/assert"
  6. "net"
  7. "testing"
  8. )
  9. func TestSocks5Handle(t *testing.T) {
  10. h := Socks5UdpHandler{}
  11. rule := &testRule{}
  12. h.AddRule(rule)
  13. finish := make(chan struct{}, 0)
  14. pc, err := net.ListenPacket("udp", "127.0.0.1:0")
  15. assert.NoError(t, err)
  16. go func() {
  17. buf := make([]byte, 1024)
  18. n, addr, err := pc.ReadFrom(buf)
  19. assert.NoError(t, err)
  20. rPc := enet.NewReaderPacketConn(nil, buf[:n], addr)
  21. res, err := h.HandlePacketConn(rPc)
  22. assert.NoError(t, err)
  23. assert.Equal(t, true, res)
  24. assert.Equal(t, true, rule.run)
  25. finish <- struct{}{}
  26. }()
  27. data := []byte("test")
  28. go func() {
  29. cPc, err := net.ListenPacket("udp", "127.0.0.1:0")
  30. assert.NoError(t, err)
  31. pAddr, err := common.ParseAddr("8.8.8.8:53")
  32. assert.NoError(t, err)
  33. b := append([]byte{0, 0, 0}, pAddr...)
  34. b = append(b, data...)
  35. _, err = cPc.WriteTo(b, pc.LocalAddr())
  36. assert.NoError(t, err)
  37. }()
  38. <-finish
  39. }