/
refresh_test.rb
executable file
·142 lines (108 loc) · 4.26 KB
/
refresh_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
require 'test_helper'
require 'benchmark'
class ReplicaSetRefreshTest < Test::Unit::TestCase
def setup
ensure_cluster(:rs)
end
def test_connect_and_manual_refresh_with_secondaries_down
@rs.secondaries.each{|s| s.stop}
client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :refresh_mode => false)
assert_equal Set.new, client.secondaries
assert client.connected?
assert_equal client.read_pool, client.primary_pool
# Refresh with no change to set
client.refresh
assert_equal Set.new, client.secondaries
assert client.connected?
assert_equal client.read_pool, client.primary_pool
# Test no changes after restart until manual refresh
@rs.restart
assert_equal Set.new, client.secondaries
assert client.connected?
assert_equal client.read_pool, client.primary_pool
# Refresh and ensure state
client.refresh
assert_equal client.read_pool, client.primary_pool
assert_equal 2, client.secondaries.length
end
def test_automated_refresh_with_secondaries_down
@rs.secondaries.each{|s| s.stop}
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
:refresh_interval => 1, :refresh_mode => :sync, :read => :secondary_preferred)
# Ensure secondaries not available and read from primary
assert_equal Set.new, client.secondaries
assert client.connected?
assert client.manager.pools.member?(client.manager.read_pool)
old_refresh_version = client.refresh_version
# Restart nodes and ensure refresh interval has passed
@rs.restart
sleep(2)
assert client.refresh_version == old_refresh_version,
"Refresh version has changed."
# Trigger synchronous refresh
client['foo']['bar'].find_one
assert client.refresh_version > old_refresh_version,
"Refresh version hasn't changed."
assert client.secondaries.length == 2,
"No secondaries have been added."
assert client.manager.read_pool != client.manager.primary,
"Read pool and primary pool are identical."
end
def test_automated_refresh_when_secondary_goes_down
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
:refresh_interval => 1, :refresh_mode => :sync)
num_secondaries = client.secondary_pools.length
old_refresh_version = client.refresh_version
@rs.kill_secondary
sleep(1)
assert client.refresh_version == old_refresh_version,
"Refresh version has changed."
client['foo']['bar'].find_one
assert client.refresh_version > old_refresh_version,
"Refresh version hasn't changed."
assert_equal num_secondaries - 1, client.secondaries.length
assert_equal num_secondaries - 1, client.secondary_pools.length
@rs.start
sleep(2)
client['foo']['bar'].find_one
assert_equal num_secondaries, client.secondaries.length
assert_equal num_secondaries, client.secondary_pools.length
end
=begin
def test_automated_refresh_with_removed_node
client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
:refresh_interval => 1, :refresh_mode => :sync)
num_secondaries = client.secondary_pools.length
old_refresh_version = client.refresh_version
n = @rs.repl_set_remove_node(2)
sleep(2)
rescue_connection_failure do
client['foo']['bar'].find_one
end
assert client.refresh_version > old_refresh_version,
"Refresh version hasn't changed."
assert_equal num_secondaries - 1, client.secondaries.length
assert_equal num_secondaries - 1, client.secondary_pools.length
#@rs.add_node(n)
end
def test_adding_and_removing_nodes
client = MongoReplicaSetClient.new(build_seeds(3),
:refresh_interval => 2, :refresh_mode => :sync)
@rs.add_node
sleep(4)
client['foo']['bar'].find_one
@conn2 = MongoReplicaSetClient.new(build_seeds(3),
:refresh_interval => 2, :refresh_mode => :sync)
assert @conn2.secondaries.sort == client.secondaries.sort,
"Second connection secondaries not equal to first."
assert_equal 3, client.secondary_pools.length
assert_equal 3, client.secondaries.length
config = client['admin'].command({:ismaster => 1})
@rs.remove_secondary_node
sleep(4)
config = client['admin'].command({:ismaster => 1})
assert_equal 2, client.secondary_pools.length
assert_equal 2, client.secondaries.length
end
=end
end