rule_test.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package rule
  2. import (
  3. "ehang.io/nps/core/action"
  4. "ehang.io/nps/core/handler"
  5. "ehang.io/nps/core/limiter"
  6. "ehang.io/nps/core/process"
  7. "ehang.io/nps/core/server"
  8. "github.com/stretchr/testify/assert"
  9. "net"
  10. "testing"
  11. )
  12. func TestRule(t *testing.T) {
  13. ln, err := net.Listen("tcp", "127.0.0.1:0")
  14. assert.NoError(t, err)
  15. r := &Rule{
  16. Server: &server.TcpServer{ServerAddr: "127.0.0.1:0"},
  17. Handler: &handler.DefaultHandler{},
  18. Process: &process.DefaultProcess{},
  19. Action: &action.LocalAction{TargetAddr: []string{ln.Addr().String()}},
  20. Limiters: make([]limiter.Limiter, 0),
  21. }
  22. err = r.Init()
  23. assert.NoError(t, err)
  24. data := []byte("test")
  25. go func() {
  26. conn, err := ln.Accept()
  27. assert.NoError(t, err)
  28. b := make([]byte, 1024)
  29. n, err := conn.Read(b)
  30. assert.NoError(t, err)
  31. assert.Equal(t, data, b[:n])
  32. _, err = conn.Write(b[:n])
  33. assert.NoError(t, err)
  34. }()
  35. conn, err := net.Dial(r.Server.GetName(), r.Server.GetServerAddr())
  36. assert.NoError(t, err)
  37. _, err = conn.Write(data)
  38. assert.NoError(t, err)
  39. b := make([]byte, 1024)
  40. n, err := conn.Read(b)
  41. assert.NoError(t, err)
  42. assert.Equal(t, b[:n], data)
  43. }