Skip to content

Commit 9f9c9d8

Browse files
committed
update/add the new prose tests
1 parent 21c4eef commit 9f9c9d8

File tree

1 file changed

+97
-120
lines changed

1 file changed

+97
-120
lines changed

test/mockupdb/test_client_metadata.py

Lines changed: 97 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import time
1717
import unittest
1818
from test.utils_shared import CMAPListener
19-
from typing import Optional
19+
from typing import Any, Optional
2020

2121
import pytest
2222

@@ -43,32 +43,24 @@ class TestClientMetadataProse(unittest.TestCase):
4343
def setUp(self):
4444
self.server = MockupDB()
4545
# there are two handshake requests, i believe one is from the monitor, and the other is from the client
46-
self.monitor_handshake = False
4746
self.handshake_req: Optional[dict] = None
4847

4948
def respond(r):
50-
# Only save the very first request from the driver.
51-
if self.handshake_req is None:
52-
if not self.monitor_handshake:
53-
self.monitor_handshake = True
54-
else:
55-
self.handshake_req = r
49+
if "ismaster" in r:
50+
# then this is a handshake request
51+
self.handshake_req = r
5652
return r.reply(OpMsgReply(minWireVersion=0, maxWireVersion=13))
5753

5854
self.server.autoresponds(respond)
5955
self.server.run()
6056
self.addCleanup(self.server.stop)
6157

62-
def check_metadata_added(
63-
self, add_name: str, add_version: Optional[str], add_platform: Optional[str]
64-
) -> None:
65-
client = MongoClient(
66-
"mongodb://" + self.server.address_string,
67-
maxIdleTimeMS=1,
68-
driver=DriverInfo("library", "1.2", "Library Platform"),
69-
)
70-
71-
# send initial metadata
58+
def send_ping_and_get_metadata(
59+
self, client: MongoClient, is_handshake: bool
60+
) -> tuple[str, Optional[str], Optional[str], dict[str, Any]]:
61+
# reset
62+
if is_handshake:
63+
self.handshake_req: Optional[dict] = None
7264
client.admin.command("ping")
7365
metadata = _get_handshake_driver_info(self.handshake_req)
7466
driver_metadata = metadata["driver"]
@@ -77,25 +69,36 @@ def check_metadata_added(
7769
driver_metadata["version"],
7870
metadata["platform"],
7971
)
72+
return name, version, platform, metadata
73+
74+
def check_metadata_added(
75+
self,
76+
client: MongoClient,
77+
add_name: str,
78+
add_version: Optional[str],
79+
add_platform: Optional[str],
80+
) -> None:
81+
# send initial metadata
82+
name, version, platform, metadata = self.send_ping_and_get_metadata(client, True)
8083
time.sleep(0.005)
8184

82-
# add data
85+
# add new metadata
8386
client._append_metadata(DriverInfo(add_name, add_version, add_platform))
84-
# make sure new metadata is being sent
85-
self.handshake_req = None
86-
client.admin.command("ping")
87-
assert self.handshake_req is not None
88-
new_metadata = _get_handshake_driver_info(self.handshake_req)
89-
90-
self.assertEqual(
91-
new_metadata["driver"]["name"], f"{name}|{add_name}" if add_name is not None else name
87+
new_name, new_version, new_platform, new_metadata = self.send_ping_and_get_metadata(
88+
client, True
9289
)
90+
print("IN SEND PING AND GET METADATA")
91+
print(name, version, platform)
92+
print(metadata)
93+
print(new_name, new_version, new_platform)
94+
print(new_metadata)
95+
self.assertEqual(new_name, f"{name}|{add_name}" if add_name is not None else name)
9396
self.assertEqual(
94-
new_metadata["driver"]["version"],
97+
new_version,
9598
f"{version}|{add_version}" if add_version is not None else version,
9699
)
97100
self.assertEqual(
98-
new_metadata["platform"],
101+
new_platform,
99102
f"{platform}|{add_platform}" if add_platform is not None else platform,
100103
)
101104

@@ -105,126 +108,100 @@ def check_metadata_added(
105108
new_metadata.pop("platform")
106109
self.assertEqual(metadata, new_metadata)
107110

108-
client.close()
109-
110111
def test_append_metadata(self):
111-
self.check_metadata_added("framework", "2.0", "Framework Platform")
112+
client = MongoClient(
113+
"mongodb://" + self.server.address_string,
114+
maxIdleTimeMS=1,
115+
driver=DriverInfo("library", "1.2", "Library Platform"),
116+
)
117+
self.check_metadata_added(client, "framework", "2.0", "Framework Platform")
118+
client.close()
112119

113120
def test_append_metadata_platform_none(self):
114-
self.check_metadata_added("framework", "2.0", None)
121+
client = MongoClient(
122+
"mongodb://" + self.server.address_string,
123+
maxIdleTimeMS=1,
124+
driver=DriverInfo("library", "1.2", "Library Platform"),
125+
)
126+
self.check_metadata_added(client, "framework", "2.0", None)
127+
client.close()
115128

116129
def test_append_metadata_version_none(self):
117-
self.check_metadata_added("framework", None, "Framework Platform")
118-
119-
def test_append_platform_version_none(self):
120-
self.check_metadata_added("framework", None, None)
130+
client = MongoClient(
131+
"mongodb://" + self.server.address_string,
132+
maxIdleTimeMS=1,
133+
driver=DriverInfo("library", "1.2", "Library Platform"),
134+
)
135+
self.check_metadata_added(client, "framework", None, "Framework Platform")
136+
client.close()
121137

122-
def test_doesnt_update_established_connections(self):
123-
listener = CMAPListener()
138+
def test_append_metadata_platform_version_none(self):
124139
client = MongoClient(
125140
"mongodb://" + self.server.address_string,
126141
maxIdleTimeMS=1,
127142
driver=DriverInfo("library", "1.2", "Library Platform"),
128-
event_listeners=[listener],
129143
)
144+
self.check_metadata_added(client, "framework", None, None)
145+
client.close()
130146

131-
# send initial metadata
132-
client.admin.command("ping")
133-
metadata = _get_handshake_driver_info(self.handshake_req)
134-
driver_metadata = metadata["driver"]
135-
name, version, platform = (
136-
driver_metadata["name"],
137-
driver_metadata["version"],
138-
metadata["platform"],
147+
def test_multiple_successive_metadata_updates(self):
148+
client = MongoClient(
149+
"mongodb://" + self.server.address_string, maxIdleTimeMS=1, connect=False
139150
)
140-
self.assertIsNotNone(name)
141-
self.assertIsNotNone(version)
142-
self.assertIsNotNone(platform)
151+
client._append_metadata(DriverInfo("library", "1.2", "Library Platform"))
152+
self.check_metadata_added(client, "framework", "2.0", "Framework Platform")
153+
client.close()
143154

144-
# add data
145-
add_name, add_version, add_platform = "framework", "2.0", "Framework Platform"
146-
client._append_metadata(DriverInfo(add_name, add_version, add_platform))
147-
# check new data isn't sent
148-
self.handshake_req: Optional[dict] = None
149-
client.admin.command("ping")
150-
self.assertIsNotNone(self.handshake_req)
151-
assert self.handshake_req is not None # so mypy knows that it's not None
152-
self.assertNotIn("client", self.handshake_req)
153-
self.assertEqual(listener.event_count(ConnectionClosedEvent), 0)
155+
def test_multiple_successive_metadata_updates_platform_none(self):
156+
client = MongoClient(
157+
"mongodb://" + self.server.address_string,
158+
maxIdleTimeMS=1,
159+
)
160+
client._append_metadata(DriverInfo("library", "1.2", "Library Platform"))
161+
self.check_metadata_added(client, "framework", "2.0", None)
162+
client.close()
154163

164+
def test_multiple_successive_metadata_updates_version_none(self):
165+
client = MongoClient(
166+
"mongodb://" + self.server.address_string,
167+
maxIdleTimeMS=1,
168+
)
169+
client._append_metadata(DriverInfo("library", "1.2", "Library Platform"))
170+
self.check_metadata_added(client, "framework", None, "Framework Platform")
171+
client.close()
172+
173+
def test_multiple_successive_metadata_updates_platform_version_none(self):
174+
client = MongoClient(
175+
"mongodb://" + self.server.address_string,
176+
maxIdleTimeMS=1,
177+
)
178+
client._append_metadata(DriverInfo("library", "1.2", "Library Platform"))
179+
self.check_metadata_added(client, "framework", None, None)
155180
client.close()
156181

157-
def test_append_metadata_multiple_times(self):
182+
def test_doesnt_update_established_connections(self):
183+
listener = CMAPListener()
158184
client = MongoClient(
159185
"mongodb://" + self.server.address_string,
160186
maxIdleTimeMS=1,
161187
driver=DriverInfo("library", "1.2", "Library Platform"),
188+
event_listeners=[listener],
162189
)
163190

164191
# send initial metadata
165-
client.admin.command("ping")
166-
metadata = _get_handshake_driver_info(self.handshake_req)
167-
driver_metadata = metadata["driver"]
168-
name, version, platform = (
169-
driver_metadata["name"],
170-
driver_metadata["version"],
171-
metadata["platform"],
172-
)
173-
time.sleep(0.005)
192+
name, version, platform, metadata = self.send_ping_and_get_metadata(client, True)
193+
self.assertIsNotNone(name)
194+
self.assertIsNotNone(version)
195+
self.assertIsNotNone(platform)
174196

175197
# add data
176198
add_name, add_version, add_platform = "framework", "2.0", "Framework Platform"
177199
client._append_metadata(DriverInfo(add_name, add_version, add_platform))
178-
# make sure new metadata is being sent
179-
self.handshake_req = None
180-
client.admin.command("ping")
181-
assert self.handshake_req is not None
182-
new_metadata = _get_handshake_driver_info(self.handshake_req)
183-
184-
self.assertEqual(
185-
new_metadata["driver"]["name"], f"{name}|{add_name}" if add_name is not None else name
186-
)
187-
self.assertEqual(
188-
new_metadata["driver"]["version"],
189-
f"{version}|{add_version}" if add_version is not None else version,
190-
)
191-
self.assertEqual(
192-
new_metadata["platform"],
193-
f"{platform}|{add_platform}" if add_platform is not None else platform,
194-
)
195-
196-
metadata.pop("driver")
197-
metadata.pop("platform")
198-
new_metadata.pop("driver")
199-
new_metadata.pop("platform")
200-
self.assertEqual(metadata, new_metadata)
201-
time.sleep(0.005)
202-
203-
# add data again
204-
add_name2, add_version2, add_platform2 = "framework2", "3.0", "Framework Platform2"
205-
client._append_metadata(DriverInfo(add_name2, add_version2, add_platform2))
206-
# make sure new metadata is being sent
207-
self.handshake_req = None
200+
# check new data isn't sent
201+
self.handshake_req: Optional[dict] = None
208202
client.admin.command("ping")
209-
assert self.handshake_req is not None
210-
new_metadata2 = _get_handshake_driver_info(self.handshake_req)
211-
212-
self.assertEqual(
213-
new_metadata2["driver"]["name"],
214-
f"{name}|{add_name}|{add_name2}" if add_name2 is not None else name,
215-
)
216-
self.assertEqual(
217-
new_metadata2["driver"]["version"],
218-
f"{version}|{add_version}|{add_version2}" if add_version2 is not None else version,
219-
)
220-
self.assertEqual(
221-
new_metadata2["platform"],
222-
f"{platform}|{add_platform}|{add_platform2}" if add_platform2 is not None else platform,
223-
)
224-
225-
new_metadata2.pop("driver")
226-
new_metadata2.pop("platform")
227-
self.assertEqual(metadata, new_metadata2)
203+
self.assertIsNone(self.handshake_req)
204+
self.assertEqual(listener.event_count(ConnectionClosedEvent), 0)
228205

229206
client.close()
230207

0 commit comments

Comments
 (0)