schemaHttp_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package service
  2. import (
  3. "github.com/lf-edge/ekuiper/internal/testx"
  4. "net/http"
  5. "reflect"
  6. "testing"
  7. )
  8. func TestBookstoreConvertHttpMapping(t *testing.T) {
  9. tests := []struct {
  10. method string
  11. params []interface{}
  12. result *httpConnMeta
  13. err string
  14. }{
  15. { // 0 create book
  16. method: "CreateBook",
  17. params: []interface{}{
  18. 1984,
  19. map[string]interface{}{
  20. "id": 20210519,
  21. "author": "Conan Doyle",
  22. "title": "Sherlock Holmes",
  23. },
  24. },
  25. // int64 will be marshaled to string!
  26. result: &httpConnMeta{
  27. Method: http.MethodPost,
  28. Uri: "/v1/shelves/1984/books",
  29. Body: []byte(`{"id":"20210519","author":"Conan Doyle","title":"Sherlock Holmes"}`),
  30. },
  31. }, { // 2 delete book
  32. method: "DeleteBook",
  33. params: []interface{}{
  34. 1984,
  35. 20210519,
  36. },
  37. result: &httpConnMeta{
  38. Method: http.MethodDelete,
  39. Uri: "/v1/shelves/1984/books/20210519",
  40. },
  41. }, { // 3 list shelves
  42. method: "ListShelves",
  43. params: []interface{}{},
  44. result: &httpConnMeta{
  45. Method: http.MethodGet,
  46. Uri: "/v1/shelves",
  47. },
  48. },
  49. }
  50. d, err := parse(PROTOBUFF, "http_bookstore.proto")
  51. if err != nil {
  52. panic(err)
  53. }
  54. for i, tt := range tests {
  55. r, err := d.(httpMapping).ConvertHttpMapping(tt.method, tt.params)
  56. if !reflect.DeepEqual(tt.err, testx.Errstring(err)) {
  57. t.Errorf("%d : interface error mismatch:\n exp=%s\n got=%s\n\n", i, tt.err, err)
  58. } else if tt.err == "" && !reflect.DeepEqual(tt.result, r) {
  59. t.Errorf("%d \n\ninterface result mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, tt.result, r)
  60. }
  61. }
  62. }
  63. func TestMessagingConvertHttpMapping(t *testing.T) {
  64. tests := []struct {
  65. method string
  66. params []interface{}
  67. result *httpConnMeta
  68. err string
  69. }{
  70. { // 0 get message
  71. method: "GetMessage",
  72. params: []interface{}{
  73. "messages/123456",
  74. },
  75. // int64 will be marshaled to string!
  76. result: &httpConnMeta{
  77. Method: http.MethodGet,
  78. Uri: "/v1/messages/123456",
  79. },
  80. }, { // 1 get message prefix error
  81. method: "GetMessage",
  82. params: []interface{}{
  83. "message/123456",
  84. },
  85. err: "invalid field name(message/123456) as http option, must have prefix messages/",
  86. }, { // 2 search messages
  87. method: "SearchMessage",
  88. params: []interface{}{
  89. "123456",
  90. 2,
  91. map[string]interface{}{
  92. "subfield": "foo",
  93. },
  94. },
  95. result: &httpConnMeta{
  96. Method: http.MethodGet,
  97. Uri: "/v1/messages/filter/123456?revision=2&sub.subfield=foo",
  98. },
  99. }, { // 3 update message
  100. method: "UpdateMessage",
  101. params: []interface{}{
  102. "123456",
  103. map[string]interface{}{
  104. "text": "Hi!",
  105. },
  106. },
  107. result: &httpConnMeta{
  108. Method: http.MethodPut,
  109. Uri: "/v1/messages/123456",
  110. Body: []byte(`{"text":"Hi!"}`),
  111. },
  112. }, { // 4 patch message
  113. method: "PatchMessage",
  114. params: []interface{}{
  115. "123456",
  116. "Hi!",
  117. },
  118. result: &httpConnMeta{
  119. Method: http.MethodPatch,
  120. Uri: "/v1/messages/123456",
  121. Body: []byte(`{"text":"Hi!"}`),
  122. },
  123. },
  124. }
  125. d, err := parse(PROTOBUFF, "http_messaging.proto")
  126. if err != nil {
  127. panic(err)
  128. }
  129. for i, tt := range tests {
  130. r, err := d.(httpMapping).ConvertHttpMapping(tt.method, tt.params)
  131. if !reflect.DeepEqual(tt.err, testx.Errstring(err)) {
  132. t.Errorf("%d : interface error mismatch:\n exp=%s\n got=%s\n\n", i, tt.err, err)
  133. } else if tt.err == "" && !reflect.DeepEqual(tt.result, r) {
  134. t.Errorf("%d \n\ninterface result mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, tt.result, r)
  135. }
  136. }
  137. }