test(emqx_auth_redis): add test cases for sentinel

This commit is contained in:
z8674558 2020-12-15 11:06:06 +09:00 committed by JianBo He
parent fe96be108c
commit 66ebcfa301
8 changed files with 100 additions and 40 deletions

View File

@ -19,7 +19,7 @@ services:
volumes: volumes:
- ../test/emqx_auth_redis_SUITE_data/certs:/tls - ../test/emqx_auth_redis_SUITE_data/certs:/tls
- ./redis/:/data/conf - ./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: networks:
app_net: app_net:
# Assign a public address. Erlang container cannot find cluster nodes by network-scoped alias (redis_cluster). # Assign a public address. Erlang container cannot find cluster nodes by network-scoped alias (redis_cluster).

View File

@ -18,7 +18,7 @@ services:
container_name: redis-cluster container_name: redis-cluster
volumes: volumes:
- ./redis/:/data/conf - ./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: networks:
app_net: app_net:
# Assign a public address. Erlang container cannot find cluster nodes by network-scoped alias (redis_cluster). # Assign a public address. Erlang container cannot find cluster nodes by network-scoped alias (redis_cluster).

View File

@ -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

View File

@ -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

View File

@ -1,3 +1,2 @@
cluster-enabled yes daemonize yes
cluster-node-timeout 10000
bind 0.0.0.0 :: bind 0.0.0.0 ::

View File

@ -1,14 +1,26 @@
#!/bin/bash #!/bin/bash
tls=false; node=single
while getopts t OPT tls=false
while [[ $# -gt 0 ]]
do do
case $OPT in key="$1"
t) tls=true
;; case $key in
\?) exit -n|--node)
;; node="$2"
esac shift # past argument
shift # past value
;;
-t|--tls-enabled)
tls="$2"
shift # past argument
shift # past value
;;
*)
shift # past argument
;;
esac
done done
rm -f \ rm -f \
@ -19,28 +31,27 @@ rm -f \
/data/conf/nodes.7001.conf \ /data/conf/nodes.7001.conf \
/data/conf/nodes.7002.conf ; /data/conf/nodes.7002.conf ;
if $tls ; then if [ ${node} = "cluster" ] ; then
redis-server /data/conf/redis.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf --daemonize yes \ if $tls ; then
--tls-port 8000 \ redis-server /data/conf/redis-tls.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf \
--tls-cert-file /tls/redis.crt \ --tls-port 8000 --cluster-enabled yes ;
--tls-key-file /tls/redis.key \ redis-server /data/conf/redis-tls.conf --port 7001 --cluster-config-file /data/conf/nodes.7001.conf \
--tls-ca-cert-file /tls/ca.crt --tls-port 8001 --cluster-enabled yes;
redis-server /data/conf/redis.conf --port 7001 --cluster-config-file /data/conf/nodes.7001.conf --daemonize yes \ redis-server /data/conf/redis-tls.conf --port 7002 --cluster-config-file /data/conf/nodes.7002.conf \
--tls-port 8001 \ --tls-port 8002 --cluster-enabled yes;
--tls-cert-file /tls/redis.crt \ else
--tls-key-file /tls/redis.key \ redis-server /data/conf/redis.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf --cluster-enabled yes;
--tls-ca-cert-file /tls/ca.crt 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 --daemonize yes \ redis-server /data/conf/redis.conf --port 7002 --cluster-config-file /data/conf/nodes.7002.conf --cluster-enabled yes;
--tls-port 8002 \ fi
--tls-cert-file /tls/redis.crt \ elif [ ${node} = "sentinel" ] ; then
--tls-key-file /tls/redis.key \ redis-server /data/conf/redis.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf \
--tls-ca-cert-file /tls/ca.crt --cluster-enabled no;
else redis-server /data/conf/redis.conf --port 7001 --cluster-config-file /data/conf/nodes.7001.conf \
redis-server /data/conf/redis.conf --port 7000 --cluster-config-file /data/conf/nodes.7000.conf --daemonize yes ; --cluster-enabled no --slaveof 172.16.239.10 7000;
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 \
redis-server /data/conf/redis.conf --port 7002 --cluster-config-file /data/conf/nodes.7002.conf --daemonize yes ; --cluster-enabled no --slaveof 172.16.239.10 7000;
fi fi
REDIS_LOAD_FLG=true; REDIS_LOAD_FLG=true;
while $REDIS_LOAD_FLG; while $REDIS_LOAD_FLG;
@ -64,7 +75,12 @@ do
else else
continue; continue;
fi 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; REDIS_LOAD_FLG=false;
done done

View File

@ -0,0 +1,3 @@
port 26379
dir /tmp
sentinel monitor mymaster 172.16.239.10 7000 1

View File

@ -16,7 +16,6 @@
-module(emqx_auth_redis_SUITE). -module(emqx_auth_redis_SUITE).
-compile(nowarn_export_all).
-compile(export_all). -compile(export_all).
-include_lib("emqx/include/emqx.hrl"). -include_lib("emqx/include/emqx.hrl").
@ -183,9 +182,9 @@ reload(Config) when is_list(Config) ->
q(Cmd) -> q(Cmd) ->
{ok, Server} = application:get_env(?APP, server), {ok, Server} = application:get_env(?APP, server),
case proplists:get_value(type, Server) of case proplists:get_value(type, Server) of
single ->
{ok, Connection} = ?POOL(?APP),
eredis:q(Connection, Cmd);
cluster -> cluster ->
eredis_cluster:q(emqx_auth_redis, Cmd) eredis_cluster:q(emqx_auth_redis, Cmd);
_ ->
{ok, Connection} = ?POOL(?APP),
eredis:q(Connection, Cmd)
end. end.