quic_test.go 838 B

1234567891011121314151617181920212223242526272829303132333435
  1. package handler
  2. import (
  3. "crypto/tls"
  4. "ehang.io/nps/lib/enet"
  5. "github.com/lucas-clemente/quic-go"
  6. "github.com/stretchr/testify/assert"
  7. "net"
  8. "testing"
  9. )
  10. func TestHandleQUICPacket(t *testing.T) {
  11. h := QUICHandler{}
  12. rule := &testRule{}
  13. h.AddRule(rule)
  14. finish := make(chan struct{}, 0)
  15. packetConn, err := net.ListenPacket("udp", "127.0.0.1:0")
  16. assert.NoError(t, err)
  17. go func() {
  18. b := make([]byte, 1500)
  19. n, addr, err := packetConn.ReadFrom(b)
  20. assert.NoError(t, err)
  21. pc := enet.NewReaderPacketConn(nil, b[:n], packetConn.LocalAddr())
  22. assert.NoError(t, pc.SendPacket(b[:n], addr))
  23. res, err := h.HandlePacketConn(pc)
  24. assert.NoError(t, err)
  25. assert.Equal(t, true, res)
  26. assert.Equal(t, true, rule.run)
  27. finish <- struct{}{}
  28. }()
  29. go quic.DialAddr(packetConn.LocalAddr().String(), &tls.Config{}, nil)
  30. <-finish
  31. }