invoke_test.go 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. package test
  2. import (
  3. "context"
  4. "fmt"
  5. "git.sxidc.com/service-supports/dapr_api/invoke"
  6. "github.com/stretchr/testify/assert"
  7. "io"
  8. "net/http"
  9. "sync"
  10. "testing"
  11. "time"
  12. )
  13. const (
  14. invokeServerAddress = "localhost:10081"
  15. baseUrl = "http://localhost:10081"
  16. daprBaseUrl = "http://localhost:10080/v1.0/invoke/dapr_api/method"
  17. postJsonMethodName = "/post-json"
  18. deleteJsonMethodName = "/delete-json"
  19. putJsonMethodName = "/put-json"
  20. getJsonMethodName = "/get-json"
  21. postMethodName = "/post"
  22. deleteMethodName = "/delete"
  23. putMethodName = "/put"
  24. getMethodName = "/get"
  25. postJsonData = `"{"data":"post-json"}"`
  26. postData = `post`
  27. putJsonData = `"{"data":"put-json"}"`
  28. putData = `put`
  29. postJsonResponse = `"{"data":"response-post-json"}"`
  30. postResponse = `response-post`
  31. deleteJsonResponse = `"{"data":"response-delete-json"}"`
  32. deleteResponse = `response-delete`
  33. putJsonResponse = `"{"data":"response-put-json"}"`
  34. putResponse = `response-put`
  35. getJsonResponse = `"{"data":"response-get-json"}"`
  36. getResponse = `response-get`
  37. )
  38. func TestPostJSON(t *testing.T) {
  39. api := invoke.NewAPI(baseUrl, 10*time.Second)
  40. defer invoke.DestroyAPI(api)
  41. daprAPI := invoke.NewAPI(daprBaseUrl, 10*time.Second)
  42. defer invoke.DestroyAPI(daprAPI)
  43. wg := &sync.WaitGroup{}
  44. wg.Add(2)
  45. wgServer := &sync.WaitGroup{}
  46. wgServer.Add(1)
  47. srv := initInvokeHttpServer(t, wgServer, wg)
  48. wgServer.Wait()
  49. response, err := api.PostJSON(postJsonMethodName, []byte(postJsonData))
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. assert.Equal(t, postJsonResponse, string(response), "响应不一致")
  54. daprResponse, err := daprAPI.PostJSON(postJsonMethodName, []byte(postJsonData))
  55. if err != nil {
  56. t.Fatal(err)
  57. }
  58. assert.Equal(t, postJsonResponse, string(daprResponse), "响应不一致")
  59. wg.Wait()
  60. _ = srv.Shutdown(context.Background())
  61. }
  62. func TestDeleteJSON(t *testing.T) {
  63. api := invoke.NewAPI(baseUrl, 10*time.Second)
  64. defer invoke.DestroyAPI(api)
  65. daprAPI := invoke.NewAPI(daprBaseUrl, 10*time.Second)
  66. defer invoke.DestroyAPI(daprAPI)
  67. wg := &sync.WaitGroup{}
  68. wg.Add(2)
  69. wgServer := &sync.WaitGroup{}
  70. wgServer.Add(1)
  71. srv := initInvokeHttpServer(t, wgServer, wg)
  72. wgServer.Wait()
  73. response, err := api.DeleteJSON(deleteJsonMethodName)
  74. if err != nil {
  75. t.Fatal(err)
  76. }
  77. assert.Equal(t, deleteJsonResponse, string(response), "响应不一致")
  78. daprResponse, err := daprAPI.DeleteJSON(deleteJsonMethodName)
  79. if err != nil {
  80. t.Fatal(err)
  81. }
  82. assert.Equal(t, deleteJsonResponse, string(daprResponse), "响应不一致")
  83. wg.Wait()
  84. _ = srv.Shutdown(context.Background())
  85. }
  86. func TestPutJSON(t *testing.T) {
  87. api := invoke.NewAPI(baseUrl, 10*time.Second)
  88. defer invoke.DestroyAPI(api)
  89. daprAPI := invoke.NewAPI(daprBaseUrl, 10*time.Second)
  90. defer invoke.DestroyAPI(daprAPI)
  91. wg := &sync.WaitGroup{}
  92. wg.Add(2)
  93. wgServer := &sync.WaitGroup{}
  94. wgServer.Add(1)
  95. srv := initInvokeHttpServer(t, wgServer, wg)
  96. wgServer.Wait()
  97. response, err := api.PutJSON(putJsonMethodName, []byte(putJsonData))
  98. if err != nil {
  99. t.Fatal(err)
  100. }
  101. assert.Equal(t, putJsonResponse, string(response), "响应不一致")
  102. daprResponse, err := daprAPI.PutJSON(putJsonMethodName, []byte(putJsonData))
  103. if err != nil {
  104. t.Fatal(err)
  105. }
  106. assert.Equal(t, putJsonResponse, string(daprResponse), "响应不一致")
  107. wg.Wait()
  108. _ = srv.Shutdown(context.Background())
  109. }
  110. func TestGetJSON(t *testing.T) {
  111. api := invoke.NewAPI(baseUrl, 10*time.Second)
  112. defer invoke.DestroyAPI(api)
  113. daprAPI := invoke.NewAPI(daprBaseUrl, 10*time.Second)
  114. defer invoke.DestroyAPI(daprAPI)
  115. wg := &sync.WaitGroup{}
  116. wg.Add(2)
  117. wgServer := &sync.WaitGroup{}
  118. wgServer.Add(1)
  119. srv := initInvokeHttpServer(t, wgServer, wg)
  120. wgServer.Wait()
  121. response, err := api.GetJSON(getJsonMethodName)
  122. if err != nil {
  123. t.Fatal(err)
  124. }
  125. assert.Equal(t, getJsonResponse, string(response), "响应不一致")
  126. daprResponse, err := daprAPI.GetJSON(getJsonMethodName)
  127. if err != nil {
  128. t.Fatal(err)
  129. }
  130. assert.Equal(t, getJsonResponse, string(daprResponse), "响应不一致")
  131. wg.Wait()
  132. _ = srv.Shutdown(context.Background())
  133. }
  134. func TestPost(t *testing.T) {
  135. api := invoke.NewAPI(baseUrl, 10*time.Second)
  136. defer invoke.DestroyAPI(api)
  137. daprAPI := invoke.NewAPI(daprBaseUrl, 10*time.Second)
  138. defer invoke.DestroyAPI(daprAPI)
  139. wg := &sync.WaitGroup{}
  140. wg.Add(2)
  141. wgServer := &sync.WaitGroup{}
  142. wgServer.Add(1)
  143. srv := initInvokeHttpServer(t, wgServer, wg)
  144. wgServer.Wait()
  145. response, err := api.PostJSON(postMethodName, []byte(postData))
  146. if err != nil {
  147. t.Fatal(err)
  148. }
  149. assert.Equal(t, postResponse, string(response), "响应不一致")
  150. daprResponse, err := daprAPI.PostJSON(postMethodName, []byte(postData))
  151. if err != nil {
  152. t.Fatal(err)
  153. }
  154. assert.Equal(t, postResponse, string(daprResponse), "响应不一致")
  155. wg.Wait()
  156. _ = srv.Shutdown(context.Background())
  157. }
  158. func TestDelete(t *testing.T) {
  159. api := invoke.NewAPI(baseUrl, 10*time.Second)
  160. defer invoke.DestroyAPI(api)
  161. daprAPI := invoke.NewAPI(daprBaseUrl, 10*time.Second)
  162. defer invoke.DestroyAPI(daprAPI)
  163. wg := &sync.WaitGroup{}
  164. wg.Add(2)
  165. wgServer := &sync.WaitGroup{}
  166. wgServer.Add(1)
  167. srv := initInvokeHttpServer(t, wgServer, wg)
  168. wgServer.Wait()
  169. response, err := api.DeleteJSON(deleteMethodName)
  170. if err != nil {
  171. t.Fatal(err)
  172. }
  173. assert.Equal(t, deleteResponse, string(response), "响应不一致")
  174. daprResponse, err := daprAPI.DeleteJSON(deleteMethodName)
  175. if err != nil {
  176. t.Fatal(err)
  177. }
  178. assert.Equal(t, deleteResponse, string(daprResponse), "响应不一致")
  179. wg.Wait()
  180. _ = srv.Shutdown(context.Background())
  181. }
  182. func TestPut(t *testing.T) {
  183. api := invoke.NewAPI(baseUrl, 10*time.Second)
  184. defer invoke.DestroyAPI(api)
  185. daprAPI := invoke.NewAPI(daprBaseUrl, 10*time.Second)
  186. defer invoke.DestroyAPI(daprAPI)
  187. wg := &sync.WaitGroup{}
  188. wg.Add(2)
  189. wgServer := &sync.WaitGroup{}
  190. wgServer.Add(1)
  191. srv := initInvokeHttpServer(t, wgServer, wg)
  192. wgServer.Wait()
  193. response, err := api.PutJSON(putMethodName, []byte(putData))
  194. if err != nil {
  195. t.Fatal(err)
  196. }
  197. assert.Equal(t, putResponse, string(response), "响应不一致")
  198. daprResponse, err := daprAPI.PutJSON(putMethodName, []byte(putData))
  199. if err != nil {
  200. t.Fatal(err)
  201. }
  202. assert.Equal(t, putResponse, string(daprResponse), "响应不一致")
  203. wg.Wait()
  204. _ = srv.Shutdown(context.Background())
  205. }
  206. func TestGet(t *testing.T) {
  207. api := invoke.NewAPI(baseUrl, 10*time.Second)
  208. defer invoke.DestroyAPI(api)
  209. daprAPI := invoke.NewAPI(daprBaseUrl, 10*time.Second)
  210. defer invoke.DestroyAPI(daprAPI)
  211. wg := &sync.WaitGroup{}
  212. wg.Add(2)
  213. wgServer := &sync.WaitGroup{}
  214. wgServer.Add(1)
  215. srv := initInvokeHttpServer(t, wgServer, wg)
  216. wgServer.Wait()
  217. response, err := api.GetJSON(getMethodName)
  218. if err != nil {
  219. t.Fatal(err)
  220. }
  221. assert.Equal(t, getResponse, string(response), "响应不一致")
  222. daprResponse, err := daprAPI.GetJSON(getMethodName)
  223. if err != nil {
  224. t.Fatal(err)
  225. }
  226. assert.Equal(t, getResponse, string(daprResponse), "响应不一致")
  227. wg.Wait()
  228. _ = srv.Shutdown(context.Background())
  229. }
  230. func initInvokeHttpServer(t *testing.T, wgServer *sync.WaitGroup, wg *sync.WaitGroup) *http.Server {
  231. mux := http.NewServeMux()
  232. mux.HandleFunc("/post-json", func(w http.ResponseWriter, r *http.Request) {
  233. request, err := io.ReadAll(r.Body)
  234. if err != nil {
  235. t.Fatal(err)
  236. }
  237. if string(request) != postJsonData {
  238. t.Fatal(err)
  239. }
  240. fmt.Println("post-json Receive:", string(request))
  241. w.WriteHeader(http.StatusOK)
  242. _, err = w.Write([]byte(postJsonResponse))
  243. if err != nil {
  244. t.Fatal(err)
  245. }
  246. wg.Done()
  247. })
  248. mux.HandleFunc("/delete-json", func(w http.ResponseWriter, r *http.Request) {
  249. fmt.Println("delete-json")
  250. w.WriteHeader(http.StatusOK)
  251. _, err := w.Write([]byte(deleteJsonResponse))
  252. if err != nil {
  253. t.Fatal(err)
  254. }
  255. wg.Done()
  256. })
  257. mux.HandleFunc("/put-json", func(w http.ResponseWriter, r *http.Request) {
  258. request, err := io.ReadAll(r.Body)
  259. if err != nil {
  260. t.Fatal(err)
  261. }
  262. if string(request) != putJsonData {
  263. t.Fatal(err)
  264. }
  265. fmt.Println("put-json Receive:", string(request))
  266. w.WriteHeader(http.StatusOK)
  267. _, err = w.Write([]byte(putJsonResponse))
  268. if err != nil {
  269. t.Fatal(err)
  270. }
  271. wg.Done()
  272. })
  273. mux.HandleFunc("/get-json", func(w http.ResponseWriter, r *http.Request) {
  274. fmt.Println("get-json")
  275. w.WriteHeader(http.StatusOK)
  276. _, err := w.Write([]byte(getJsonResponse))
  277. if err != nil {
  278. t.Fatal(err)
  279. }
  280. wg.Done()
  281. })
  282. mux.HandleFunc("/post", func(w http.ResponseWriter, r *http.Request) {
  283. request, err := io.ReadAll(r.Body)
  284. if err != nil {
  285. t.Fatal(err)
  286. }
  287. if string(request) != postData {
  288. t.Fatal(err)
  289. }
  290. fmt.Println("post Receive:", string(request))
  291. w.WriteHeader(http.StatusOK)
  292. _, err = w.Write([]byte(postResponse))
  293. if err != nil {
  294. t.Fatal(err)
  295. }
  296. wg.Done()
  297. })
  298. mux.HandleFunc("/delete", func(w http.ResponseWriter, r *http.Request) {
  299. fmt.Println("delete")
  300. w.WriteHeader(http.StatusOK)
  301. _, err := w.Write([]byte(deleteResponse))
  302. if err != nil {
  303. t.Fatal(err)
  304. }
  305. wg.Done()
  306. })
  307. mux.HandleFunc("/put", func(w http.ResponseWriter, r *http.Request) {
  308. request, err := io.ReadAll(r.Body)
  309. if err != nil {
  310. t.Fatal(err)
  311. }
  312. if string(request) != putData {
  313. t.Fatal(err)
  314. }
  315. fmt.Println("put Receive:", string(request))
  316. w.WriteHeader(http.StatusOK)
  317. _, err = w.Write([]byte(putResponse))
  318. if err != nil {
  319. t.Fatal(err)
  320. }
  321. wg.Done()
  322. })
  323. mux.HandleFunc("/get", func(w http.ResponseWriter, r *http.Request) {
  324. fmt.Println("get")
  325. w.WriteHeader(http.StatusOK)
  326. _, err := w.Write([]byte(getResponse))
  327. if err != nil {
  328. t.Fatal(err)
  329. }
  330. wg.Done()
  331. })
  332. srv := &http.Server{
  333. Addr: invokeServerAddress,
  334. Handler: mux,
  335. }
  336. go func() {
  337. wgServer.Done()
  338. err := srv.ListenAndServe()
  339. if err != nil && err != http.ErrServerClosed {
  340. panic(err)
  341. }
  342. }()
  343. return srv
  344. }