(self)
| 270 | self.assertReadsFrom("secondary", read_preference=ReadPreference.SECONDARY_PREFERRED) |
| 271 | |
| 272 | def test_nearest(self): |
| 273 | # With high localThresholdMS, expect to read from any |
| 274 | # member |
| 275 | c = self.rs_client( |
| 276 | read_preference=ReadPreference.NEAREST, localThresholdMS=10000 |
| 277 | ) # 10 seconds |
| 278 | |
| 279 | data_members = {self.client.primary} | self.client.secondaries |
| 280 | |
| 281 | # This is a probabilistic test; track which members we've read from so |
| 282 | # far, and keep reading until we've used all the members or give up. |
| 283 | # Chance of using only 2 of 3 members 10k times if there's no bug = |
| 284 | # 3 * (2/3)**10000, very low. |
| 285 | used: set = set() |
| 286 | i = 0 |
| 287 | while data_members.difference(used) and i < 10000: |
| 288 | address = self.read_from_which_host(c) |
| 289 | used.add(address) |
| 290 | i += 1 |
| 291 | |
| 292 | not_used = data_members.difference(used) |
| 293 | latencies = ", ".join( |
| 294 | "%s: %sms" % (server.description.address, server.description.round_trip_time) |
| 295 | for server in (c._get_topology()).select_servers(readable_server_selector, _Op.TEST) |
| 296 | ) |
| 297 | |
| 298 | self.assertFalse( |
| 299 | not_used, |
| 300 | "Expected to use primary and all secondaries for mode NEAREST," |
| 301 | f" but didn't use {not_used}\nlatencies: {latencies}", |
| 302 | ) |
| 303 | |
| 304 | |
| 305 | class ReadPrefTester(MongoClient): |
nothing calls this directly
no test coverage detected