File tree Expand file tree Collapse file tree 2 files changed +25
-2
lines changed Expand file tree Collapse file tree 2 files changed +25
-2
lines changed Original file line number Diff line number Diff line change @@ -107,7 +107,7 @@ extension TopologyDescription {
107107 readPreference: ReadPreference ,
108108 heartbeatFrequencyMS: Int
109109 ) throws -> [ ServerDescription ] {
110- try readPreference. validateMaxStalenessSeconds (
110+ try readPreference. validateForServerSelection (
111111 heartbeatFrequencyMS: heartbeatFrequencyMS,
112112 topologyType: self . type
113113 )
@@ -267,7 +267,7 @@ extension ServerDescription {
267267}
268268
269269extension ReadPreference {
270- fileprivate func validateMaxStalenessSeconds (
270+ fileprivate func validateForServerSelection (
271271 heartbeatFrequencyMS: Int ,
272272 topologyType: TopologyDescription . TopologyType
273273 ) throws {
@@ -294,6 +294,11 @@ extension ReadPreference {
294294 }
295295 }
296296 }
297+ if let tagSets = self . tagSets, tagSets. contains ( where: { !$0. isEmpty } ) && self . mode == . primary {
298+ throw MongoError . InvalidArgumentError (
299+ message: " A non-empty tag set cannot be specified when the read preference mode is primary "
300+ )
301+ }
297302 }
298303}
299304
Original file line number Diff line number Diff line change @@ -209,5 +209,23 @@ final class ServerSelectionTests: MongoSwiftTestCase {
209209 }
210210 }
211211 }
212+
213+ func testReadPreferenceValidation( ) throws {
214+ var readPreference = ReadPreference . primary
215+ readPreference. tagSets = [ [ " tag " : " set " ] ]
216+ let topology = TopologyDescription ( type: . single, servers: [ ] )
217+ expect ( try topology. findSuitableServers ( readPreference: readPreference, heartbeatFrequencyMS: 0 ) )
218+ . to ( throwError ( errorType: MongoError . InvalidArgumentError. self) )
219+
220+ readPreference. tagSets = [ [ : ] ]
221+ expect ( try topology. findSuitableServers ( readPreference: readPreference, heartbeatFrequencyMS: 0 ) )
222+ . toNot ( throwError ( ) )
223+
224+ readPreference. tagSets = nil
225+ expect ( try topology. findSuitableServers ( readPreference: readPreference, heartbeatFrequencyMS: 0 ) )
226+ . toNot ( throwError ( ) )
227+ }
228+
229+ // TODO: SWIFT-1496: Implement the remaining server selection tests
212230}
213231#endif
You can’t perform that action at this time.
0 commit comments