name: Compatibility Test Suite on: schedule: - cron: '0 */6 * * *' push: tags: - v* - e* jobs: ldap: runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: ldap_tag: - 2.4.50 network_type: - ipv4 - ipv6 steps: - uses: actions/checkout@v1 - name: docker compose up env: LDAP_TAG: ${{ matrix.ldap_tag }} run: | docker-compose \ -f .ci/docker-compose-file/docker-compose-ldap-tcp.yaml \ -f .ci/docker-compose-file/docker-compose.yaml \ up -d --build - name: setup if: matrix.network_type == 'ipv4' run: | echo EMQX_AUTH__LDAP__SERVERS=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ldap) >> "$GITHUB_ENV" - name: setup if: matrix.network_type == 'ipv6' run: | echo EMQX_AUTH__LDAP__SERVERS=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.GlobalIPv6Address}}{{end}}' ldap) >> "$GITHUB_ENV" - name: set git token run: | if make emqx-ee --dry-run > /dev/null 2>&1; then docker exec -i erlang bash -c "echo \"https://ci%40emqx.io:${{ secrets.CI_GIT_TOKEN }}@github.com\" > /root/.git-credentials && git config --global credential.helper store" fi - name: run test cases run: | export CUTTLEFISH_ENV_OVERRIDE_PREFIX=EMQX_ printenv > .env docker exec -i erlang sh -c "make ensure-rebar3" docker exec -i erlang sh -c "./rebar3 eunit --dir apps/emqx_auth_ldap" docker exec --env-file .env -i erlang sh -c "./rebar3 ct --dir apps/emqx_auth_ldap" - uses: actions/upload-artifact@v1 if: failure() with: name: logs_ldap${{ matrix.ldap_tag }}_${{ matrix.network_type }} path: _build/test/logs mongo: runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: mongo_tag: - 3 - 4 network_type: - ipv4 - ipv6 connect_type: - tls - tcp steps: - uses: actions/checkout@v1 - name: docker-compose up run: | docker-compose \ -f .ci/docker-compose-file/docker-compose-mongo-${{ matrix.connect_type }}.yaml \ -f .ci/docker-compose-file/docker-compose.yaml \ up -d --build - name: setup env: MONGO_TAG: ${{ matrix.mongo_tag }} if: matrix.connect_type == 'tls' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__MONGO__SSL=on EMQX_AUTH__MONGO__SSL__CACERTFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/ca.pem EMQX_AUTH__MONGO__SSL__CERTFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/client-cert.pem EMQX_AUTH__MONGO__SSL__KEYFILE=/emqx/apps/emqx_auth_mongo/test/emqx_auth_mongo_SUITE_data/client-key.pem EMQX_AUTH__MONGO__SSL__VERIFY=true EMQX_AUTH__MONGO__SSL__SERVER_NAME_INDICATION=disable EOF - name: setup env: MONGO_TAG: ${{ matrix.mongo_tag }} if: matrix.connect_type == 'tcp' run: | echo EMQX_AUTH__MONGO__SSL=off >> "$GITHUB_ENV" - name: setup if: matrix.network_type == 'ipv4' run: | echo "EMQX_AUTH__MONGO__SERVER=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongo):27017" >> "$GITHUB_ENV" - name: setup if: matrix.network_type == 'ipv6' run: | echo "EMQX_AUTH__MONGO__SERVER=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.GlobalIPv6Address}}{{end}}' mongo):27017" >> "$GITHUB_ENV" - name: set git token run: | if make emqx-ee --dry-run > /dev/null 2>&1; then docker exec -i erlang bash -c "echo \"https://ci%40emqx.io:${{ secrets.CI_GIT_TOKEN }}@github.com\" > /root/.git-credentials && git config --global credential.helper store" fi - name: run test cases run: | export CUTTLEFISH_ENV_OVERRIDE_PREFIX=EMQX_ printenv > .env docker exec -i erlang sh -c "make ensure-rebar3" docker exec -i erlang sh -c "./rebar3 eunit --dir apps/emqx_auth_mongo" docker exec --env-file .env -i erlang sh -c "./rebar3 ct --dir apps/emqx_auth_mongo" - uses: actions/upload-artifact@v1 if: failure() with: name: logs_mongo${{ matrix.mongo_tag }}_${{ matrix.network_type }}_${{ matrix.connect_type }} path: _build/test/logs mysql: runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: mysql_tag: - 5.7 - 8 network_type: - ipv4 - ipv6 connect_type: - tls - tcp steps: - uses: actions/checkout@v1 - name: docker-compose up timeout-minutes: 5 run: | docker-compose \ -f .ci/docker-compose-file/docker-compose-mysql-${{ matrix.connect_type }}.yaml \ -f .ci/docker-compose-file/docker-compose.yaml \ up -d --build while [ $(docker ps -a --filter name=client --filter exited=0 | wc -l) \ != $(docker ps -a --filter name=client | wc -l) ]; do sleep 5 done - name: setup env: MYSQL_TAG: ${{ matrix.mysql_tag }} if: matrix.connect_type == 'tls' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__MYSQL__USERNAME=ssluser EMQX_AUTH__MYSQL__PASSWORD=public EMQX_AUTH__MYSQL__DATABASE=mqtt EMQX_AUTH__MYSQL__SSL=on EMQX_AUTH__MYSQL__SSL__CACERTFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/ca.pem EMQX_AUTH__MYSQL__SSL__CERTFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/client-cert.pem EMQX_AUTH__MYSQL__SSL__KEYFILE=/emqx/apps/emqx_auth_mysql/test/emqx_auth_mysql_SUITE_data/client-key.pem EMQX_AUTH__MYSQL__SSL__VERIFY=true EMQX_AUTH__MYSQL__SSL__SERVER_NAME_INDICATION=disable EOF - name: setup env: MYSQL_TAG: ${{ matrix.mysql_tag }} if: matrix.connect_type == 'tcp' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__MYSQL__USERNAME=root EMQX_AUTH__MYSQL__PASSWORD=public EMQX_AUTH__MYSQL__DATABASE=mqtt EMQX_AUTH__MYSQL__SSL=off EOF - name: setup if: matrix.network_type == 'ipv4' run: | echo "EMQX_AUTH__MYSQL__SERVER=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql):3306" >> "$GITHUB_ENV" - name: setup if: matrix.network_type == 'ipv6' run: | echo "EMQX_AUTH__MYSQL__SERVER=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.GlobalIPv6Address}}{{end}}' mysql):3306" >> "$GITHUB_ENV" - name: set git token run: | if make emqx-ee --dry-run > /dev/null 2>&1; then docker exec -i erlang bash -c "echo \"https://ci%40emqx.io:${{ secrets.CI_GIT_TOKEN }}@github.com\" > /root/.git-credentials && git config --global credential.helper store" fi - name: run test cases run: | export CUTTLEFISH_ENV_OVERRIDE_PREFIX=EMQX_ printenv > .env docker exec -i erlang sh -c "make ensure-rebar3" docker exec -i erlang sh -c "./rebar3 eunit --dir apps/emqx_auth_mysql" docker exec --env-file .env -i erlang sh -c "./rebar3 ct --dir apps/emqx_auth_mysql" - uses: actions/upload-artifact@v1 if: failure() with: name: logs_mysql${{ matrix.mysql_tag }}_${{ matrix.network_type }}_${{ matrix.connect_type }} path: _build/test/logs pgsql: runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: pgsql_tag: - 9 - 10 - 11 - 12 - 13 network_type: - ipv4 - ipv6 connect_type: - tls - tcp steps: - uses: actions/checkout@v1 - name: docker-compose up run: | docker-compose \ -f .ci/docker-compose-file/docker-compose-pgsql-${{ matrix.connect_type }}.yaml \ -f .ci/docker-compose-file/docker-compose.yaml \ up -d --build - name: setup env: PGSQL_TAG: ${{ matrix.pgsql_tag }} if: matrix.connect_type == 'tls' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__PGSQL__SSL=on EMQX_AUTH__PGSQL__SSL__CACERTFILE=/emqx/apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/ca.pem EMQX_AUTH__PGSQL__SSL__CERTFILE=/emqx/apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/client-cert.pem EMQX_AUTH__PGSQL__SSL__KEYFILE=/emqx/apps/emqx_auth_pgsql/test/emqx_auth_pgsql_SUITE_data/client-key.pem EMQX_AUTH__PGSQL__SSL__VERIFY=true EMQX_AUTH__PGSQL__SSL__SERVER_NAME_INDICATION=disable EOF - name: setup env: PGSQL_TAG: ${{ matrix.pgsql_tag }} if: matrix.connect_type == 'tcp' run: | echo EMQX_AUTH__PGSQL__SSL=off >> "$GITHUB_ENV" - name: setup if: matrix.network_type == 'ipv4' run: | echo "EMQX_AUTH__PGSQL__SERVER=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pgsql):5432" >> "$GITHUB_ENV" - name: setup if: matrix.network_type == 'ipv6' run: | echo "EMQX_AUTH__PGSQL__SERVER=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.GlobalIPv6Address}}{{end}}' pgsql):5432" >> "$GITHUB_ENV" - name: set git token run: | if make emqx-ee --dry-run > /dev/null 2>&1; then docker exec -i erlang bash -c "echo \"https://ci%40emqx.io:${{ secrets.CI_GIT_TOKEN }}@github.com\" > /root/.git-credentials && git config --global credential.helper store" fi - name: run test cases run: | export EMQX_AUTH__PGSQL__USERNAME=root \ EMQX_AUTH__PGSQL__PASSWORD=public \ EMQX_AUTH__PGSQL__DATABASE=mqtt \ CUTTLEFISH_ENV_OVERRIDE_PREFIX=EMQX_ printenv > .env docker exec -i erlang sh -c "make ensure-rebar3" docker exec -i erlang sh -c "./rebar3 eunit --dir apps/emqx_auth_pgsql" docker exec --env-file .env -i erlang sh -c "./rebar3 ct --dir apps/emqx_auth_pgsql" - uses: actions/upload-artifact@v1 if: failure() with: name: logs_pgsql${{ matrix.pgsql_tag }}_${{ matrix.network_type }}_${{ matrix.connect_type }} path: _build/test/logs redis: runs-on: ubuntu-20.04 strategy: fail-fast: false matrix: redis_tag: - 5 - 6 network_type: - ipv4 - ipv6 connect_type: - tls - tcp node_type: - single - sentinel - cluster exclude: - redis_tag: 5 connect_type: tls steps: - uses: actions/checkout@v1 - name: docker-compose up run: | docker-compose \ -f .ci/docker-compose-file/docker-compose-redis-${{ matrix.node_type }}-${{ matrix.connect_type }}.yaml \ -f .ci/docker-compose-file/docker-compose.yaml \ up -d --build - name: setup env: REDIS_TAG: ${{ matrix.redis_tag }} if: matrix.connect_type == 'tls' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__REDIS__SSL=on EMQX_AUTH__REDIS__SSL__CACERTFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/ca.crt EMQX_AUTH__REDIS__SSL__CERTFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/redis.crt EMQX_AUTH__REDIS__SSL__KEYFILE=/emqx/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE_data/certs/redis.key EMQX_AUTH__REDIS__SSL__VERIFY=true EMQX_AUTH__REDIS__SSL__SERVER_NAME_INDICATION=disable EOF - name: setup env: REDIS_TAG: ${{ matrix.redis_tag }} if: matrix.connect_type == 'tcp' run: | echo EMQX_AUTH__REDIS__SSL=off >> "$GITHUB_ENV" - name: get server address run: | ipv4_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' redis) ipv6_address=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.GlobalIPv6Address}}{{end}}' redis) cat <<-EOF >> "$GITHUB_ENV" redis_ipv4_address=$ipv4_address redis_ipv6_address=$ipv6_address EOF - name: setup if: matrix.node_type == 'single' && matrix.connect_type == 'tcp' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__REDIS__TYPE=single EMQX_AUTH__REDIS__SERVER=${redis_${{ matrix.network_type }}_address}:6379 EOF - name: setup if: matrix.node_type == 'single' && matrix.connect_type == 'tls' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__REDIS__TYPE=single EMQX_AUTH__REDIS__SERVER=${redis_${{ matrix.network_type }}_address}:6380 EOF - name: setup if: matrix.node_type == 'sentinel' && matrix.connect_type == 'tcp' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__REDIS__TYPE=sentinel EMQX_AUTH__REDIS__SERVER=${redis_${{ matrix.network_type }}_address}:26379 EMQX_AUTH__REDIS__SENTINEL=mymaster EOF - name: setup if: matrix.node_type == 'sentinel' && matrix.connect_type == 'tls' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__REDIS__TYPE=sentinel EMQX_AUTH__REDIS__SERVER=${redis_${{ matrix.network_type }}_address}:26380 EMQX_AUTH__REDIS__SENTINEL=mymaster EOF - name: setup if: matrix.node_type == 'cluster' && matrix.connect_type == 'tcp' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__REDIS__TYPE=cluster EMQX_AUTH__REDIS__SERVER=${redis_${{ matrix.network_type }}_address}:7000 EOF - name: setup if: matrix.node_type == 'cluster' && matrix.connect_type == 'tls' run: | cat <<-EOF >> "$GITHUB_ENV" EMQX_AUTH__REDIS__TYPE=cluster EMQX_AUTH__REDIS__SERVER=${redis_${{ matrix.network_type }}_address}:8000 EOF - name: set git token run: | if make emqx-ee --dry-run > /dev/null 2>&1; then docker exec -i erlang bash -c "echo \"https://ci%40emqx.io:${{ secrets.CI_GIT_TOKEN }}@github.com\" > /root/.git-credentials && git config --global credential.helper store" fi - name: run test cases run: | export CUTTLEFISH_ENV_OVERRIDE_PREFIX=EMQX_ export EMQX_AUTH__REIDS__PASSWORD=public printenv > .env docker exec -i erlang sh -c "make ensure-rebar3" docker exec -i erlang sh -c "./rebar3 eunit --dir apps/emqx_auth_redis" docker exec --env-file .env -i erlang sh -c "./rebar3 ct --dir apps/emqx_auth_redis" - uses: actions/upload-artifact@v1 if: failure() with: name: logs_redis${{ matrix.redis_tag }}_${{ matrix.node_type }}_${{ matrix.network_type }}_${{ matrix.connect_type }} path: _build/test/logs