1- use Test ::Nginx::Socket;
1+ use Test ::Nginx::Socket ' no_plan ' ;
22use Cwd qw(cwd);
33
4- plan tests => repeat_each() * (3 * blocks());
5-
64my $ pwd = cwd();
75
86our $ HttpConfig = qq {
@@ -17,7 +15,6 @@ $ENV{TEST_NGINX_RESOLVER} = '8.8.8.8';
1715$ ENV {TEST_NGINX_REDIS_PORT} ||= 6379 ;
1816
1917no_long_string();
20-
2118run_tests();
2219
2320__DATA__
@@ -26,34 +23,27 @@ __DATA__
2623-- - http_config eval: $::HttpConfig
2724-- - config
2825location / t {
29- content_by_lua_block {
30- local redis_connector = require " resty.redis.connector"
31- local rc = redis_connector. new ()
26+ content_by_lua_block {
27+ local rc = require (" resty.redis.connector" ). new ()
3228
33- local sentinel, err = rc: connect{ url = " redis://127.0.0.1:6381" }
34- if not sentinel then
35- ngx. say (" failed to connect: " , err)
36- return
37- end
29+ local sentinel, err = rc: connect{ url = " redis://127.0.0.1:6381" }
30+ assert(sentinel and not err, " sentinel should connect without errors" )
3831
39- local redis_sentinel = require " resty.redis.sentinel"
32+ local master, err = require (" resty.redis.sentinel" ). get_master(
33+ sentinel,
34+ " mymaster"
35+ )
4036
41- local master, err = redis_sentinel. get_master(sentinel, " mymaster" )
42- if not master then
43- ngx. say (err)
44- else
45- ngx. say (" host: " , master. host)
46- ngx. say (" port: " , master. port)
47- end
37+ assert(master and not err, " get_master should return the master" )
4838
49- sentinel: close()
50- }
39+ assert(master. host == " 127.0.0.1" and tonumber(master. port) == 6379 ,
40+ " host should be 127.0.0.1 and port should be 6379" )
41+
42+ sentinel: close()
43+ }
5144}
5245-- - request
53- GET / t
54- -- - response_body
55- host: 127.0 . 0. 1
56- port: 6379
46+ GET / t
5747-- - no_error_log
5848[error]
5949
@@ -100,47 +90,62 @@ location /t {
10090-- - no_error_log
10191[error]
10292
93+
10394=== TEST 3 : Get only healthy slaves
10495-- - http_config eval: $::HttpConfig
10596-- - config
10697location / t {
10798 content_by_lua_block {
108- local redis = require " resty.redis"
109- local r = redis. new ()
110- r: connect(" 127.0.0.1" , 6378 )
99+ local rc = require (" resty.redis.connector" ). new ()
100+
101+ local sentinel, err = rc: connect({ url = " redis://127.0.0.1:6381" })
102+ assert(sentinel and not err, " sentinel should connect without error" )
103+
104+ local slaves, err = require (" resty.redis.sentinel" ). get_slaves(
105+ sentinel,
106+ " mymaster"
107+ )
108+
109+ assert(slaves and not err, " slaves should be returned without error" )
110+
111+ local slaveports = { [" 6378" ] = false, [" 6380" ] = false }
112+
113+ for _,slave in ipairs(slaves) do
114+ slaveports[tostring(slave. port)] = true
115+ end
116+
117+ assert(slaveports[" 6378" ] == true and slaveports[" 6380" ] == true,
118+ " slaves should both be found" )
119+
120+ -- connect to one and remove it
121+ local r = require (" resty.redis.connector" ). new (): connect({
122+ port = 6378 ,
123+ })
111124 r: slaveof(" 127.0.0.1" , 7000 )
112125
113126 ngx. sleep (9 )
114127
115- local redis_connector = require " resty.redis.connector"
116- local rc = redis_connector. new ()
128+ local slaves, err = require (" resty.redis.sentinel" ). get_slaves(
129+ sentinel,
130+ " mymaster"
131+ )
117132
118- local sentinel, err = rc: connect{ url = " redis://127.0.0.1:6381" }
119- if not sentinel then
120- ngx. say (" failed to connect: " , err)
121- return
122- end
133+ assert(slaves and not err, " slaves should be returned without error" )
123134
124- local redis_sentinel = require " resty.redis.sentinel "
135+ local slaveports = { [ " 6378 " ] = false, [ " 6380 " ] = false }
125136
126- local slaves, err = redis_sentinel. get_slaves(sentinel, " mymaster" )
127- if not slaves then
128- ngx. say (err)
129- else
130- for _,slave in ipairs(slaves) do
131- ngx. say (" host: " , slave. host)
132- ngx. say (" port: " , slave. port)
133- end
134- end
137+ for _,slave in ipairs(slaves) do
138+ slaveports[tostring(slave. port)] = true
139+ end
140+
141+ assert(slaveports[" 6378" ] == false and slaveports[" 6380" ] == true,
142+ " only 6380 should be found" )
135143
136144 sentinel: close()
137145 }
138146}
139147-- - request
140148 GET / t
141149-- - timeout: 10
142- -- - response_body
143- host: 127.0 . 0. 1
144- port: 6380
145150-- - no_error_log
146151[error]
0 commit comments