run_jmeter_tests.yaml 20 KB

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