run_jmeter_tests.yaml 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. name: JMeter integration tests
  2. on:
  3. push:
  4. tags:
  5. - "v5.*"
  6. pull_request:
  7. branches:
  8. - "master"
  9. jobs:
  10. build_emqx_for_jmeter_tests:
  11. runs-on: ubuntu-latest
  12. outputs:
  13. version: ${{ steps.build_docker.outputs.version}}
  14. steps:
  15. - uses: emqx/setup-beam@v1.16.1-emqx
  16. with:
  17. otp-version: 24.3.4.6
  18. - name: download jmeter
  19. timeout-minutes: 3
  20. env:
  21. JMETER_VERSION: 5.4.3
  22. run: |
  23. wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
  24. - uses: actions/upload-artifact@v3
  25. with:
  26. name: apache-jmeter.tgz
  27. path: /tmp/apache-jmeter.tgz
  28. - uses: actions/checkout@v3
  29. - name: zip emqx docker image
  30. id: build_docker
  31. if: endsWith(github.repository, 'emqx')
  32. run: |
  33. ## TODO: make profile a matrix dimension
  34. PROFILE='emqx'
  35. make "${PROFILE}-docker"
  36. VSN="$(./pkg-vsn.sh $PROFILE)"
  37. echo "version=${VSN}" >> $GITHUB_OUTPUT
  38. docker save -o emqx.tar emqx/emqx:${VSN}
  39. - uses: actions/upload-artifact@v3
  40. with:
  41. name: emqx.tar
  42. path: ./emqx.tar
  43. advanced_feat:
  44. runs-on: ubuntu-latest
  45. strategy:
  46. fail-fast: false
  47. matrix:
  48. scripts_type:
  49. - mqtt_subscription_topic_metrics
  50. - mqtt_delayed_publish
  51. - mqtt_topic_rewrite
  52. # - mqtt_retainer
  53. needs: build_emqx_for_jmeter_tests
  54. steps:
  55. - uses: emqx/setup-beam@v1.16.1-emqx
  56. with:
  57. otp-version: 24.3.4.6
  58. - uses: actions/checkout@v3
  59. - uses: actions/download-artifact@v3
  60. with:
  61. name: emqx.tar
  62. path: /tmp
  63. - name: load docker image
  64. run: |
  65. docker load < /tmp/emqx.tar
  66. - name: docker compose up
  67. timeout-minutes: 5
  68. env:
  69. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  70. run: |
  71. docker-compose \
  72. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  73. up -d --build
  74. - name: wait docker compose up
  75. timeout-minutes: 5
  76. run: |
  77. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  78. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  79. sleep 5;
  80. done
  81. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  82. != $(docker ps -a --filter name=client | wc -l) ]; do
  83. sleep 1
  84. done
  85. docker ps -a
  86. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  87. - uses: actions/checkout@v3
  88. with:
  89. repository: emqx/emqx-fvt
  90. ref: broker-autotest-v2
  91. path: scripts
  92. - uses: actions/setup-java@v3
  93. with:
  94. java-version: '8.0.282' # The JDK version to make available on the path.
  95. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  96. architecture: x64 # (x64 or x86) - defaults to x64
  97. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  98. distribution: 'zulu'
  99. - uses: actions/download-artifact@v3
  100. with:
  101. name: apache-jmeter.tgz
  102. path: /tmp
  103. - name: install jmeter
  104. timeout-minutes: 10
  105. env:
  106. JMETER_VERSION: 5.4.3
  107. run: |
  108. cd /tmp && tar -xvf apache-jmeter.tgz
  109. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  110. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  111. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar
  112. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  113. - name: run jmeter
  114. run: |
  115. /opt/jmeter/bin/jmeter.sh \
  116. -Jjmeter.save.saveservice.output_format=xml -n \
  117. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  118. -Demqx_ip=$HAPROXY_IP \
  119. -l jmeter_logs/${{ matrix.scripts_type }}.jtl \
  120. -j jmeter_logs/logs/${{ matrix.scripts_type }}.log
  121. - name: check logs
  122. run: |
  123. if cat jmeter_logs/${{ matrix.scripts_type }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  124. echo "check logs filed"
  125. exit 1
  126. fi
  127. - uses: actions/upload-artifact@v3
  128. if: always()
  129. with:
  130. name: jmeter_logs
  131. path: ./jmeter_logs
  132. pgsql_authn_authz:
  133. runs-on: ubuntu-latest
  134. strategy:
  135. fail-fast: false
  136. matrix:
  137. pgsql_tag:
  138. - 9
  139. - 10
  140. - 11
  141. - 12
  142. - 13
  143. scripts_type:
  144. - pgsql_authn
  145. - pgsql_authz
  146. needs: build_emqx_for_jmeter_tests
  147. steps:
  148. - uses: emqx/setup-beam@v1.16.1-emqx
  149. with:
  150. otp-version: 24.3.4.6
  151. - uses: actions/checkout@v3
  152. - uses: actions/download-artifact@v3
  153. with:
  154. name: emqx.tar
  155. path: /tmp
  156. - name: load docker image
  157. run: |
  158. docker load < /tmp/emqx.tar
  159. - name: docker compose up
  160. timeout-minutes: 5
  161. env:
  162. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  163. PGSQL_TAG: ${{ matrix.pgsql_tag }}
  164. run: |
  165. docker-compose \
  166. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  167. -f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
  168. up -d --build
  169. - name: wait docker compose up
  170. timeout-minutes: 5
  171. run: |
  172. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  173. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  174. sleep 5;
  175. done
  176. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  177. != $(docker ps -a --filter name=client | wc -l) ]; do
  178. sleep 1
  179. done
  180. docker ps -a
  181. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  182. echo PGSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pgsql-tls) >> $GITHUB_ENV
  183. - uses: actions/checkout@v3
  184. with:
  185. repository: emqx/emqx-fvt
  186. ref: broker-autotest-v2
  187. path: scripts
  188. - uses: actions/setup-java@v3
  189. with:
  190. java-version: '8.0.282' # The JDK version to make available on the path.
  191. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  192. architecture: x64 # (x64 or x86) - defaults to x64
  193. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  194. distribution: 'zulu'
  195. - uses: actions/download-artifact@v3
  196. with:
  197. name: apache-jmeter.tgz
  198. path: /tmp
  199. - name: install jmeter
  200. timeout-minutes: 10
  201. env:
  202. JMETER_VERSION: 5.4.3
  203. run: |
  204. cd /tmp && tar -xvf apache-jmeter.tgz
  205. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  206. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  207. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar
  208. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/postgresql-42.2.18.jar https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18.jar
  209. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  210. - name: run jmeter
  211. run: |
  212. /opt/jmeter/bin/jmeter.sh \
  213. -Jjmeter.save.saveservice.output_format=xml -n \
  214. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  215. -Demqx_ip=$HAPROXY_IP \
  216. -Ddb_ip=$PGSQL_IP \
  217. -Dport="5432" \
  218. -Dpgsql_user="root" \
  219. -Dpgsql_pwd="public" \
  220. -Ddbname="mqtt" \
  221. -Droute="apps/emqx_authn/test/data/certs" \
  222. -Dca_name="ca.crt" \
  223. -Dkey_name="client.key" \
  224. -Dcert_name="client.crt" \
  225. -l jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.pgsql_tag }}.jtl \
  226. -j jmeter_logs/logs/${{ matrix.scripts_type }}_${{ matrix.pgsql_tag }}.log
  227. - name: check logs
  228. run: |
  229. if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.pgsql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  230. echo "check logs filed"
  231. exit 1
  232. fi
  233. - uses: actions/upload-artifact@v3
  234. if: always()
  235. with:
  236. name: jmeter_logs
  237. path: ./jmeter_logs
  238. mysql_authn_authz:
  239. runs-on: ubuntu-latest
  240. strategy:
  241. fail-fast: false
  242. matrix:
  243. mysql_tag:
  244. - 5.7
  245. - 8
  246. scripts_type:
  247. - mysql_authn
  248. - mysql_authz
  249. needs: build_emqx_for_jmeter_tests
  250. steps:
  251. - uses: emqx/setup-beam@v1.16.1-emqx
  252. with:
  253. otp-version: 24.3.4.6
  254. - uses: actions/checkout@v3
  255. - uses: actions/download-artifact@v3
  256. with:
  257. name: emqx.tar
  258. path: /tmp
  259. - name: load docker image
  260. run: |
  261. docker load < /tmp/emqx.tar
  262. - name: docker compose up
  263. timeout-minutes: 5
  264. env:
  265. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  266. PGSQL_TAG: ${{ matrix.mysql_tag }}
  267. run: |
  268. docker-compose \
  269. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  270. -f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
  271. up -d --build
  272. - name: wait docker compose up
  273. timeout-minutes: 5
  274. run: |
  275. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  276. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  277. sleep 5;
  278. done
  279. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  280. != $(docker ps -a --filter name=client | wc -l) ]; do
  281. sleep 1
  282. done
  283. docker ps -a
  284. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  285. echo MYSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-tls) >> $GITHUB_ENV
  286. - uses: actions/checkout@v3
  287. with:
  288. repository: emqx/emqx-fvt
  289. ref: broker-autotest-v2
  290. path: scripts
  291. - uses: actions/setup-java@v3
  292. with:
  293. java-version: '8.0.282' # The JDK version to make available on the path.
  294. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  295. architecture: x64 # (x64 or x86) - defaults to x64
  296. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  297. distribution: 'zulu'
  298. - uses: actions/download-artifact@v3
  299. with:
  300. name: apache-jmeter.tgz
  301. path: /tmp
  302. - name: install jmeter
  303. timeout-minutes: 10
  304. env:
  305. JMETER_VERSION: 5.4.3
  306. run: |
  307. cd /tmp && tar -xvf apache-jmeter.tgz
  308. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  309. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  310. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar
  311. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/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
  312. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  313. - name: run jmeter
  314. run: |
  315. /opt/jmeter/bin/jmeter.sh \
  316. -Jjmeter.save.saveservice.output_format=xml -n \
  317. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  318. -Demqx_ip=$HAPROXY_IP \
  319. -Dmysql_ip=$MYSQL_IP \
  320. -Dport="3306" \
  321. -Dmysql_user="root" \
  322. -Dmysql_pwd="public" \
  323. -Ddbname="mqtt" \
  324. -Droute="apps/emqx_authn/test/data/certs" \
  325. -Dca_name="ca.crt" \
  326. -Dkey_name="client.key" \
  327. -Dcert_name="client.crt" \
  328. -l jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl \
  329. -j jmeter_logs/logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.log
  330. - name: check logs
  331. run: |
  332. if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  333. echo "check logs filed"
  334. exit 1
  335. fi
  336. - uses: actions/upload-artifact@v3
  337. if: always()
  338. with:
  339. name: jmeter_logs
  340. path: ./jmeter_logs
  341. JWT_authn:
  342. runs-on: ubuntu-latest
  343. strategy:
  344. fail-fast: false
  345. matrix:
  346. scripts_type:
  347. - jwt_authn
  348. needs: build_emqx_for_jmeter_tests
  349. steps:
  350. - uses: emqx/setup-beam@v1.16.1-emqx
  351. with:
  352. otp-version: 24.3.4.6
  353. - uses: actions/checkout@v3
  354. - uses: actions/download-artifact@v3
  355. with:
  356. name: emqx.tar
  357. path: /tmp
  358. - name: load docker image
  359. run: |
  360. docker load < /tmp/emqx.tar
  361. - name: docker compose up
  362. timeout-minutes: 5
  363. env:
  364. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  365. run: |
  366. docker-compose \
  367. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  368. up -d --build
  369. - name: wait docker compose up
  370. timeout-minutes: 5
  371. run: |
  372. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  373. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  374. sleep 5;
  375. done
  376. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  377. != $(docker ps -a --filter name=client | wc -l) ]; do
  378. sleep 1
  379. done
  380. docker ps -a
  381. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  382. - uses: actions/checkout@v3
  383. with:
  384. repository: emqx/emqx-fvt
  385. ref: broker-autotest-v2
  386. path: scripts
  387. - name: run jwks_server
  388. timeout-minutes: 10
  389. run: |
  390. cd scripts/jwks-server
  391. mvn package
  392. cd target
  393. docker run --name jwks_server --network emqx_bridge --ip 172.100.239.88 -d -v $(pwd)/jwkserver-0.0.1.jar:/jwks_server/jwkserver-0.0.1.jar --workdir /jwks_server openjdk:8-jdk bash \
  394. -c "java -jar jwkserver-0.0.1.jar"
  395. - uses: actions/setup-java@v3
  396. with:
  397. java-version: '8.0.282' # The JDK version to make available on the path.
  398. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  399. architecture: x64 # (x64 or x86) - defaults to x64
  400. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  401. distribution: 'zulu'
  402. - uses: actions/download-artifact@v3
  403. with:
  404. name: apache-jmeter.tgz
  405. path: /tmp
  406. - name: install jmeter
  407. timeout-minutes: 10
  408. env:
  409. JMETER_VERSION: 5.4.3
  410. run: |
  411. cd /tmp && tar -xvf apache-jmeter.tgz
  412. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  413. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  414. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar
  415. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  416. - name: run jmeter
  417. run: |
  418. /opt/jmeter/bin/jmeter.sh \
  419. -Jjmeter.save.saveservice.output_format=xml -n \
  420. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  421. -Demqx_ip=$HAPROXY_IP \
  422. -Djwks_ip="172.100.239.88" \
  423. -l jmeter_logs/${{ matrix.scripts_type }}.jtl \
  424. -j jmeter_logs/logs/${{ matrix.scripts_type }}.log
  425. - name: check logs
  426. run: |
  427. if cat jmeter_logs/${{ matrix.scripts_type }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  428. echo "check logs filed"
  429. exit 1
  430. fi
  431. - uses: actions/upload-artifact@v3
  432. if: always()
  433. with:
  434. name: jmeter_logs
  435. path: ./jmeter_logs
  436. built_in_database_authn_authz:
  437. runs-on: ubuntu-latest
  438. strategy:
  439. fail-fast: false
  440. matrix:
  441. scripts_type:
  442. - built_in_database_authn
  443. - built_in_database_authz
  444. needs: build_emqx_for_jmeter_tests
  445. steps:
  446. - uses: emqx/setup-beam@v1.16.1-emqx
  447. with:
  448. otp-version: 24.3.4.6
  449. - uses: actions/checkout@v3
  450. - uses: actions/download-artifact@v3
  451. with:
  452. name: emqx.tar
  453. path: /tmp
  454. - name: load docker image
  455. run: |
  456. docker load < /tmp/emqx.tar
  457. - name: docker compose up
  458. timeout-minutes: 5
  459. env:
  460. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  461. PGSQL_TAG: ${{ matrix.mysql_tag }}
  462. run: |
  463. docker-compose \
  464. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  465. up -d --build
  466. - name: wait docker compose up
  467. timeout-minutes: 5
  468. run: |
  469. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  470. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  471. sleep 5;
  472. done
  473. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  474. != $(docker ps -a --filter name=client | wc -l) ]; do
  475. sleep 1
  476. done
  477. docker ps -a
  478. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  479. - uses: actions/checkout@v3
  480. with:
  481. repository: emqx/emqx-fvt
  482. ref: broker-autotest-v2
  483. path: scripts
  484. - uses: actions/setup-java@v3
  485. with:
  486. java-version: '8.0.282' # The JDK version to make available on the path.
  487. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  488. architecture: x64 # (x64 or x86) - defaults to x64
  489. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  490. distribution: 'zulu'
  491. - uses: actions/download-artifact@v3
  492. with:
  493. name: apache-jmeter.tgz
  494. path: /tmp
  495. - name: install jmeter
  496. timeout-minutes: 10
  497. env:
  498. JMETER_VERSION: 5.4.3
  499. run: |
  500. cd /tmp && tar -xvf apache-jmeter.tgz
  501. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  502. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  503. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-fuse-2.0.2-jar-with-dependencies.jar
  504. wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/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
  505. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  506. - name: run jmeter
  507. run: |
  508. /opt/jmeter/bin/jmeter.sh \
  509. -Jjmeter.save.saveservice.output_format=xml -n \
  510. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  511. -Demqx_ip=$HAPROXY_IP \
  512. -l jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl \
  513. -j jmeter_logs/logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.log
  514. - name: check logs
  515. run: |
  516. if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  517. echo "check logs filed"
  518. exit 1
  519. fi
  520. - uses: actions/upload-artifact@v3
  521. if: always()
  522. with:
  523. name: jmeter_logs
  524. path: ./jmeter_logs
  525. delete-artifact:
  526. runs-on: ubuntu-latest
  527. needs: [advanced_feat,pgsql_authn_authz,JWT_authn,mysql_authn_authz,built_in_database_authn_authz]
  528. steps:
  529. - uses: geekyeggo/delete-artifact@v2
  530. with:
  531. name: emqx.tar