@@ -84,7 +84,7 @@ def check_metadata_added(
84
84
# make sure new metadata is being sent
85
85
self .handshake_req = None
86
86
client .admin .command ("ping" )
87
- # self.assertIsNotNone(self. handshake_req)
87
+ assert self .handshake_req is not None
88
88
new_metadata = _get_handshake_driver_info (self .handshake_req )
89
89
90
90
self .assertEqual (
@@ -154,6 +154,80 @@ def test_doesnt_update_established_connections(self):
154
154
155
155
client .close ()
156
156
157
+ def test_append_metadata_multiple_times (self ):
158
+ client = MongoClient (
159
+ "mongodb://" + self .server .address_string ,
160
+ maxIdleTimeMS = 1 ,
161
+ driver = DriverInfo ("library" , "1.2" , "Library Platform" ),
162
+ )
163
+
164
+ # 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 )
174
+
175
+ # add data
176
+ add_name , add_version , add_platform = "framework" , "2.0" , "Framework Platform"
177
+ 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
208
+ 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 )
228
+
229
+ client .close ()
230
+
157
231
158
232
if __name__ == "__main__" :
159
233
unittest .main ()
0 commit comments