Skip to content

Commit 35c7f49

Browse files
committed
PYTHON-1714 Add c extension use to client metadata
- Fix tests - async
1 parent 79cf607 commit 35c7f49

File tree

2 files changed

+52
-58
lines changed

2 files changed

+52
-58
lines changed

test/asynchronous/test_client.py

Lines changed: 49 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -341,76 +341,56 @@ async def test_read_preference(self):
341341
)
342342
self.assertEqual(c.read_preference, ReadPreference.NEAREST)
343343

344-
async def test_metadata(self):
344+
345+
def _test_metadata(self, add_meta, *args, **kwargs):
345346
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)
352350
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+
354364
# No error
355-
self.simple_client(appname="x" * 128)
365+
self._test_metadata({}, appname="x" * 128)
366+
356367
with self.assertRaises(ValueError):
357-
self.simple_client(appname="x" * 129)
368+
self._test_metadata({}, appname="x" * 129)
369+
358370
# Bad "driver" options.
359371
self.assertRaises(TypeError, DriverInfo, "Foo", 1, "a")
360372
self.assertRaises(TypeError, DriverInfo, version="1", platform="a")
361373
self.assertRaises(TypeError, DriverInfo)
374+
362375
with self.assertRaises(TypeError):
363-
self.simple_client(driver=1)
376+
self._test_metadata({}, driver=1)
364377
with self.assertRaises(TypeError):
365-
self.simple_client(driver="abc")
378+
self._test_metadata({}, driver="abc")
366379
with self.assertRaises(TypeError):
367-
self.simple_client(driver=("Foo", "1", "a"))
380+
self._test_metadata({}, driver=("Foo", "1", "a"))
381+
368382
# 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+
390386
# 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)
409389

410390
@mock.patch.dict("os.environ", {ENV_VAR_K8S: "1"})
411391
def test_container_metadata(self):
412392
metadata = copy.deepcopy(_METADATA)
413-
metadata["driver"]["name"] = "PyMongo|c|async"
393+
metadata["driver"]["name"] = "PyMongo|async"
414394
metadata["env"] = {}
415395
metadata["env"]["container"] = {"orchestrator": "kubernetes"}
416396
client = self.simple_client("mongodb://foo:27017/?appname=foobar&connect=false")
@@ -1927,7 +1907,7 @@ def test_sigstop_sigcont(self):
19271907
async def _test_handshake(self, env_vars, expected_env):
19281908
with patch.dict("os.environ", env_vars):
19291909
metadata = copy.deepcopy(_METADATA)
1930-
metadata["driver"]["name"] = "PyMongo|c|async"
1910+
metadata["driver"]["name"] = "PyMongo"
19311911
if expected_env is not None:
19321912
metadata["env"] = expected_env
19331913

@@ -1936,7 +1916,21 @@ async def _test_handshake(self, env_vars, expected_env):
19361916
client = await self.async_rs_or_single_client(serverSelectionTimeoutMS=10000)
19371917
await client.admin.command("ping")
19381918
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"])
19401934

19411935
async def test_handshake_01_aws(self):
19421936
await self._test_handshake(

test/test_client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,11 +364,11 @@ def test_metadata(self):
364364
self.assertRaises(TypeError, DriverInfo)
365365

366366
with self.assertRaises(TypeError):
367-
self.simple_client(driver=1)
367+
self._test_metadata({}, driver=1)
368368
with self.assertRaises(TypeError):
369-
self.simple_client(driver="abc")
369+
self._test_metadata({}, driver="abc")
370370
with self.assertRaises(TypeError):
371-
self.simple_client(driver=("Foo", "1", "a"))
371+
self._test_metadata({}, driver=("Foo", "1", "a"))
372372

373373
# Test appending to driver info.
374374
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)

0 commit comments

Comments
 (0)