run_jmeter_tests.yaml 21 KB

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