From 66ebcfa3014a20c1258f475a1b5e2c2cfa09b097 Mon Sep 17 00:00:00 2001 From: z8674558 Date: Tue, 15 Dec 2020 11:06:06 +0900 Subject: [PATCH] test(emqx_auth_redis): add test cases for sentinel --- .../.ci/docker-compose-cluster-tls.yml | 2 +- .../.ci/docker-compose-cluster.yml | 2 +- .../.ci/docker-compose-sentinel.yml | 38 ++++++++++ apps/emqx_auth_redis/.ci/redis/redis-tls.conf | 5 ++ apps/emqx_auth_redis/.ci/redis/redis.conf | 5 +- apps/emqx_auth_redis/.ci/redis/redis.sh | 76 +++++++++++-------- apps/emqx_auth_redis/.ci/redis/sentinel.conf | 3 + .../test/emqx_auth_redis_SUITE.erl | 9 +-- 8 files changed, 100 insertions(+), 40 deletions(-) create mode 100644 apps/emqx_auth_redis/.ci/docker-compose-sentinel.yml create mode 100644 apps/emqx_auth_redis/.ci/redis/redis-tls.conf create mode 100644 apps/emqx_auth_redis/.ci/redis/sentinel.conf diff --git a/apps/emqx_auth_redis/.ci/docker-compose-cluster-tls.yml b/apps/emqx_auth_redis/.ci/docker-compose-cluster-tls.yml index cde18759d..3b6656d8b 100644 --- a/apps/emqx_auth_redis/.ci/docker-compose-cluster-tls.yml +++ b/apps/emqx_auth_redis/.ci/docker-compose-cluster-tls.yml @@ -19,7 +19,7 @@ services: volumes: - ../test/emqx_auth_redis_SUITE_data/certs:/tls - ./redis/:/data/conf - command: bash -c "/bin/bash /data/conf/redis.sh -t && while true; do echo 1; sleep 1; done" + command: bash -c "/bin/bash /data/conf/redis.sh --node cluster --tls-enabled && while true; do echo 1; sleep 1; done" networks: app_net: # Assign a public address. Erlang container cannot find cluster nodes by network-scoped alias (redis_cluster). diff --git a/apps/emqx_auth_redis/.ci/docker-compose-cluster.yml b/apps/emqx_auth_redis/.ci/docker-compose-cluster.yml index e2d023157..1406e67b4 100644 --- a/apps/emqx_auth_redis/.ci/docker-compose-cluster.yml +++ b/apps/emqx_auth_redis/.ci/docker-compose-cluster.yml @@ -18,7 +18,7 @@ services: container_name: redis-cluster volumes: - ./redis/:/data/conf - command: bash -c "/bin/bash /data/conf/redis.sh && while true; do echo 1; sleep 1; done" + command: bash -c "/bin/bash /data/conf/redis.sh --node cluster && while true; do echo 1; sleep 1; done" networks: app_net: # Assign a public address. Erlang container cannot find cluster nodes by network-scoped alias (redis_cluster). diff --git a/apps/emqx_auth_redis/.ci/docker-compose-sentinel.yml b/apps/emqx_auth_redis/.ci/docker-compose-sentinel.yml new file mode 100644 index 000000000..a1709c9b1 --- /dev/null +++ b/apps/emqx_auth_redis/.ci/docker-compose-sentinel.yml @@ -0,0 +1,38 @@ +version: '2.4' +# network configuration is limited in version 3 +# https://github.com/docker/compose/issues/4958 + +services: + erlang: + image: erlang:22.3 + volumes: + - ../:/emqx_auth_redis + networks: + - app_net + depends_on: + - redis_cluster + tty: true + + redis_cluster: + image: redis:${REDIS_TAG} + container_name: redis-cluster + volumes: + - ./redis/:/data/conf + command: bash -c "/bin/bash /data/conf/redis.sh --node sentinel && while true; do echo 1; sleep 1; done" + networks: + app_net: + # Assign a public address. Erlang container cannot find cluster nodes by network-scoped alias (redis_cluster). + ipv4_address: 172.16.239.10 + ipv6_address: 2001:3200:3200::20 + +networks: + app_net: + driver: bridge + enable_ipv6: true + ipam: + driver: default + config: + - subnet: 172.16.239.0/24 + gateway: 172.16.239.1 + - subnet: 2001:3200:3200::/64 + gateway: 2001:3200:3200::1 \ No newline at end of file diff --git a/apps/emqx_auth_redis/.ci/redis/redis-tls.conf b/apps/emqx_auth_redis/.ci/redis/redis-tls.conf new file mode 100644 index 000000000..3ef09f315 --- /dev/null +++ b/apps/emqx_auth_redis/.ci/redis/redis-tls.conf @@ -0,0 +1,5 @@ +daemonize yes +bind 0.0.0.0 :: +tls-cert-file /tls/redis.crt +tls-key-file /tls/redis.key +tls-ca-cert-file /tls/ca.crt \ No newline at end of file diff --git a/apps/emqx_auth_redis/.ci/redis/redis.conf b/apps/emqx_auth_redis/.ci/redis/redis.conf index ceb996960..27eabdef5 100644 --- a/apps/emqx_auth_redis/.ci/redis/redis.conf +++ b/apps/emqx_auth_redis/.ci/redis/redis.conf @@ -1,3 +1,2 @@ -cluster-enabled yes -cluster-node-timeout 10000 -bind 0.0.0.0 :: \ No newline at end of file +daemonize yes +bind 0.0.0.0 :: \ No newline at end of file diff --git a/apps/emqx_auth_redis/.ci/redis/redis.sh b/apps/emqx_auth_redis/.ci/redis/redis.sh index 44da4abed..7da422c21 100755 --- a/apps/emqx_auth_redis/.ci/redis/redis.sh +++ b/apps/emqx_auth_redis/.ci/redis/redis.sh @@ -1,14 +1,26 @@ #!/bin/bash -tls=false; -while getopts t OPT +node=single +tls=false +while [[ $# -gt 0 ]] do - case $OPT in - t) tls=true - ;; - \?) exit - ;; - esac +key="$1" + +case $key in + -n|--node) + node="$2" + shift # past argument + shift # past value + ;; + -t|--tls-enabled) + tls="$2" + shift # past argument + shift # past value + ;; + *) + shift # past argument + ;; +esac done rm -f \ @@ -19,28 +31,27 @@ rm -f \ /data/conf/nodes.7001.conf \ /data/conf/nodes.7002.conf ; -if $tls ; then - redis-server /data/conf/redis.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf --daemonize yes \ - --tls-port 8000 \ - --tls-cert-file /tls/redis.crt \ - --tls-key-file /tls/redis.key \ - --tls-ca-cert-file /tls/ca.crt - redis-server /data/conf/redis.conf --port 7001 --cluster-config-file /data/conf/nodes.7001.conf --daemonize yes \ - --tls-port 8001 \ - --tls-cert-file /tls/redis.crt \ - --tls-key-file /tls/redis.key \ - --tls-ca-cert-file /tls/ca.crt - redis-server /data/conf/redis.conf --port 7002 --cluster-config-file /data/conf/nodes.7002.conf --daemonize yes \ - --tls-port 8002 \ - --tls-cert-file /tls/redis.crt \ - --tls-key-file /tls/redis.key \ - --tls-ca-cert-file /tls/ca.crt -else - redis-server /data/conf/redis.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf --daemonize yes ; - redis-server /data/conf/redis.conf --port 7001 --cluster-config-file /data/conf/nodes.7001.conf --daemonize yes ; - redis-server /data/conf/redis.conf --port 7002 --cluster-config-file /data/conf/nodes.7002.conf --daemonize yes ; +if [ ${node} = "cluster" ] ; then + if $tls ; then + redis-server /data/conf/redis-tls.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf \ + --tls-port 8000 --cluster-enabled yes ; + redis-server /data/conf/redis-tls.conf --port 7001 --cluster-config-file /data/conf/nodes.7001.conf \ + --tls-port 8001 --cluster-enabled yes; + redis-server /data/conf/redis-tls.conf --port 7002 --cluster-config-file /data/conf/nodes.7002.conf \ + --tls-port 8002 --cluster-enabled yes; + else + redis-server /data/conf/redis.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf --cluster-enabled yes; + redis-server /data/conf/redis.conf --port 7001 --cluster-config-file /data/conf/nodes.7001.conf --cluster-enabled yes; + redis-server /data/conf/redis.conf --port 7002 --cluster-config-file /data/conf/nodes.7002.conf --cluster-enabled yes; + fi +elif [ ${node} = "sentinel" ] ; then + redis-server /data/conf/redis.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf \ + --cluster-enabled no; + redis-server /data/conf/redis.conf --port 7001 --cluster-config-file /data/conf/nodes.7001.conf \ + --cluster-enabled no --slaveof 172.16.239.10 7000; + redis-server /data/conf/redis.conf --port 7002 --cluster-config-file /data/conf/nodes.7002.conf \ + --cluster-enabled no --slaveof 172.16.239.10 7000; fi - REDIS_LOAD_FLG=true; while $REDIS_LOAD_FLG; @@ -64,7 +75,12 @@ do else continue; fi - yes "yes" | redis-cli --cluster create 172.16.239.10:7000 172.16.239.10:7001 172.16.239.10:7002; + if [ ${node} = "cluster" ] ; then + yes "yes" | redis-cli --cluster create 172.16.239.10:7000 172.16.239.10:7001 172.16.239.10:7002; + elif [ ${node} = "sentinel" ] ; then + cp /data/conf/sentinel.conf /_sentinel.conf + redis-server /_sentinel.conf --sentinel; + fi REDIS_LOAD_FLG=false; done diff --git a/apps/emqx_auth_redis/.ci/redis/sentinel.conf b/apps/emqx_auth_redis/.ci/redis/sentinel.conf new file mode 100644 index 000000000..c3f96c1ff --- /dev/null +++ b/apps/emqx_auth_redis/.ci/redis/sentinel.conf @@ -0,0 +1,3 @@ +port 26379 +dir /tmp +sentinel monitor mymaster 172.16.239.10 7000 1 diff --git a/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE.erl b/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE.erl index 3a9489705..b2fac9be8 100644 --- a/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE.erl +++ b/apps/emqx_auth_redis/test/emqx_auth_redis_SUITE.erl @@ -16,7 +16,6 @@ -module(emqx_auth_redis_SUITE). --compile(nowarn_export_all). -compile(export_all). -include_lib("emqx/include/emqx.hrl"). @@ -183,9 +182,9 @@ reload(Config) when is_list(Config) -> q(Cmd) -> {ok, Server} = application:get_env(?APP, server), case proplists:get_value(type, Server) of - single -> - {ok, Connection} = ?POOL(?APP), - eredis:q(Connection, Cmd); cluster -> - eredis_cluster:q(emqx_auth_redis, Cmd) + eredis_cluster:q(emqx_auth_redis, Cmd); + _ -> + {ok, Connection} = ?POOL(?APP), + eredis:q(Connection, Cmd) end. \ No newline at end of file