|
18 | 18 |
|
19 | 19 | import copy |
20 | 20 | import datetime |
| 21 | +import random |
21 | 22 | import signal |
22 | 23 | import socket |
23 | 24 | import sys |
|
36 | 37 | from bson.tz_util import utc |
37 | 38 | from pymongo.mongo_client import MongoClient |
38 | 39 | from pymongo.read_preferences import ReadPreference |
39 | | -from pymongo.member import SECONDARY |
| 40 | +from pymongo.member import SECONDARY, Member |
40 | 41 | from pymongo.mongo_replica_set_client import MongoReplicaSetClient, Monitor |
41 | 42 | from pymongo.mongo_replica_set_client import _partition_node, have_gevent |
42 | 43 | from pymongo.database import Database |
@@ -1028,18 +1029,24 @@ def test_schedule_refresh(self): |
1028 | 1029 | def test_zero_latency(self): |
1029 | 1030 | orig_interval = Monitor._refresh_interval |
1030 | 1031 | Monitor._refresh_interval = 1e9 |
| 1032 | + ping_times = set() |
| 1033 | + # Generate unique ping times. |
| 1034 | + while len(ping_times) < len(self.hosts): |
| 1035 | + ping_times.add(random.random()) |
| 1036 | + for ping_time, host in zip(ping_times, self.hosts): |
| 1037 | + Member._host_to_ping_time[host] = ping_time |
1031 | 1038 | try: |
1032 | 1039 | client = self._get_client() |
1033 | 1040 | host = read_from_which_host( |
1034 | 1041 | client, ReadPreference.NEAREST, None, 0) |
1035 | | - # We'll assume all members have different latency. |
1036 | 1042 | for _ in range(5): |
1037 | 1043 | self.assertEqual( |
1038 | 1044 | host, |
1039 | 1045 | read_from_which_host( |
1040 | 1046 | client, ReadPreference.NEAREST, None, 0)) |
1041 | 1047 | finally: |
1042 | 1048 | Monitor._refresh_interval = orig_interval |
| 1049 | + Member._host_to_ping_time.clear() |
1043 | 1050 |
|
1044 | 1051 | def test_pinned_member(self): |
1045 | 1052 | latency = 1000 * 1000 |
|
0 commit comments