run_jmeter_tests.yaml 22 KB

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