run_jmeter_tests.yaml 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  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. env:
  143. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  144. strategy:
  145. fail-fast: false
  146. matrix:
  147. pgsql_tag:
  148. - 9
  149. - 10
  150. - 11
  151. - 12
  152. - 13
  153. scripts_type:
  154. - pgsql_authn
  155. - pgsql_authz
  156. needs: build_emqx_for_jmeter_tests
  157. steps:
  158. - uses: erlef/setup-beam@v1.15.4
  159. with:
  160. otp-version: 25.3.2
  161. - uses: actions/checkout@v3
  162. - uses: actions/download-artifact@v3
  163. with:
  164. name: emqx.tar
  165. path: /tmp
  166. - name: load docker image
  167. run: |
  168. docker load < /tmp/emqx.tar
  169. - name: docker compose up
  170. timeout-minutes: 5
  171. env:
  172. PGSQL_TAG: ${{ matrix.pgsql_tag }}
  173. run: |
  174. docker-compose \
  175. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  176. -f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
  177. up -d --build
  178. - name: wait docker compose up
  179. timeout-minutes: 5
  180. run: |
  181. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  182. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  183. sleep 5;
  184. done
  185. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  186. != $(docker ps -a --filter name=client | wc -l) ]; do
  187. sleep 1
  188. done
  189. docker ps -a
  190. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  191. echo PGSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pgsql-tls) >> $GITHUB_ENV
  192. - uses: actions/checkout@v3
  193. with:
  194. repository: emqx/emqx-fvt
  195. ref: broker-autotest-v5
  196. path: scripts
  197. - uses: actions/setup-java@v3
  198. with:
  199. java-version: '8.0.282' # The JDK version to make available on the path.
  200. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  201. architecture: x64 # (x64 or x86) - defaults to x64
  202. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  203. distribution: 'zulu'
  204. - uses: actions/download-artifact@v3
  205. with:
  206. name: apache-jmeter.tgz
  207. path: /tmp
  208. - name: install jmeter
  209. timeout-minutes: 10
  210. env:
  211. JMETER_VERSION: 5.4.3
  212. run: |
  213. cd /tmp && tar -xvf apache-jmeter.tgz
  214. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  215. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  216. 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
  217. 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
  218. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  219. - name: run jmeter
  220. run: |
  221. /opt/jmeter/bin/jmeter.sh \
  222. -Jjmeter.save.saveservice.output_format=xml -n \
  223. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  224. -Demqx_ip=$HAPROXY_IP \
  225. -Ddb_ip=$PGSQL_IP \
  226. -Dport="5432" \
  227. -Dpgsql_user="root" \
  228. -Dpgsql_pwd="public" \
  229. -Ddbname="mqtt" \
  230. -Droute="apps/emqx_authn/test/data/certs" \
  231. -Dca_name="ca.crt" \
  232. -Dkey_name="client.key" \
  233. -Dcert_name="client.crt" \
  234. -l jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.pgsql_tag }}.jtl \
  235. -j jmeter_logs/logs/${{ matrix.scripts_type }}_${{ matrix.pgsql_tag }}.log
  236. - name: check logs
  237. run: |
  238. if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.pgsql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  239. echo "check logs failed"
  240. exit 1
  241. fi
  242. - name: dump docker compose logs
  243. if: failure()
  244. run: |
  245. docker-compose -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml logs --no-color > ./jmeter_logs/emqx.log
  246. - uses: actions/upload-artifact@v3
  247. if: always()
  248. with:
  249. name: jmeter_logs
  250. path: ./jmeter_logs
  251. mysql_authn_authz:
  252. runs-on: ubuntu-22.04
  253. strategy:
  254. fail-fast: false
  255. matrix:
  256. mysql_tag:
  257. - 5.7
  258. - 8
  259. scripts_type:
  260. - mysql_authn
  261. - mysql_authz
  262. needs: build_emqx_for_jmeter_tests
  263. steps:
  264. - uses: erlef/setup-beam@v1.15.4
  265. with:
  266. otp-version: 25.3.2
  267. - uses: actions/checkout@v3
  268. - uses: actions/download-artifact@v3
  269. with:
  270. name: emqx.tar
  271. path: /tmp
  272. - name: load docker image
  273. run: |
  274. docker load < /tmp/emqx.tar
  275. - name: docker compose up
  276. timeout-minutes: 5
  277. env:
  278. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  279. PGSQL_TAG: ${{ matrix.mysql_tag }}
  280. run: |
  281. docker-compose \
  282. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  283. -f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
  284. up -d --build
  285. - name: wait docker compose up
  286. timeout-minutes: 5
  287. run: |
  288. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  289. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  290. sleep 5;
  291. done
  292. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  293. != $(docker ps -a --filter name=client | wc -l) ]; do
  294. sleep 1
  295. done
  296. docker ps -a
  297. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  298. echo MYSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-tls) >> $GITHUB_ENV
  299. - uses: actions/checkout@v3
  300. with:
  301. repository: emqx/emqx-fvt
  302. ref: broker-autotest-v5
  303. path: scripts
  304. - uses: actions/setup-java@v3
  305. with:
  306. java-version: '8.0.282' # The JDK version to make available on the path.
  307. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  308. architecture: x64 # (x64 or x86) - defaults to x64
  309. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  310. distribution: 'zulu'
  311. - uses: actions/download-artifact@v3
  312. with:
  313. name: apache-jmeter.tgz
  314. path: /tmp
  315. - name: install jmeter
  316. timeout-minutes: 10
  317. env:
  318. JMETER_VERSION: 5.4.3
  319. run: |
  320. cd /tmp && tar -xvf apache-jmeter.tgz
  321. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  322. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  323. 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
  324. 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
  325. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  326. - name: run jmeter
  327. run: |
  328. /opt/jmeter/bin/jmeter.sh \
  329. -Jjmeter.save.saveservice.output_format=xml -n \
  330. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  331. -Demqx_ip=$HAPROXY_IP \
  332. -Dmysql_ip=$MYSQL_IP \
  333. -Dport="3306" \
  334. -Dmysql_user="root" \
  335. -Dmysql_pwd="public" \
  336. -Ddbname="mqtt" \
  337. -Droute="apps/emqx_authn/test/data/certs" \
  338. -Dca_name="ca.crt" \
  339. -Dkey_name="client.key" \
  340. -Dcert_name="client.crt" \
  341. -l jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl \
  342. -j jmeter_logs/logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.log
  343. - name: check logs
  344. run: |
  345. if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  346. echo "check logs failed"
  347. exit 1
  348. fi
  349. - uses: actions/upload-artifact@v3
  350. if: always()
  351. with:
  352. name: jmeter_logs
  353. path: ./jmeter_logs
  354. JWT_authn:
  355. runs-on: ubuntu-22.04
  356. strategy:
  357. fail-fast: false
  358. matrix:
  359. scripts_type:
  360. - jwt_authn
  361. needs: build_emqx_for_jmeter_tests
  362. steps:
  363. - uses: erlef/setup-beam@v1.15.4
  364. with:
  365. otp-version: 25.3.2
  366. - uses: actions/checkout@v3
  367. - uses: actions/download-artifact@v3
  368. with:
  369. name: emqx.tar
  370. path: /tmp
  371. - name: load docker image
  372. run: |
  373. docker load < /tmp/emqx.tar
  374. - name: docker compose up
  375. timeout-minutes: 5
  376. env:
  377. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  378. run: |
  379. docker-compose \
  380. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  381. up -d --build
  382. - name: wait docker compose up
  383. timeout-minutes: 5
  384. run: |
  385. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  386. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  387. sleep 5;
  388. done
  389. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  390. != $(docker ps -a --filter name=client | wc -l) ]; do
  391. sleep 1
  392. done
  393. docker ps -a
  394. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  395. - uses: actions/checkout@v3
  396. with:
  397. repository: emqx/emqx-fvt
  398. ref: broker-autotest-v5
  399. path: scripts
  400. - name: run jwks_server
  401. timeout-minutes: 10
  402. run: |
  403. cd scripts/jwks-server
  404. mvn package
  405. cd target
  406. 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 \
  407. -c "java -jar jwkserver-0.0.1.jar"
  408. - uses: actions/setup-java@v3
  409. with:
  410. java-version: '8.0.282' # The JDK version to make available on the path.
  411. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  412. architecture: x64 # (x64 or x86) - defaults to x64
  413. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  414. distribution: 'zulu'
  415. - uses: actions/download-artifact@v3
  416. with:
  417. name: apache-jmeter.tgz
  418. path: /tmp
  419. - name: install jmeter
  420. timeout-minutes: 10
  421. env:
  422. JMETER_VERSION: 5.4.3
  423. run: |
  424. cd /tmp && tar -xvf apache-jmeter.tgz
  425. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  426. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  427. 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
  428. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  429. - name: run jmeter
  430. run: |
  431. /opt/jmeter/bin/jmeter.sh \
  432. -Jjmeter.save.saveservice.output_format=xml -n \
  433. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  434. -Demqx_ip=$HAPROXY_IP \
  435. -Djwks_ip="172.100.239.88" \
  436. -l jmeter_logs/${{ matrix.scripts_type }}.jtl \
  437. -j jmeter_logs/logs/${{ matrix.scripts_type }}.log
  438. - name: check logs
  439. run: |
  440. if cat jmeter_logs/${{ matrix.scripts_type }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  441. echo "check logs failed"
  442. exit 1
  443. fi
  444. - uses: actions/upload-artifact@v3
  445. if: always()
  446. with:
  447. name: jmeter_logs
  448. path: ./jmeter_logs
  449. built_in_database_authn_authz:
  450. runs-on: ubuntu-22.04
  451. strategy:
  452. fail-fast: false
  453. matrix:
  454. scripts_type:
  455. - built_in_database_authn
  456. - built_in_database_authz
  457. needs: build_emqx_for_jmeter_tests
  458. steps:
  459. - uses: erlef/setup-beam@v1.15.4
  460. with:
  461. otp-version: 25.3.2
  462. - uses: actions/checkout@v3
  463. - uses: actions/download-artifact@v3
  464. with:
  465. name: emqx.tar
  466. path: /tmp
  467. - name: load docker image
  468. run: |
  469. docker load < /tmp/emqx.tar
  470. - name: docker compose up
  471. timeout-minutes: 5
  472. env:
  473. _EMQX_DOCKER_IMAGE_TAG: emqx/emqx:${{ needs.build_emqx_for_jmeter_tests.outputs.version }}
  474. PGSQL_TAG: ${{ matrix.mysql_tag }}
  475. run: |
  476. docker-compose \
  477. -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
  478. up -d --build
  479. - name: wait docker compose up
  480. timeout-minutes: 5
  481. run: |
  482. while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
  483. echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
  484. sleep 5;
  485. done
  486. while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
  487. != $(docker ps -a --filter name=client | wc -l) ]; do
  488. sleep 1
  489. done
  490. docker ps -a
  491. echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
  492. - uses: actions/checkout@v3
  493. with:
  494. repository: emqx/emqx-fvt
  495. ref: broker-autotest-v5
  496. path: scripts
  497. - uses: actions/setup-java@v3
  498. with:
  499. java-version: '8.0.282' # The JDK version to make available on the path.
  500. java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
  501. architecture: x64 # (x64 or x86) - defaults to x64
  502. # https://github.com/actions/setup-java/blob/main/docs/switching-to-v2.md
  503. distribution: 'zulu'
  504. - uses: actions/download-artifact@v3
  505. with:
  506. name: apache-jmeter.tgz
  507. path: /tmp
  508. - name: install jmeter
  509. timeout-minutes: 10
  510. env:
  511. JMETER_VERSION: 5.4.3
  512. run: |
  513. cd /tmp && tar -xvf apache-jmeter.tgz
  514. echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  515. echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
  516. 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
  517. 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
  518. ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
  519. - name: run jmeter
  520. run: |
  521. /opt/jmeter/bin/jmeter.sh \
  522. -Jjmeter.save.saveservice.output_format=xml -n \
  523. -t scripts/broker-autotest-suite/${{ matrix.scripts_type }}.jmx \
  524. -Demqx_ip=$HAPROXY_IP \
  525. -l jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl \
  526. -j jmeter_logs/logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.log
  527. - name: check logs
  528. run: |
  529. if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
  530. echo "check logs failed"
  531. exit 1
  532. fi
  533. - uses: actions/upload-artifact@v3
  534. if: always()
  535. with:
  536. name: jmeter_logs
  537. path: ./jmeter_logs
  538. delete-artifact:
  539. runs-on: ubuntu-22.04
  540. needs: [advanced_feat,pgsql_authn_authz,JWT_authn,mysql_authn_authz,built_in_database_authn_authz]
  541. steps:
  542. - uses: geekyeggo/delete-artifact@v2
  543. with:
  544. name: emqx.tar