Skip to content

Commit bbdc792

Browse files
committed
test(sentinel) modernised and tightened tests
1 parent 660a112 commit bbdc792

File tree

1 file changed

+54
-49
lines changed

1 file changed

+54
-49
lines changed

t/sentinel.t

Lines changed: 54 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
use Test::Nginx::Socket;
1+
use Test::Nginx::Socket 'no_plan';
22
use Cwd qw(cwd);
33

4-
plan tests => repeat_each() * (3 * blocks());
5-
64
my $pwd = cwd();
75

86
our $HttpConfig = qq{
@@ -17,7 +15,6 @@ $ENV{TEST_NGINX_RESOLVER} = '8.8.8.8';
1715
$ENV{TEST_NGINX_REDIS_PORT} ||= 6379;
1816

1917
no_long_string();
20-
2118
run_tests();
2219

2320
__DATA__
@@ -26,34 +23,27 @@ __DATA__
2623
--- http_config eval: $::HttpConfig
2724
--- config
2825
location /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
10697
location /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

Comments
 (0)