File tree Expand file tree Collapse file tree 2 files changed +53
-2
lines changed
lib/mongo/server_selector Expand file tree Collapse file tree 2 files changed +53
-2
lines changed Original file line number Diff line number Diff line change @@ -89,9 +89,9 @@ def select_server(cluster)
89
89
if cluster . single?
90
90
servers = cluster . servers
91
91
elsif cluster . sharded?
92
- servers = near_servers ( cluster . servers )
92
+ servers = near_servers ( cluster . servers ) if cluster . servers
93
93
else
94
- servers = select ( cluster . servers )
94
+ servers = select ( cluster . servers ) if cluster . servers
95
95
end
96
96
return servers . first if servers && !servers . compact . empty?
97
97
cluster . scan!
Original file line number Diff line number Diff line change 98
98
end
99
99
end
100
100
end
101
+
102
+ shared_context 'a ServerSelector' do
103
+
104
+ context 'when cluster#servers is nil' do
105
+
106
+ let ( :servers ) { nil }
107
+
108
+ let ( :cluster ) do
109
+ double ( 'cluster' ) . tap do |c |
110
+ allow ( c ) . to receive ( :servers ) . and_return ( servers )
111
+ allow ( c ) . to receive ( :single? ) . and_return ( single )
112
+ allow ( c ) . to receive ( :sharded? ) . and_return ( sharded )
113
+ allow ( c ) . to receive ( :scan! ) . and_return ( true )
114
+ end
115
+ end
116
+
117
+ let ( :read_pref ) do
118
+ described_class . get ( { mode : :primary } , server_selection_timeout : 1 )
119
+ end
120
+
121
+ it 'raises a NoServerAvailable error' do
122
+ expect do
123
+ read_pref . select_server ( cluster )
124
+ end . to raise_exception ( Mongo ::ServerSelector ::NoServerAvailable )
125
+ end
126
+ end
127
+ end
128
+
129
+ context 'when the cluster has a Single topology' do
130
+
131
+ let ( :single ) { true }
132
+ let ( :sharded ) { false }
133
+
134
+ it_behaves_like 'a ServerSelector'
135
+ end
136
+
137
+ context 'when the cluster has a ReplicaSet topology' do
138
+
139
+ let ( :single ) { false }
140
+ let ( :sharded ) { false }
141
+
142
+ it_behaves_like 'a ServerSelector'
143
+ end
144
+
145
+ context 'when the cluster has a Sharded topology' do
146
+
147
+ let ( :single ) { false }
148
+ let ( :sharded ) { true }
149
+
150
+ it_behaves_like 'a ServerSelector'
151
+ end
101
152
end
You can’t perform that action at this time.
0 commit comments