|
16 | 16 |
|
17 | 17 | import datetime
|
18 | 18 | import os
|
| 19 | +import time |
19 | 20 | import sys
|
20 | 21 |
|
21 | 22 | sys.path[0:0] = [""]
|
|
26 | 27 | from pymongo.errors import ConfigurationError, ConnectionFailure
|
27 | 28 | from pymongo.ismaster import IsMaster
|
28 | 29 | from pymongo.server_description import ServerDescription
|
| 30 | +from pymongo.server_selectors import writable_server_selector |
29 | 31 | from pymongo.settings import TopologySettings
|
30 | 32 | from pymongo.topology import Topology
|
31 |
| -from test import unittest |
32 | 33 |
|
| 34 | +from test import client_context, unittest |
| 35 | +from test.utils import rs_or_single_client |
33 | 36 |
|
34 | 37 | # Location of JSON test specifications.
|
35 | 38 | _TEST_PATH = os.path.join(
|
@@ -110,7 +113,9 @@ def make_server_description(server, hosts):
|
110 | 113 | elif server_type == "Mongos":
|
111 | 114 | ismaster_response['msg'] = 'isdbgrid'
|
112 | 115 |
|
113 |
| - ismaster_response['lastWriteDate'] = make_last_write_date(server) |
| 116 | + ismaster_response['lastWrite'] = { |
| 117 | + 'lastWriteDate': make_last_write_date(server) |
| 118 | + } |
114 | 119 |
|
115 | 120 | for field in 'maxWireVersion', 'tags', 'idleWritePeriodMillis':
|
116 | 121 | if field in server:
|
@@ -235,6 +240,27 @@ def test_max_staleness(self):
|
235 | 240 | "maxStalenessSeconds=1")
|
236 | 241 | self.assertEqual(1, client.read_preference.max_staleness)
|
237 | 242 |
|
| 243 | + @client_context.require_version_min(3, 3, 6) # SERVER-8858 |
| 244 | + def test_last_write_date(self): |
| 245 | + # From max-staleness-tests.rst, "Parse lastWriteDate". |
| 246 | + client = rs_or_single_client(heartbeatFrequencyMS=500) |
| 247 | + client.pymongo_test.test.insert_one({}) |
| 248 | + time.sleep(1) |
| 249 | + server = client._topology.select_server(writable_server_selector) |
| 250 | + last_write = server.description.last_write_date |
| 251 | + self.assertTrue(last_write) |
| 252 | + client.pymongo_test.test.insert_one({}) |
| 253 | + time.sleep(1) |
| 254 | + server = client._topology.select_server(writable_server_selector) |
| 255 | + self.assertGreater(server.description.last_write_date, last_write) |
| 256 | + self.assertLess(server.description.last_write_date, last_write + 10) |
| 257 | + |
| 258 | + @client_context.require_version_max(3, 3) |
| 259 | + def test_last_write_date_absent(self): |
| 260 | + # From max-staleness-tests.rst, "Absent lastWriteDate". |
| 261 | + client = rs_or_single_client() |
| 262 | + sd = client._topology.select_server(writable_server_selector) |
| 263 | + self.assertIsNone(sd.description.last_write_date) |
238 | 264 |
|
239 | 265 | if __name__ == "__main__":
|
240 | 266 | unittest.main()
|
0 commit comments