run_automate_tests.yaml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. name: Integration Test Suites
  2. on:
  3. push:
  4. tags:
  5. - "v4.*"
  6. pull_request:
  7. branches:
  8. - "main-v4.*"
  9. jobs:
  10. build:
  11. runs-on: ubuntu-latest
  12. outputs:
  13. version: ${{ steps.build_docker.outputs.version}}
  14. steps:
  15. - uses: actions/checkout@v2
  16. - name: build docker
  17. id: build_docker
  18. run: |
  19. make docker
  20. echo "::set-output name=version::$(./pkg-vsn.sh)"
  21. - uses: actions/upload-artifact@v2
  22. with:
  23. name: emqx-docker-image-zip
  24. path: _packages/emqx/emqx-docker-${{ steps.build_docker.outputs.version }}.zip
  25. webhook:
  26. runs-on: ubuntu-latest
  27. strategy:
  28. fail-fast: false
  29. matrix:
  30. webhook_type:
  31. - webhook_data_bridge
  32. needs: build
  33. steps:
  34. - uses: actions/checkout@v2
  35. - uses: actions/download-artifact@v2
  36. with:
  37. name: emqx-docker-image-zip
  38. path: /tmp
  39. - name: load docker image
  40. env:
  41. version: ${{ needs.build.outputs.version }}
  42. run: |
  43. unzip -q /tmp/emqx-docker-${version}.zip -d /tmp
  44. docker load < /tmp/emqx-docker-${version}
  45. - name: docker compose up
  46. timeout-minutes: 5
  47. env:
  48. TARGET: emqx/emqx
  49. EMQX_TAG: ${{ needs.build.outputs.version }}
  50. run: |
  51. docker-compose \
  52. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  53. up -d --build
  54. - uses: actions/checkout@v2
  55. with:
  56. repository: emqx/emqx-svt-web-server
  57. ref: web-server-1.0
  58. path: emqx-svt-web-server
  59. - uses: actions/download-artifact@v2
  60. - name: run webserver in docker
  61. run: |
  62. cd ./emqx-svt-web-server/svtserver
  63. mvn clean package
  64. cd target
  65. docker run --name webserver --network emqx_bridge -d -v $(pwd)/svtserver-0.0.1.jar:/webserver/svtserver-0.0.1.jar --workdir /webserver openjdk:8-jdk bash \
  66. -c "java -jar svtserver-0.0.1.jar"
  67. - name: wait docker compose up
  68. timeout-minutes: 5
  69. run: |
  70. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  71. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  72. sleep 5;
  73. done
  74. docker ps -a
  75. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  76. echo WEB_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' webserver) >> $GITHUB_ENV
  77. - uses: actions/checkout@v2
  78. with:
  79. repository: emqx/emqx-fvt
  80. ref: integration_test_suites
  81. path: scripts
  82. - uses: actions/setup-java@v1
  83. with:
  84. java-version: '8.0.282' # The JDK version to make available on the path.
  85. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  86. architecture: x64 # (x64 or x86) - defaults to x64
  87. - name: install jmeter
  88. timeout-minutes: 10
  89. env:
  90. JMETER_VERSION: 5.3
  91. run: |
  92. wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  93. cd /tmp && tar -xvf apache-jmeter.tgz
  94. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  95. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  96. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
  97. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  98. - name: run jmeter
  99. run: |
  100. /opt/jmeter/bin/jmeter.sh \
  101. -Jjmeter.save.saveservice.output_format=xml -n \
  102. -t scripts/.ci/automate-test-suite/${{ matrix.webhook_type }}.jmx \
  103. -Demqx_ip=$HAPROXY_IP \
  104. -Dweb_ip=$WEB_IP \
  105. -l jmeter_logs/webhook_${{ matrix.webhook_type }}.jtl \
  106. -j jmeter_logs/logs/webhook_${{ matrix.webhook_type }}.log
  107. - name: check logs
  108. run: |
  109. if cat jmeter_logs/webhook_${{ matrix.webhook_type }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  110. echo "check logs filed"
  111. exit 1
  112. fi
  113. - uses: actions/upload-artifact@v1
  114. if: always()
  115. with:
  116. name: jmeter_logs
  117. path: ./jmeter_logs
  118. mysql:
  119. runs-on: ubuntu-latest
  120. strategy:
  121. fail-fast: false
  122. matrix:
  123. mysql_tag:
  124. - 5.7
  125. - 8
  126. mysql_type:
  127. - mysql_auth_acl
  128. needs: build
  129. steps:
  130. - uses: actions/checkout@v2
  131. - uses: actions/download-artifact@v2
  132. with:
  133. name: emqx-docker-image-zip
  134. path: /tmp
  135. - name: load docker image
  136. env:
  137. version: ${{ needs.build.outputs.version }}
  138. run: |
  139. unzip -q /tmp/emqx-docker-${version}.zip -d /tmp
  140. docker load < /tmp/emqx-docker-${version}
  141. - name: docker compose up
  142. timeout-minutes: 5
  143. env:
  144. TARGET: emqx/emqx
  145. EMQX_TAG: ${{ needs.build.outputs.version }}
  146. MYSQL_TAG: ${{ matrix.mysql_tag }}
  147. run: |
  148. docker-compose \
  149. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  150. -f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
  151. up -d --build
  152. - name: wait docker compose up
  153. timeout-minutes: 5
  154. run: |
  155. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  156. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  157. sleep 5;
  158. done
  159. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  160. != $(docker ps -a --filter name=client | wc -l) ]; do
  161. sleep 1
  162. done
  163. docker ps -a
  164. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  165. echo MYSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql) >> $GITHUB_ENV
  166. - uses: actions/checkout@v2
  167. with:
  168. repository: emqx/emqx-fvt
  169. ref: integration_test_suites
  170. path: scripts
  171. - uses: actions/setup-java@v1
  172. with:
  173. java-version: '8.0.282' # The JDK version to make available on the path.
  174. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  175. architecture: x64 # (x64 or x86) - defaults to x64
  176. - name: install jmeter
  177. timeout-minutes: 10
  178. env:
  179. JMETER_VERSION: 5.3
  180. run: |
  181. wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  182. cd /tmp && tar -xvf apache-jmeter.tgz
  183. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  184. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  185. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
  186. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  187. - name: install jmeter plugin
  188. run: |
  189. wget --no-verbose -O "/opt/jmeter/lib/mysql-connector-java-8.0.16.jar" https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar
  190. - name: run jmeter
  191. run: |
  192. /opt/jmeter/bin/jmeter.sh \
  193. -Jjmeter.save.saveservice.output_format=xml -n \
  194. -t scripts/.ci/automate-test-suite/${{ matrix.mysql_type }}.jmx \
  195. -Droute="apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data" \
  196. -Dmysql_ip=$MYSQL_IP \
  197. -Demqx_ip=$HAPROXY_IP \
  198. -Ddbname="mqtt" \
  199. -Dmysql_user="ssluser" \
  200. -Ddb_user="root" \
  201. -Dmysql_pwd="public" \
  202. -Dconfig_path="/tmp/etc" \
  203. -Ddocker_path=".ci/docker-compose-file" \
  204. -l jmeter_logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.jtl \
  205. -j jmeter_logs/logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.log
  206. - name: check logs
  207. run: |
  208. if cat jmeter_logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  209. echo "check logs filed"
  210. exit 1
  211. fi
  212. - uses: actions/upload-artifact@v1
  213. if: always()
  214. with:
  215. name: jmeter_logs
  216. path: ./jmeter_logs
  217. postgresql:
  218. runs-on: ubuntu-latest
  219. strategy:
  220. fail-fast: false
  221. matrix:
  222. pgsql_type:
  223. - pgsql_auth_acl
  224. pgsql_tag:
  225. - 9
  226. - 10
  227. - 11
  228. - 12
  229. - 13
  230. needs: build
  231. steps:
  232. - uses: actions/checkout@v2
  233. - uses: actions/download-artifact@v2
  234. with:
  235. name: emqx-docker-image-zip
  236. path: /tmp
  237. - name: load docker image
  238. env:
  239. version: ${{ needs.build.outputs.version }}
  240. run: |
  241. unzip -q /tmp/emqx-docker-${version}.zip -d /tmp
  242. docker load < /tmp/emqx-docker-${version}
  243. - name: docker compose up
  244. timeout-minutes: 5
  245. env:
  246. TARGET: emqx/emqx
  247. EMQX_TAG: ${{ needs.build.outputs.version }}
  248. PGSQL_TAG: ${{ matrix.pgsql_tag }}
  249. run: |
  250. docker-compose \
  251. -f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
  252. -f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
  253. up -d --build
  254. - name: wait docker compose up
  255. timeout-minutes: 5
  256. run: |
  257. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  258. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  259. sleep 5;
  260. done
  261. docker ps -a
  262. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  263. echo PGSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pgsql) >> $GITHUB_ENV
  264. echo CONFIG_PATH=$(docker inspect -f '{{ range .Mounts }}{{ if eq .Name "docker-compose-file_etc" }}{{ .Source }}{{ end }}{{ end }}' node1.emqx.io) >> $GITHUB_ENV
  265. - uses: actions/checkout@v2
  266. with:
  267. repository: emqx/emqx-fvt
  268. ref: integration_test_suites
  269. path: scripts
  270. - uses: actions/setup-java@v1
  271. with:
  272. java-version: '8.0.282' # The JDK version to make available on the path.
  273. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  274. architecture: x64 # (x64 or x86) - defaults to x64
  275. - name: install jmeter
  276. timeout-minutes: 10
  277. env:
  278. JMETER_VERSION: 5.3
  279. run: |
  280. wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  281. cd /tmp && tar -xvf apache-jmeter.tgz
  282. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  283. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  284. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
  285. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  286. - name: install jmeter plugin
  287. run: |
  288. wget --no-verbose -O "/opt/jmeter/lib/postgresql-42.2.18.jar" https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18.jar
  289. - name: run jmeter
  290. run: |
  291. sudo /opt/jmeter/bin/jmeter.sh \
  292. -Jjmeter.save.saveservice.output_format=xml -n \
  293. -t scripts/.ci/automate-test-suite/${{ matrix.pgsql_type }}.jmx \
  294. -Droute="apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data" \
  295. -Dca_name="ca.pem" \
  296. -Dkey_name="client-key.pem" \
  297. -Dcert_name="client-cert.pem" \
  298. -Ddb_ip=$PGSQL_IP \
  299. -Dpgsql_ip=$PGSQL_IP \
  300. -Demqx_ip=$HAPROXY_IP \
  301. -Dpgsql_user="root" \
  302. -Dpgsql_pwd="public" \
  303. -Ddbname="mqtt" \
  304. -Dpgsql_db="mqtt" \
  305. -Dport="5432" \
  306. -Dconfig_path=$CONFIG_PATH \
  307. -Ddocker_path=".ci/docker-compose-file" \
  308. -l jmeter_logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.jtl \
  309. -j jmeter_logs/logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.log
  310. - name: check logs
  311. run: |
  312. if cat jmeter_logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  313. echo "check logs filed"
  314. exit 1
  315. fi
  316. - uses: actions/upload-artifact@v1
  317. if: always()
  318. with:
  319. name: jmeter_logs
  320. path: ./jmeter_logs
  321. http:
  322. runs-on: ubuntu-latest
  323. needs: build
  324. steps:
  325. - uses: actions/checkout@v2
  326. - uses: actions/download-artifact@v2
  327. with:
  328. name: emqx-docker-image-zip
  329. path: /tmp
  330. - name: load docker image
  331. env:
  332. version: ${{ needs.build.outputs.version }}
  333. run: |
  334. unzip -q /tmp/emqx-docker-${version}.zip -d /tmp
  335. docker load < /tmp/emqx-docker-${version}
  336. - name: docker compose up
  337. timeout-minutes: 5
  338. env:
  339. TARGET: emqx/emqx
  340. EMQX_TAG: ${{ needs.build.outputs.version }}
  341. MYSQL_TAG: 8
  342. run: |
  343. docker-compose \
  344. -f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
  345. -f .ci/docker-compose-file/docker-compose-mysql-tcp.yaml \
  346. -f .ci/docker-compose-file/docker-compose-enterprise-tomcat-tcp.yaml \
  347. up -d --build
  348. - name: wait docker compose up
  349. timeout-minutes: 5
  350. run: |
  351. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  352. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  353. sleep 5;
  354. done
  355. docker ps -a
  356. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  357. echo HTTP_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' Tomcat) >> $GITHUB_ENV
  358. echo MYSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql) >> $GITHUB_ENV
  359. echo CONFIG_PATH=$(docker inspect -f '{{ range .Mounts }}{{ if eq .Name "docker-compose-file_etc" }}{{ .Source }}{{ end }}{{ end }}' node1.emqx.io) >> $GITHUB_ENV
  360. - uses: actions/checkout@v2
  361. with:
  362. repository: emqx/emqx-fvt
  363. ref: integration_test_suites
  364. path: scripts
  365. - uses: actions/setup-java@v1
  366. with:
  367. java-version: '8.0.282' # The JDK version to make available on the path.
  368. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  369. architecture: x64 # (x64 or x86) - defaults to x64
  370. - name: install jmeter
  371. timeout-minutes: 10
  372. env:
  373. JMETER_VERSION: 5.3
  374. run: |
  375. wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  376. cd /tmp && tar -xvf apache-jmeter.tgz
  377. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  378. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  379. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
  380. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  381. - name: install jmeter plugin
  382. run: |
  383. wget --no-verbose -O "/opt/jmeter/lib/mysql-connector-java-8.0.16.jar" https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar
  384. - name: run jmeter
  385. run: |
  386. sudo /opt/jmeter/bin/jmeter.sh \
  387. -Jjmeter.save.saveservice.output_format=xml -n \
  388. -t scripts/.ci/automate-test-suite/http_auth_acl.jmx \
  389. -Dmysql_ip=$MYSQL_IP \
  390. -Demqx_ip=$HAPROXY_IP \
  391. -Dweb_server_ip=$HTTP_IP \
  392. -Dconfig_path=$CONFIG_PATH \
  393. -Ddocker_path=".ci/docker-compose-file" \
  394. -l jmeter_logs/http_auth_acl.jtl \
  395. -j jmeter_logs/logs/http_auth_acl.log
  396. - name: check logs
  397. run: |
  398. if cat jmeter_logs/http_auth_acl.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  399. echo "check logs filed"
  400. sudo cat /var/lib/docker/volumes/docker-compose-file_etc/_data/emqx.conf
  401. exit 1
  402. fi
  403. - uses: actions/upload-artifact@v1
  404. if: always()
  405. with:
  406. name: jmeter_logs
  407. path: ./jmeter_logs