rule_json_test.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package rule
  2. import (
  3. "ehang.io/nps/core/action"
  4. "ehang.io/nps/core/handler"
  5. "ehang.io/nps/core/process"
  6. "ehang.io/nps/core/server"
  7. "encoding/json"
  8. "github.com/stretchr/testify/assert"
  9. "reflect"
  10. "testing"
  11. )
  12. func TestClone(t *testing.T) {
  13. type person struct {
  14. Name string
  15. Age int
  16. }
  17. a := &person{
  18. Name: "ALice",
  19. Age: 20,
  20. }
  21. b := clone(a).(*person)
  22. assert.Equal(t, a.Name, b.Name)
  23. assert.Equal(t, a.Age, b.Age)
  24. a.Name = "Bob"
  25. a.Age = 21
  26. assert.NotEqual(t, a.Name, b.Name)
  27. assert.NotEqual(t, a.Age, b.Age)
  28. assert.NotEqual(t, reflect.ValueOf(a).Pointer(), reflect.ValueOf(b).Pointer())
  29. }
  30. func getJson(t *testing.T, i interface{}) string {
  31. b, err := json.Marshal(i)
  32. assert.NoError(t, err)
  33. assert.NotEmpty(t, string(b))
  34. return string(b)
  35. }
  36. func TestJsonRule(t *testing.T) {
  37. s := &server.TcpServer{ ServerAddr: "127.0.0.1:0"}
  38. h := &handler.HttpHandler{}
  39. p := &process.HttpServeProcess{}
  40. a := &action.LocalAction{}
  41. js := JsonRule{
  42. Uuid: "",
  43. Server: JsonData{s.GetName(), getJson(t, s)},
  44. Handler: JsonData{h.GetName(), getJson(t, h)},
  45. Process: JsonData{p.GetName(), getJson(t, p)},
  46. Action: JsonData{a.GetName(), getJson(t, a)},
  47. Limiters: make([]JsonData, 0),
  48. }
  49. rl, err := js.ToRule()
  50. assert.NoError(t, err)
  51. err = rl.Init()
  52. assert.NoError(t, err)
  53. assert.Equal(t, rl.Server.(*server.TcpServer).ServerAddr, "127.0.0.1:0")
  54. }