rest_test.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package server
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/http/httptest"
  6. "reflect"
  7. "strings"
  8. "testing"
  9. )
  10. func TestParseHtml(t1 *testing.T) {
  11. var tests = []struct {
  12. html string
  13. plugins []string
  14. arch string
  15. error string
  16. }{
  17. {
  18. html: `<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
  19. <title>Directory listing for enterprise: /4.1.1/</title>
  20. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  21. <meta name="robots" content="noindex,nofollow">
  22. <body>
  23. <h2>Directory listing for enterprise: /4.1.1/</h2>
  24. <hr>
  25. <ul>
  26. <li><a href="file_386.zip">file_386.zip</a>
  27. <li><a href="file_amd64.zip">file_amd64.zip</a>
  28. <li><a href="file_arm.zip">file_arm.zip</a>
  29. <li><a href="file_arm64.zip">file_arm64.zip</a>
  30. <li><a href="file_ppc64le.zip">file_ppc64le.zip</a>
  31. <li><a href="influx_386.zip">influx_386.zip</a>
  32. <li><a href="influx_amd64.zip">influx_amd64.zip</a>
  33. <li><a href="influx_arm.zip">influx_arm.zip</a>
  34. <li><a href="influx_arm64.zip">influx_arm64.zip</a>
  35. <li><a href="influx_ppc64le.zip">influx_ppc64le.zip</a>
  36. </ul>
  37. <hr>
  38. </body>
  39. </html>
  40. `,
  41. arch: "arm64",
  42. plugins: []string{"file", "influx"},
  43. error: "",
  44. },
  45. {
  46. html: `<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
  47. <title>Directory listing for enterprise: /4.1.1/</title>
  48. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  49. <meta name="robots" content="noindex,nofollow">
  50. <body>
  51. <h2>Directory listing for enterprise: /4.1.1/</h2>
  52. <hr>
  53. <ul>
  54. <li><a href="file_386.zip">file_386.zip</a>
  55. <li><a href="file_amd64.zip">file_amd64.zip</a>
  56. <li><a href="file_arm.zip">file_arm.zip</a>
  57. <li><a href="file_arm64.zip">file_arm64.zip</a>
  58. <li><a href="file_ppc64le.zip">file_ppc64le.zip</a>
  59. <li><a href="influx_386.zip">influx_386.zip</a>
  60. <li><a href="influx_amd64.zip">influx_amd64.zip</a>
  61. <li><a href="influx_arm.zip">influx_arm.zip</a>
  62. <li><a href="influx_arm64.zip">influx_arm64.zip</a>
  63. <li><a href="influx_ppc64le.zip">influx_ppc64le.zip</a>
  64. </ul>
  65. <hr>
  66. </body>
  67. </html>
  68. `,
  69. arch: "arm7",
  70. plugins: []string{},
  71. error: "",
  72. },
  73. {
  74. html: `<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
  75. <title>Directory listing for enterprise: /4.1.1/</title>
  76. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  77. <meta name="robots" content="noindex,nofollow">
  78. <body>
  79. <h2>Directory listing for enterprise: /4.1.1/</h2>
  80. <hr>
  81. <ul>
  82. <li><a href="file_386.zip">file_386.zip</a>
  83. <li><a href="file_amd64.zip">file_amd64.zip</a>
  84. <li><a href="file_arm.zip">file_arm.zip</a>
  85. <li><a href="file_arm64.zip">file_arm64.zip</a>
  86. <li><a href="file_ppc64le.zip">file_ppc64le.zip</a>
  87. <li><a href="influx_arm.zip">influx_arm.zip</a>
  88. <li><a href="influx_arm64.zip">influx_arm64.zip</a>
  89. <li><a href="influx_ppc64le.zip">influx_ppc64le.zip</a>
  90. </ul>
  91. <hr>
  92. </body>
  93. </html>
  94. `,
  95. arch: "amd64",
  96. plugins: []string{"file"},
  97. error: "",
  98. },
  99. {
  100. html: `<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
  101. <title>Directory listing for enterprise: /4.1.1/</title>
  102. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  103. <meta name="robots" content="noindex,nofollow">
  104. <body>
  105. <h2>Directory listing for enterprise: /4.1.1/</h2>
  106. <hr>
  107. <ul>
  108. </ul>
  109. <hr>
  110. </body>
  111. </html>
  112. `,
  113. arch: "amd64",
  114. plugins: []string{},
  115. error: "",
  116. },
  117. {
  118. html: ``,
  119. arch: "amd64",
  120. plugins: []string{},
  121. error: "",
  122. },
  123. }
  124. fmt.Printf("The test bucket size is %d.\n\n", len(tests))
  125. for i, t := range tests {
  126. result := extractFromHtml(t.html, t.arch)
  127. if t.error == "" && !reflect.DeepEqual(t.plugins, result) {
  128. t1.Errorf("%d. %q\n\nresult mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, t.html, t.plugins, result)
  129. }
  130. }
  131. }
  132. func TestFetchPluginList(t1 *testing.T) {
  133. version = "0.9.1"
  134. // Start a local HTTP server
  135. server1 := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
  136. // Send response to be tested
  137. if _, err := rw.Write([]byte(`<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
  138. <title>Directory listing for enterprise: /4.1.1/</title>
  139. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  140. <meta name="robots" content="noindex,nofollow">
  141. <body>
  142. <h2>Directory listing for enterprise: /4.1.1/</h2>
  143. <hr>
  144. <ul>
  145. <li><a href="file_386.zip">file_386.zip</a>
  146. <li><a href="file_amd64.zip">file_amd64.zip</a>
  147. <li><a href="file_arm.zip">file_arm.zip</a>
  148. <li><a href="file_arm64.zip">file_arm64.zip</a>
  149. <li><a href="file_ppc64le.zip">file_ppc64le.zip</a>
  150. <li><a href="influx_386.zip">influx_386.zip</a>
  151. <li><a href="influx_amd64.zip">influx_amd64.zip</a>
  152. <li><a href="influx_arm.zip">influx_arm.zip</a>
  153. <li><a href="influx_arm64.zip">influx_arm64.zip</a>
  154. <li><a href="influx_ppc64le.zip">influx_ppc64le.zip</a>
  155. </ul>
  156. <hr>
  157. </body>
  158. </html>
  159. `)); err != nil {
  160. fmt.Printf("%s", err)
  161. }
  162. }))
  163. server2 := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
  164. // Send response to be tested
  165. if _, err := rw.Write([]byte(`<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
  166. <title>Directory listing for enterprise: /4.1.1/</title>
  167. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  168. <meta name="robots" content="noindex,nofollow">
  169. <body>
  170. <h2>Directory listing for enterprise: /4.1.1/</h2>
  171. <hr>
  172. <ul>
  173. <li><a href="file_arm64.zip">file_arm64.zip</a>
  174. <li><a href="zmq_386.zip">influx_386.zip</a>
  175. <li><a href="zmq_amd64.zip">influx_amd64.zip</a>
  176. <li><a href="zmq_arm.zip">influx_arm.zip</a>
  177. <li><a href="zmq_arm64.zip">influx_arm64.zip</a>
  178. <li><a href="zmq_ppc64le.zip">influx_ppc64le.zip</a>
  179. </ul>
  180. <hr>
  181. </body>
  182. </html>
  183. `)); err != nil {
  184. fmt.Printf("%s", err)
  185. }
  186. }))
  187. // Close the server when test finishes
  188. defer server2.Close()
  189. if e, r := fetchPluginList(strings.Join([]string{server1.URL, server2.URL}, ","), "sinks", "alpine", "arm64"); e != nil {
  190. t1.Errorf("Error: %v", e)
  191. } else {
  192. exp := map[string]string{
  193. "file": server1.URL + "/kuiper-plugins/" + version + "/alpine/sinks/file_arm64.zip",
  194. "influx": server1.URL + "/kuiper-plugins/" + version + "/alpine/sinks/influx_arm64.zip",
  195. "zmq": server2.URL + "/kuiper-plugins/" + version + "/alpine/sinks/zmq_arm64.zip",
  196. }
  197. if !reflect.DeepEqual(exp, r) {
  198. t1.Errorf("result mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", exp, r)
  199. }
  200. }
  201. if e, r := fetchPluginList(strings.Join([]string{server2.URL}, ","), "sinks", "alpine", "arm64"); e != nil {
  202. t1.Errorf("Error: %v", e)
  203. } else {
  204. exp := map[string]string{
  205. "zmq": server2.URL + "/kuiper-plugins/" + version + "/alpine/sinks/zmq_arm64.zip",
  206. "file": server2.URL + "/kuiper-plugins/" + version + "/alpine/sinks/file_arm64.zip",
  207. }
  208. if !reflect.DeepEqual(exp, r) {
  209. t1.Errorf("result mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", exp, r)
  210. }
  211. }
  212. if e, r := fetchPluginList(strings.Join([]string{server1.URL, server2.URL}, ","), "sinks", "alpine", "armv7"); e != nil {
  213. t1.Errorf("Error: %v", e)
  214. } else {
  215. exp := map[string]string{}
  216. if !reflect.DeepEqual(exp, r) {
  217. t1.Errorf("result mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", exp, r)
  218. }
  219. }
  220. }