File tree Expand file tree Collapse file tree 4 files changed +113
-1
lines changed Expand file tree Collapse file tree 4 files changed +113
-1
lines changed Original file line number Diff line number Diff line change @@ -181,7 +181,7 @@ def scan!
181
181
#
182
182
# @since 2.0.0
183
183
def servers
184
- topology . servers ( @servers )
184
+ topology . servers ( @servers . compact ) . compact
185
185
end
186
186
187
187
# Create a cluster for the provided client, for use when we don't want the
Original file line number Diff line number Diff line change @@ -106,6 +106,7 @@ def replica_set_name; nil; end
106
106
#
107
107
# @since 2.0.0
108
108
def servers ( servers )
109
+ [ ]
109
110
end
110
111
111
112
# An unknown topology is not sharded.
Original file line number Diff line number Diff line change 149
149
end
150
150
end
151
151
end
152
+
153
+ context 'when the cluster has no servers' do
154
+
155
+ let ( :cluster ) do
156
+ described_class . new ( ADDRESSES )
157
+ end
158
+
159
+ let ( :servers ) do
160
+ [ nil , nil ]
161
+ end
162
+
163
+ before do
164
+ cluster . instance_variable_set ( :@servers , servers )
165
+ cluster . instance_variable_set ( :@topology , topology )
166
+ end
167
+
168
+ context 'when topology is Single' do
169
+
170
+ let ( :topology ) do
171
+ Mongo ::Cluster ::Topology ::Single . new ( { } )
172
+ end
173
+
174
+ it 'returns an empty array' do
175
+ expect ( cluster . servers ) . to eq ( [ ] )
176
+ end
177
+ end
178
+
179
+ context 'when topology is ReplicaSet' do
180
+
181
+ let ( :topology ) do
182
+ Mongo ::Cluster ::Topology ::ReplicaSet . new ( { } )
183
+ end
184
+
185
+ it 'returns an empty array' do
186
+ expect ( cluster . servers ) . to eq ( [ ] )
187
+ end
188
+ end
189
+
190
+ context 'when topology is Sharded' do
191
+
192
+ let ( :topology ) do
193
+ Mongo ::Cluster ::Topology ::Sharded . new ( { } )
194
+ end
195
+
196
+ it 'returns an empty array' do
197
+ expect ( cluster . servers ) . to eq ( [ ] )
198
+ end
199
+ end
200
+
201
+ context 'when topology is Unknown' do
202
+
203
+ let ( :topology ) do
204
+ Mongo ::Cluster ::Topology ::Unknown . new ( { } )
205
+ end
206
+
207
+ it 'returns an empty array' do
208
+ expect ( cluster . servers ) . to eq ( [ ] )
209
+ end
210
+ end
211
+ end
152
212
end
153
213
end
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 empty' do
105
+
106
+ let ( :servers ) { [ ] }
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