| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443 |
- name: Integration Test Suites
- on:
- push:
- tags:
- - "v4.*"
- pull_request:
- branches:
- - "main-v4.*"
- jobs:
- build:
- runs-on: ubuntu-latest
- outputs:
- imgname: ${{ steps.build_docker.outputs.imgname}}
- version: ${{ steps.build_docker.outputs.version}}
- steps:
- - name: download jmeter
- id: dload_jmeter
- timeout-minutes: 1
- env:
- JMETER_VERSION: 5.3
- run: |
- wget --no-verbose --no-check-certificate -O /tmp/apache-jmeter.tgz https://downloads.apache.org/jmeter/binaries/apache-jmeter-$JMETER_VERSION.tgz
- - uses: actions/upload-artifact@v2
- with:
- name: apache-jmeter.tgz
- path: /tmp/apache-jmeter.tgz
- - uses: actions/checkout@v2
- - name: build docker
- id: build_docker
- run: |
- if [ -f EMQX_ENTERPRISE ]; then
- echo "https://ci%40emqx.io:${{ secrets.CI_GIT_TOKEN }}@github.com" > $HOME/.git-credentials
- git config --global credential.helper store
- echo "${{ secrets.CI_GIT_TOKEN }}" >> scripts/git-token
- make deps-emqx-ee
- make clean
- make emqx-ee-docker
- echo "::set-output name=imgname::emqx-ee"
- echo "::set-output name=version::$(./pkg-vsn.sh)"
- docker save emqx/emqx-ee:$(./pkg-vsn.sh) -o emqx.tar
- else
- make emqx-docker
- echo "::set-output name=imgname::emqx"
- echo "::set-output name=version::$(./pkg-vsn.sh)"
- docker save emqx/emqx:$(./pkg-vsn.sh) -o emqx.tar
- fi
- - uses: actions/upload-artifact@v2
- with:
- name: emqx-docker-image
- path: emqx.tar
- webhook:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- webhook_type:
- - webhook_data_bridge
- needs: build
- steps:
- - uses: actions/checkout@v2
- - uses: actions/download-artifact@v2
- with:
- name: emqx-docker-image
- path: /tmp
- - name: load docker image
- run: docker load < /tmp/emqx.tar
- - name: docker compose up
- timeout-minutes: 5
- env:
- TARGET: emqx/${{ needs.build.outputs.imgname }}
- EMQX_TAG: ${{ needs.build.outputs.version }}
- run: |
- docker-compose \
- -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
- up -d --build
- - uses: actions/checkout@v2
- with:
- repository: emqx/emqx-svt-web-server
- ref: web-server-1.0
- path: emqx-svt-web-server
- - uses: actions/download-artifact@v2
- - name: run webserver in docker
- run: |
- cd ./emqx-svt-web-server/svtserver
- mvn clean package
- cd target
- docker run --name webserver --network emqx_bridge -d -v $(pwd)/svtserver-0.0.1.jar:/webserver/svtserver-0.0.1.jar --workdir /webserver openjdk:8-jdk bash \
- -c "java -jar svtserver-0.0.1.jar"
- - name: wait docker compose up
- timeout-minutes: 5
- run: |
- while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
- echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
- sleep 5;
- done
- docker ps -a
- echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
- echo WEB_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' webserver) >> $GITHUB_ENV
- - uses: actions/checkout@v2
- with:
- repository: emqx/emqx-fvt
- ref: v1.6.0
- path: scripts
- - uses: actions/setup-java@v1
- with:
- java-version: '8.0.282' # The JDK version to make available on the path.
- java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
- architecture: x64 # (x64 or x86) - defaults to x64
- - uses: actions/download-artifact@v2
- with:
- name: apache-jmeter.tgz
- path: /tmp
- - name: install jmeter
- timeout-minutes: 10
- env:
- JMETER_VERSION: 5.3
- run: |
- cd /tmp && tar -xvf apache-jmeter.tgz
- echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
- echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
- wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
- ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
- - name: run jmeter
- run: |
- /opt/jmeter/bin/jmeter.sh \
- -Jjmeter.save.saveservice.output_format=xml -n \
- -t scripts/automate-test-suite/${{ matrix.webhook_type }}.jmx \
- -Demqx_ip=$HAPROXY_IP \
- -Dweb_ip=$WEB_IP \
- -l jmeter_logs/webhook_${{ matrix.webhook_type }}.jtl \
- -j jmeter_logs/logs/webhook_${{ matrix.webhook_type }}.log
- - name: check logs
- run: |
- if cat jmeter_logs/webhook_${{ matrix.webhook_type }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
- echo "check logs filed"
- exit 1
- fi
- - uses: actions/upload-artifact@v1
- if: always()
- with:
- name: jmeter_logs
- path: ./jmeter_logs
- mysql:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- mysql_tag:
- - 5.7
- - 8
- mysql_type:
- - mysql_auth_acl
- needs: build
- steps:
- - uses: actions/checkout@v2
- - uses: actions/download-artifact@v2
- with:
- name: emqx-docker-image
- path: /tmp
- - name: load docker image
- run: docker load < /tmp/emqx.tar
- - name: docker compose up
- timeout-minutes: 5
- env:
- TARGET: emqx/${{ needs.build.outputs.imgname }}
- EMQX_TAG: ${{ needs.build.outputs.version }}
- MYSQL_TAG: ${{ matrix.mysql_tag }}
- run: |
- docker-compose \
- -f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
- -f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
- up -d --build
- - name: wait docker compose up
- timeout-minutes: 5
- run: |
- while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
- echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
- sleep 5;
- done
- while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \
- != $(docker ps -a --filter name=client | wc -l) ]; do
- sleep 1
- done
- docker ps -a
- echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
- echo MYSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql) >> $GITHUB_ENV
- - uses: actions/checkout@v2
- with:
- repository: emqx/emqx-fvt
- ref: v1.6.0
- path: scripts
- - uses: actions/setup-java@v1
- with:
- java-version: '8.0.282' # The JDK version to make available on the path.
- java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
- architecture: x64 # (x64 or x86) - defaults to x64
- - uses: actions/download-artifact@v2
- with:
- name: apache-jmeter.tgz
- path: /tmp
- - name: install jmeter
- timeout-minutes: 10
- env:
- JMETER_VERSION: 5.3
- run: |
- cd /tmp && tar -xvf apache-jmeter.tgz
- echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
- echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
- wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
- ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
- - name: install jmeter plugin
- run: |
- wget --no-verbose -O "/opt/jmeter/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
- - name: run jmeter
- run: |
- /opt/jmeter/bin/jmeter.sh \
- -Jjmeter.save.saveservice.output_format=xml -n \
- -t scripts/automate-test-suite/${{ matrix.mysql_type }}.jmx \
- -Droute="apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data" \
- -Dmysql_ip=$MYSQL_IP \
- -Demqx_ip=$HAPROXY_IP \
- -Ddbname="mqtt" \
- -Dmysql_user="ssluser" \
- -Ddb_user="root" \
- -Dmysql_pwd="public" \
- -Dconfig_path="/tmp/etc" \
- -Ddocker_path=".ci/docker-compose-file" \
- -l jmeter_logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.jtl \
- -j jmeter_logs/logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.log
- - name: check logs
- run: |
- if cat jmeter_logs/${{ matrix.mysql_type }}_${{ matrix.mysql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
- echo "check logs filed"
- exit 1
- fi
- - uses: actions/upload-artifact@v1
- if: always()
- with:
- name: jmeter_logs
- path: ./jmeter_logs
- postgresql:
- runs-on: ubuntu-latest
- strategy:
- fail-fast: false
- matrix:
- pgsql_type:
- - pgsql_auth_acl
- pgsql_tag:
- - 9
- - 10
- - 11
- - 12
- - 13
- needs: build
- steps:
- - uses: actions/checkout@v2
- - uses: actions/download-artifact@v2
- with:
- name: emqx-docker-image
- path: /tmp
- - name: load docker image
- run: docker load < /tmp/emqx.tar
- - name: docker compose up
- timeout-minutes: 5
- env:
- TARGET: emqx/${{ needs.build.outputs.imgname }}
- EMQX_TAG: ${{ needs.build.outputs.version }}
- PGSQL_TAG: ${{ matrix.pgsql_tag }}
- run: |
- docker-compose \
- -f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
- -f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
- up -d --build
- - name: wait docker compose up
- timeout-minutes: 5
- run: |
- while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
- echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
- sleep 5;
- done
- docker ps -a
- echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
- echo PGSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pgsql) >> $GITHUB_ENV
- echo CONFIG_PATH=$(docker inspect -f '{{ range .Mounts }}{{ if eq .Name "docker-compose-file_etc" }}{{ .Source }}{{ end }}{{ end }}' node1.emqx.io) >> $GITHUB_ENV
- - uses: actions/checkout@v2
- with:
- repository: emqx/emqx-fvt
- ref: v1.6.0
- path: scripts
- - uses: actions/setup-java@v1
- with:
- java-version: '8.0.282' # The JDK version to make available on the path.
- java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
- architecture: x64 # (x64 or x86) - defaults to x64
- - uses: actions/download-artifact@v2
- with:
- name: apache-jmeter.tgz
- path: /tmp
- - name: install jmeter
- timeout-minutes: 10
- env:
- JMETER_VERSION: 5.3
- run: |
- cd /tmp && tar -xvf apache-jmeter.tgz
- echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
- echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
- wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
- ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
- - name: install jmeter plugin
- run: |
- wget --no-verbose -O "/opt/jmeter/lib/postgresql-42.2.18.jar" https://repo1.maven.org/maven2/org/postgresql/postgresql/42.2.18/postgresql-42.2.18.jar
- - name: run jmeter
- run: |
- sudo /opt/jmeter/bin/jmeter.sh \
- -Jjmeter.save.saveservice.output_format=xml -n \
- -t scripts/automate-test-suite/${{ matrix.pgsql_type }}.jmx \
- -Droute="apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data" \
- -Dca_name="ca.pem" \
- -Dkey_name="client-key.pem" \
- -Dcert_name="client-cert.pem" \
- -Ddb_ip=$PGSQL_IP \
- -Dpgsql_ip=$PGSQL_IP \
- -Demqx_ip=$HAPROXY_IP \
- -Dpgsql_user="root" \
- -Dpgsql_pwd="public" \
- -Ddbname="mqtt" \
- -Dpgsql_db="mqtt" \
- -Dport="5432" \
- -Dconfig_path=$CONFIG_PATH \
- -Ddocker_path=".ci/docker-compose-file" \
- -l jmeter_logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.jtl \
- -j jmeter_logs/logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.log
- - name: check logs
- run: |
- if cat jmeter_logs/${{ matrix.pgsql_type }}_${{ matrix.pgsql_tag }}.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
- echo "check logs filed"
- exit 1
- fi
- - uses: actions/upload-artifact@v1
- if: always()
- with:
- name: jmeter_logs
- path: ./jmeter_logs
- http:
- runs-on: ubuntu-latest
- needs: build
- steps:
- - uses: actions/checkout@v2
- - uses: actions/download-artifact@v2
- with:
- name: emqx-docker-image
- path: /tmp
- - name: load docker image
- run: docker load < /tmp/emqx.tar
- - name: docker compose up
- timeout-minutes: 5
- env:
- TARGET: emqx/${{ needs.build.outputs.imgname }}
- EMQX_TAG: ${{ needs.build.outputs.version }}
- MYSQL_TAG: 8
- run: |
- docker-compose \
- -f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
- -f .ci/docker-compose-file/docker-compose-mysql-tcp.yaml \
- -f .ci/docker-compose-file/docker-compose-enterprise-tomcat-tcp.yaml \
- up -d --build
- - name: wait docker compose up
- timeout-minutes: 5
- run: |
- while [ "$(docker inspect -f '{{ .State.Health.Status}}' node1.emqx.io)" != "healthy" ] || [ "$(docker inspect -f '{{ .State.Health.Status}}' node2.emqx.io)" != "healthy" ]; do
- echo "['$(date -u +"%y-%m-%dt%h:%m:%sz")']:waiting emqx";
- sleep 5;
- done
- docker ps -a
- echo HAPROXY_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' haproxy) >> $GITHUB_ENV
- echo HTTP_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' Tomcat) >> $GITHUB_ENV
- echo MYSQL_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql) >> $GITHUB_ENV
- echo CONFIG_PATH=$(docker inspect -f '{{ range .Mounts }}{{ if eq .Name "docker-compose-file_etc" }}{{ .Source }}{{ end }}{{ end }}' node1.emqx.io) >> $GITHUB_ENV
- - uses: actions/checkout@v2
- with:
- repository: emqx/emqx-fvt
- ref: v1.6.0
- path: scripts
- - uses: actions/setup-java@v1
- with:
- java-version: '8.0.282' # The JDK version to make available on the path.
- java-package: jdk # (jre, jdk, or jdk+fx) - defaults to jdk
- architecture: x64 # (x64 or x86) - defaults to x64
- - uses: actions/download-artifact@v2
- with:
- name: apache-jmeter.tgz
- path: /tmp
- - name: install jmeter
- timeout-minutes: 10
- env:
- JMETER_VERSION: 5.3
- run: |
- cd /tmp && tar -xvf apache-jmeter.tgz
- echo "jmeter.save.saveservice.output_format=xml" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
- echo "jmeter.save.saveservice.response_data.on_error=true" >> /tmp/apache-jmeter-$JMETER_VERSION/user.properties
- wget --no-verbose -O /tmp/apache-jmeter-$JMETER_VERSION/lib/ext/mqtt-xmeter-2.0.2-jar-with-dependencies.jar https://raw.githubusercontent.com/xmeter-net/mqtt-jmeter/master/Download/v2.0.2/mqtt-xmeter-2.0.2-jar-with-dependencies.jar
- ln -s /tmp/apache-jmeter-$JMETER_VERSION /opt/jmeter
- - name: install jmeter plugin
- run: |
- wget --no-verbose -O "/opt/jmeter/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
- - name: run jmeter
- run: |
- sudo /opt/jmeter/bin/jmeter.sh \
- -Jjmeter.save.saveservice.output_format=xml -n \
- -t scripts/automate-test-suite/http_auth_acl.jmx \
- -Dmysql_ip=$MYSQL_IP \
- -Demqx_ip=$HAPROXY_IP \
- -Dweb_server_ip=$HTTP_IP \
- -Dconfig_path=$CONFIG_PATH \
- -Ddocker_path=".ci/docker-compose-file" \
- -l jmeter_logs/http_auth_acl.jtl \
- -j jmeter_logs/logs/http_auth_acl.log
- - name: check logs
- run: |
- if cat jmeter_logs/http_auth_acl.jtl | grep -e '<failure>true</failure>' > /dev/null 2>&1; then
- echo "check logs filed"
- sudo cat /var/lib/docker/volumes/docker-compose-file_etc/_data/emqx.conf
- exit 1
- fi
- - uses: actions/upload-artifact@v1
- if: always()
- with:
- name: jmeter_logs
- path: ./jmeter_logs
|