ip_conn_num_test.go 661 B

1234567891011121314151617181920212223242526272829303132333435
  1. package limiter
  2. import (
  3. "ehang.io/nps/lib/enet"
  4. "github.com/stretchr/testify/assert"
  5. "net"
  6. "testing"
  7. )
  8. func TestIpConnNumLimiter(t *testing.T) {
  9. cl := IpConnNumLimiter{MaxNum: 5}
  10. assert.NoError(t, cl.Init())
  11. ln, err := net.Listen("tcp", "127.0.0.1:0")
  12. assert.NoError(t, err)
  13. nowNum := 0
  14. close := make(chan struct{})
  15. go func() {
  16. for {
  17. c, err := ln.Accept()
  18. assert.NoError(t, err)
  19. nowNum++
  20. _, err = cl.DoLimit(enet.NewReaderConn(c))
  21. if nowNum > 5 {
  22. assert.Error(t, err)
  23. close <- struct{}{}
  24. } else {
  25. assert.NoError(t, err)
  26. }
  27. }
  28. }()
  29. for i := 6; i > 0; i-- {
  30. go net.Dial("tcp", ln.Addr().String())
  31. }
  32. <-close
  33. }