run_jmeter_tests.yaml 21 KB

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