1
1
require 'test_helper'
2
- require 'benchmark'
3
2
4
3
class ReplicaSetRefreshTest < Test ::Unit ::TestCase
5
4
6
5
def setup
7
6
ensure_cluster ( :rs )
8
7
end
9
8
10
- def test_connect_and_manual_refresh_with_secondaries_down
9
+ def test_connect_and_manual_refresh_with_secondary_down
11
10
num_secondaries = @rs . secondaries . size
12
11
client = MongoReplicaSetClient . new ( @rs . repl_set_seeds , :refresh_mode => false )
13
12
14
13
assert_equal num_secondaries , client . secondaries . size
15
14
assert client . connected?
16
15
assert_equal client . read_pool , client . primary_pool
16
+ old_refresh_version = client . refresh_version
17
17
18
- @rs . secondaries . each { | s | s . stop }
18
+ @rs . stop_secondary
19
19
20
20
client . refresh
21
- assert client . secondaries . empty?
21
+ assert_equal num_secondaries - 1 , client . secondaries . size
22
22
assert client . connected?
23
23
assert_equal client . read_pool , client . primary_pool
24
+ assert client . refresh_version > old_refresh_version
25
+ old_refresh_version = client . refresh_version
24
26
25
27
# Test no changes after restart until manual refresh
26
28
@rs . restart
27
- assert client . secondaries . empty?
29
+ assert_equal num_secondaries - 1 , client . secondaries . size
28
30
assert client . connected?
29
31
assert_equal client . read_pool , client . primary_pool
32
+ assert_equal client . refresh_version , old_refresh_version
30
33
31
34
# Refresh and ensure state
32
35
client . refresh
33
- assert_equal client . read_pool , client . primary_pool
34
36
assert_equal num_secondaries , client . secondaries . size
37
+ assert client . connected?
38
+ assert_equal client . read_pool , client . primary_pool
39
+ assert client . refresh_version > old_refresh_version
35
40
end
36
41
37
- def test_automated_refresh_with_secondaries_down
42
+ def test_automated_refresh_with_secondary_down
38
43
num_secondaries = @rs . secondaries . size
39
44
client = MongoReplicaSetClient . new ( @rs . repl_set_seeds ,
40
45
:refresh_interval => 1 , :refresh_mode => :sync , :read => :secondary_preferred )
41
46
42
- # Ensure secondaries not available and read from primary
47
+ # Ensure secondaries are all recognized by client and client is connected
43
48
assert_equal num_secondaries , client . secondaries . size
44
49
assert client . connected?
45
50
assert client . secondary_pools . include? ( client . read_pool )
51
+ pool = client . read_pool
46
52
47
- @rs . secondaries . each { | s | s . stop }
53
+ @rs . member_by_name ( pool . host_string ) . stop
48
54
sleep ( 2 )
49
55
56
+ old_refresh_version = client . refresh_version
57
+ # Trigger synchronous refresh
50
58
client [ 'foo' ] [ 'bar' ] . find_one
51
59
52
- assert client . secondaries . empty?
53
60
assert client . connected?
54
- assert_equal client . read_pool , client . primary_pool
55
-
56
- old_refresh_version = client . refresh_version
61
+ assert client . refresh_version > old_refresh_version
62
+ assert_equal num_secondaries - 1 , client . secondaries . size
63
+ assert client . secondary_pools . include? ( client . read_pool )
64
+ assert_not_equal pool , client . read_pool
57
65
58
66
# Restart nodes and ensure refresh interval has passed
59
67
@rs . restart
60
68
sleep ( 2 )
61
69
62
- assert client . refresh_version == old_refresh_version ,
63
- "Refresh version has changed."
64
-
70
+ old_refresh_version = client . refresh_version
65
71
# Trigger synchronous refresh
66
72
client [ 'foo' ] [ 'bar' ] . find_one
67
73
74
+ assert client . connected?
68
75
assert client . refresh_version > old_refresh_version ,
69
76
"Refresh version hasn't changed."
70
77
assert_equal num_secondaries , client . secondaries . size
71
78
"No secondaries have been added."
72
- assert client . manager . read_pool != client . manager . primary ,
73
- "Read pool and primary pool are identical."
74
- end
75
-
76
- def test_automated_refresh_when_secondary_goes_down
77
- client = MongoReplicaSetClient . new ( @rs . repl_set_seeds ,
78
- :refresh_interval => 1 , :refresh_mode => :sync )
79
-
80
- num_secondaries = client . secondary_pools . size
81
- old_refresh_version = client . refresh_version
82
-
83
- @rs . stop_secondary
84
- sleep ( 2 )
85
-
86
- assert client . refresh_version == old_refresh_version ,
87
- "Refresh version has changed."
88
-
89
- client [ 'foo' ] [ 'bar' ] . find_one
90
-
91
- assert client . refresh_version > old_refresh_version ,
92
- "Refresh version hasn't changed."
93
- assert_equal num_secondaries - 1 , client . secondaries . size
94
- assert_equal num_secondaries - 1 , client . secondary_pools . size
95
-
96
- @rs . restart
97
- sleep ( 2 )
98
-
99
- client [ 'foo' ] [ 'bar' ] . find_one
100
-
101
- assert_equal num_secondaries , client . secondaries . size
102
79
assert_equal num_secondaries , client . secondary_pools . size
103
80
end
104
81
=begin
@@ -150,4 +127,4 @@ def test_adding_and_removing_nodes
150
127
assert_equal 2, client.secondaries.length
151
128
end
152
129
=end
153
- end
130
+ end
0 commit comments