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:
- ../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).

View File

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

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
cluster-node-timeout 10000
bind 0.0.0.0 ::
daemonize yes
bind 0.0.0.0 ::

View File

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

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).
-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.