run_automate_tests.yaml 17 KB

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