manager_test.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. package services
  2. import (
  3. "github.com/emqx/kuiper/xsql"
  4. "reflect"
  5. "testing"
  6. )
  7. var m *Manager
  8. func init() {
  9. m, _ = GetServiceManager()
  10. m.InitByFiles()
  11. xsql.InitFuncRegisters(m)
  12. }
  13. func TestInitByFiles(t *testing.T) {
  14. //expects
  15. name := "sample"
  16. info := &serviceInfo{
  17. About: &about{
  18. Author: &author{
  19. Name: "EMQ",
  20. Email: "contact@emqx.io",
  21. Company: "EMQ Technologies Co., Ltd",
  22. Website: "https://www.emqx.io",
  23. },
  24. HelpUrl: &fileLanguage{
  25. English: "https://github.com/emqx/kuiper/blob/master/docs/en_US/plugins/functions/functions.md",
  26. Chinese: "https://github.com/emqx/kuiper/blob/master/docs/zh_CN/plugins/functions/functions.md",
  27. },
  28. Description: &fileLanguage{
  29. English: "Sample external services for test only",
  30. Chinese: "示例外部函数配置,仅供测试",
  31. },
  32. },
  33. Interfaces: map[string]*interfaceInfo{
  34. "tsrpc": {
  35. Addr: "tcp://localhost:50051",
  36. Protocol: GRPC,
  37. Schema: &schemaInfo{
  38. SchemaType: PROTOBUFF,
  39. SchemaFile: "hw.proto",
  40. },
  41. Functions: []string{
  42. "helloFromGrpc",
  43. "ComputeFromGrpc",
  44. "getFeatureFromGrpc",
  45. "objectDetectFromGrpc",
  46. "getStatusFromGrpc",
  47. },
  48. },
  49. "tsrest": {
  50. Addr: "http://localhost:51234",
  51. Protocol: REST,
  52. Schema: &schemaInfo{
  53. SchemaType: PROTOBUFF,
  54. SchemaFile: "hw.proto",
  55. },
  56. Options: map[string]interface{}{
  57. "insecureSkipVerify": true,
  58. "headers": map[string]interface{}{
  59. "Accept-Charset": "utf-8",
  60. },
  61. },
  62. Functions: []string{
  63. "helloFromRest",
  64. "ComputeFromRest",
  65. "getFeatureFromRest",
  66. "objectDetectFromRest",
  67. "getStatusFromRest",
  68. },
  69. },
  70. "tsmsgpack": {
  71. Addr: "tcp://localhost:50000",
  72. Protocol: MSGPACK,
  73. Schema: &schemaInfo{
  74. SchemaType: PROTOBUFF,
  75. SchemaFile: "hw.proto",
  76. },
  77. Functions: []string{
  78. "helloFromMsgpack",
  79. "ComputeFromMsgpack",
  80. "getFeatureFromMsgpack",
  81. "objectDetectFromMsgpack",
  82. "getStatusFromMsgpack",
  83. },
  84. },
  85. },
  86. }
  87. funcs := map[string]*functionContainer{
  88. "helloFromGrpc": {
  89. ServiceName: "sample",
  90. InterfaceName: "tsrpc",
  91. MethodName: "SayHello",
  92. },
  93. "helloFromRest": {
  94. ServiceName: "sample",
  95. InterfaceName: "tsrest",
  96. MethodName: "SayHello",
  97. },
  98. "helloFromMsgpack": {
  99. ServiceName: "sample",
  100. InterfaceName: "tsmsgpack",
  101. MethodName: "SayHello",
  102. },
  103. "objectDetectFromGrpc": {
  104. ServiceName: "sample",
  105. InterfaceName: "tsrpc",
  106. MethodName: "object_detection",
  107. },
  108. "objectDetectFromRest": {
  109. ServiceName: "sample",
  110. InterfaceName: "tsrest",
  111. MethodName: "object_detection",
  112. },
  113. "objectDetectFromMsgpack": {
  114. ServiceName: "sample",
  115. InterfaceName: "tsmsgpack",
  116. MethodName: "object_detection",
  117. },
  118. "getFeatureFromGrpc": {
  119. ServiceName: "sample",
  120. InterfaceName: "tsrpc",
  121. MethodName: "get_feature",
  122. },
  123. "getFeatureFromRest": {
  124. ServiceName: "sample",
  125. InterfaceName: "tsrest",
  126. MethodName: "get_feature",
  127. },
  128. "getFeatureFromMsgpack": {
  129. ServiceName: "sample",
  130. InterfaceName: "tsmsgpack",
  131. MethodName: "get_feature",
  132. },
  133. "getStatusFromGrpc": {
  134. ServiceName: "sample",
  135. InterfaceName: "tsrpc",
  136. MethodName: "getStatus",
  137. },
  138. "getStatusFromRest": {
  139. ServiceName: "sample",
  140. InterfaceName: "tsrest",
  141. MethodName: "getStatus",
  142. },
  143. "getStatusFromMsgpack": {
  144. ServiceName: "sample",
  145. InterfaceName: "tsmsgpack",
  146. MethodName: "getStatus",
  147. },
  148. "ComputeFromGrpc": {
  149. ServiceName: "sample",
  150. InterfaceName: "tsrpc",
  151. MethodName: "Compute",
  152. },
  153. "ComputeFromRest": {
  154. ServiceName: "sample",
  155. InterfaceName: "tsrest",
  156. MethodName: "Compute",
  157. },
  158. "ComputeFromMsgpack": {
  159. ServiceName: "sample",
  160. InterfaceName: "tsmsgpack",
  161. MethodName: "Compute",
  162. },
  163. }
  164. err := m.serviceKV.Open()
  165. if err != nil {
  166. t.Error(err)
  167. t.FailNow()
  168. }
  169. defer m.serviceKV.Close()
  170. actualService := &serviceInfo{}
  171. ok, err := m.serviceKV.Get(name, actualService)
  172. if err != nil {
  173. t.Error(err)
  174. t.FailNow()
  175. }
  176. if !ok {
  177. t.Errorf("service %s not found", name)
  178. t.FailNow()
  179. }
  180. if !reflect.DeepEqual(info, actualService) {
  181. t.Errorf("service info mismatch, expect %v but got %v", info, actualService)
  182. }
  183. err = m.functionKV.Open()
  184. if err != nil {
  185. t.Error(err)
  186. t.FailNow()
  187. }
  188. defer m.functionKV.Close()
  189. actualKeys, _ := m.functionKV.Keys()
  190. if len(funcs) != len(actualKeys) {
  191. t.Errorf("functions info mismatch: expect %d funcs but got %v", len(funcs), actualKeys)
  192. }
  193. for f, c := range funcs {
  194. actualFunc := &functionContainer{}
  195. ok, err := m.functionKV.Get(f, actualFunc)
  196. if err != nil {
  197. t.Error(err)
  198. break
  199. }
  200. if !ok {
  201. t.Errorf("function %s not found", f)
  202. break
  203. }
  204. if !reflect.DeepEqual(c, actualFunc) {
  205. t.Errorf("func info mismatch, expect %v but got %v", c, actualFunc)
  206. }
  207. }
  208. }