@@ -84,7 +84,7 @@ def check_metadata_added(
8484 # make sure new metadata is being sent
8585 self .handshake_req = None
8686 client .admin .command ("ping" )
87- # self.assertIsNotNone(self. handshake_req)
87+ assert self .handshake_req is not None
8888 new_metadata = _get_handshake_driver_info (self .handshake_req )
8989
9090 self .assertEqual (
@@ -154,6 +154,80 @@ def test_doesnt_update_established_connections(self):
154154
155155 client .close ()
156156
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+
157231
158232if __name__ == "__main__" :
159233 unittest .main ()
0 commit comments