@@ -341,76 +341,56 @@ async def test_read_preference(self):
341
341
)
342
342
self .assertEqual (c .read_preference , ReadPreference .NEAREST )
343
343
344
- async def test_metadata (self ):
344
+
345
+ def _test_metadata (self , add_meta , * args , ** kwargs ):
345
346
metadata = copy .deepcopy (_METADATA )
346
- metadata ["driver" ]["name" ] = "PyMongo|async"
347
- metadata ["application" ] = {"name" : "foobar" }
348
- client = self .simple_client ("mongodb://foo:27017/?appname=foobar&connect=false" )
349
- options = client .options
350
- self .assertEqual (options .pool_options .metadata , metadata )
351
- client = self .simple_client ("foo" , 27017 , appname = "foobar" , connect = False )
347
+ metadata ["driver" ]["name" ] = "PyMongo"
348
+ metadata .update (add_meta )
349
+ client = self .simple_client (* args , ** kwargs )
352
350
options = client .options
353
- self .assertEqual (options .pool_options .metadata , metadata )
351
+ self .assertIn (metadata ["driver" ]["name" ], options .pool_options .metadata ["driver" ]["name" ])
352
+ if "application" in metadata .keys ():
353
+ self .assertEqual (metadata ["application" ]["name" ], options .pool_options .metadata ["application" ]["name" ])
354
+
355
+ self .assertLessEqual (
356
+ len (bson .encode (options .pool_options .metadata )),
357
+ _MAX_METADATA_SIZE ,
358
+ )
359
+
360
+ async def test_metadata (self ):
361
+ self ._test_metadata ({"driver" : {"name" : "async" }, "application" : {"name" : "foobar" }}, "mongodb://foo:27017/?appname=foobar&connect=false" )
362
+ self ._test_metadata ({"driver" : {"name" : "async" }}, "foo" , 27017 , appname = "foobar" , connect = False )
363
+
354
364
# No error
355
- self .simple_client (appname = "x" * 128 )
365
+ self ._test_metadata ({}, appname = "x" * 128 )
366
+
356
367
with self .assertRaises (ValueError ):
357
- self .simple_client (appname = "x" * 129 )
368
+ self ._test_metadata ({}, appname = "x" * 129 )
369
+
358
370
# Bad "driver" options.
359
371
self .assertRaises (TypeError , DriverInfo , "Foo" , 1 , "a" )
360
372
self .assertRaises (TypeError , DriverInfo , version = "1" , platform = "a" )
361
373
self .assertRaises (TypeError , DriverInfo )
374
+
362
375
with self .assertRaises (TypeError ):
363
- self .simple_client ( driver = 1 )
376
+ self ._test_metadata ({}, driver = 1 )
364
377
with self .assertRaises (TypeError ):
365
- self .simple_client ( driver = "abc" )
378
+ self ._test_metadata ({}, driver = "abc" )
366
379
with self .assertRaises (TypeError ):
367
- self .simple_client (driver = ("Foo" , "1" , "a" ))
380
+ self ._test_metadata ({}, driver = ("Foo" , "1" , "a" ))
381
+
368
382
# Test appending to driver info.
369
- metadata ["driver" ]["name" ] = "PyMongo|c|async|FooDriver"
370
- metadata ["driver" ]["version" ] = "{}|1.2.3" .format (_METADATA ["driver" ]["version" ])
371
- client = self .simple_client (
372
- "foo" ,
373
- 27017 ,
374
- appname = "foobar" ,
375
- driver = DriverInfo ("FooDriver" , "1.2.3" , None ),
376
- connect = False ,
377
- )
378
- options = client .options
379
- self .assertEqual (options .pool_options .metadata , metadata )
380
- metadata ["platform" ] = "{}|FooPlatform" .format (_METADATA ["platform" ])
381
- client = self .simple_client (
382
- "foo" ,
383
- 27017 ,
384
- appname = "foobar" ,
385
- driver = DriverInfo ("FooDriver" , "1.2.3" , "FooPlatform" ),
386
- connect = False ,
387
- )
388
- options = client .options
389
- self .assertEqual (options .pool_options .metadata , metadata )
383
+ self ._test_metadata ({"driver" : {"name" : "FooDriver" , "version" : "{}|1.2.3" .format (_METADATA ["driver" ]["version" ])}}, "foo" , 27017 , appname = "foobar" , driver = DriverInfo ("FooDriver" , "1.2.3" , None ), connect = False )
384
+ self ._test_metadata ({"platform" : "{}|FooPlatform" .format (_METADATA ["platform" ])}, "foo" , 27017 , appname = "foobar" , driver = DriverInfo ("FooDriver" , "1.2.3" , "FooPlatform" ), connect = False )
385
+
390
386
# Test truncating driver info metadata.
391
- client = self .simple_client (
392
- driver = DriverInfo (name = "s" * _MAX_METADATA_SIZE ),
393
- connect = False ,
394
- )
395
- options = client .options
396
- self .assertLessEqual (
397
- len (bson .encode (options .pool_options .metadata )),
398
- _MAX_METADATA_SIZE ,
399
- )
400
- client = self .simple_client (
401
- driver = DriverInfo (name = "s" * _MAX_METADATA_SIZE , version = "s" * _MAX_METADATA_SIZE ),
402
- connect = False ,
403
- )
404
- options = client .options
405
- self .assertLessEqual (
406
- len (bson .encode (options .pool_options .metadata )),
407
- _MAX_METADATA_SIZE ,
408
- )
387
+ self ._test_metadata ({}, driver = DriverInfo (name = "s" * _MAX_METADATA_SIZE ), connect = False )
388
+ self ._test_metadata ({}, driver = DriverInfo (name = "s" * _MAX_METADATA_SIZE , version = "s" * _MAX_METADATA_SIZE ), connect = False )
409
389
410
390
@mock .patch .dict ("os.environ" , {ENV_VAR_K8S : "1" })
411
391
def test_container_metadata (self ):
412
392
metadata = copy .deepcopy (_METADATA )
413
- metadata ["driver" ]["name" ] = "PyMongo|c| async"
393
+ metadata ["driver" ]["name" ] = "PyMongo|async"
414
394
metadata ["env" ] = {}
415
395
metadata ["env" ]["container" ] = {"orchestrator" : "kubernetes" }
416
396
client = self .simple_client ("mongodb://foo:27017/?appname=foobar&connect=false" )
@@ -1927,7 +1907,7 @@ def test_sigstop_sigcont(self):
1927
1907
async def _test_handshake (self , env_vars , expected_env ):
1928
1908
with patch .dict ("os.environ" , env_vars ):
1929
1909
metadata = copy .deepcopy (_METADATA )
1930
- metadata ["driver" ]["name" ] = "PyMongo|c|async "
1910
+ metadata ["driver" ]["name" ] = "PyMongo"
1931
1911
if expected_env is not None :
1932
1912
metadata ["env" ] = expected_env
1933
1913
@@ -1936,7 +1916,21 @@ async def _test_handshake(self, env_vars, expected_env):
1936
1916
client = await self .async_rs_or_single_client (serverSelectionTimeoutMS = 10000 )
1937
1917
await client .admin .command ("ping" )
1938
1918
options = client .options
1939
- self .assertEqual (options .pool_options .metadata , metadata )
1919
+ self .assertIn (metadata ["driver" ]["name" ], options .pool_options .metadata ["driver" ]["name" ])
1920
+ self .assertEqual (metadata ["driver" ]["version" ], options .pool_options .metadata ["driver" ]["version" ])
1921
+ self .assertEqual (metadata ["os" ]["type" ], options .pool_options .metadata ["os" ]["type" ])
1922
+ self .assertEqual (metadata ["os" ]["name" ], options .pool_options .metadata ["os" ]["name" ])
1923
+ self .assertEqual (metadata ["os" ]["architecture" ], options .pool_options .metadata ["os" ]["architecture" ])
1924
+ self .assertEqual (metadata ["os" ]["version" ], options .pool_options .metadata ["os" ]["version" ])
1925
+ self .assertEqual (metadata ["platform" ], options .pool_options .metadata ["platform" ])
1926
+ if "env" in options .pool_options .metadata .keys ():
1927
+ self .assertEqual (metadata ["env" ]["name" ], options .pool_options .metadata ["env" ]["name" ])
1928
+ if "region" in options .pool_options .metadata ["env" ].keys ():
1929
+ self .assertEqual (metadata ["env" ]["region" ], options .pool_options .metadata ["env" ]["region" ])
1930
+ if "memory_mb" in options .pool_options .metadata ["env" ].keys ():
1931
+ self .assertEqual (metadata ["env" ]["memory_mb" ], options .pool_options .metadata ["env" ]["memory_mb" ])
1932
+ if "timeout_sec" in options .pool_options .metadata ["env" ].keys ():
1933
+ self .assertEqual (metadata ["env" ]["timeout_sec" ], options .pool_options .metadata ["env" ]["timeout_sec" ])
1940
1934
1941
1935
async def test_handshake_01_aws (self ):
1942
1936
await self ._test_handshake (
0 commit comments