From f0d56651fbc04903fb7bf5a364e2eef7d3fb558c Mon Sep 17 00:00:00 2001 From: Jeffrey 'Alex' Clark Date: Tue, 14 Jul 2026 12:40:13 -0400 Subject: [PATCH 1/3] PYTHON-5727 Add test for uri_parser __main__ block --- test/test_uri_parser.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/test_uri_parser.py b/test/test_uri_parser.py index 4fe5cb7a0f..3fdc0f9779 100644 --- a/test/test_uri_parser.py +++ b/test/test_uri_parser.py @@ -17,6 +17,7 @@ from __future__ import annotations import copy +import subprocess import sys import warnings from typing import Any @@ -695,5 +696,30 @@ def test_validate_uri_srv_structure(self): ) +class TestMainBlock(unittest.TestCase): + def test_valid_uri_prints_parsed_dict(self): + # Run uri_parser.py as a script; a valid URI is pretty-printed. + result = subprocess.run( + [sys.executable, "-m", "pymongo.uri_parser", "mongodb://localhost:27017/mydb"], + capture_output=True, + text=True, + timeout=15, + ) + self.assertEqual(0, result.returncode) + self.assertIn("localhost", result.stdout) + self.assertIn("mydb", result.stdout) + + def test_invalid_uri_prints_error(self): + # An invalid URI is caught and its message printed, still exiting 0. + result = subprocess.run( + [sys.executable, "-m", "pymongo.uri_parser", "not-a-valid-uri"], + capture_output=True, + text=True, + timeout=15, + ) + self.assertEqual(0, result.returncode) + self.assertIn("Invalid URI scheme", result.stdout) + + if __name__ == "__main__": unittest.main() From 92f43310f7b00666c5ee6e28d53a7141dd2127de Mon Sep 17 00:00:00 2001 From: Jeffrey 'Alex' Clark Date: Wed, 22 Jul 2026 12:47:15 -0400 Subject: [PATCH 2/3] PYTHON-5727 Strengthen valid-URI assertions with assertRegex --- test/test_uri_parser.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/test_uri_parser.py b/test/test_uri_parser.py index 3fdc0f9779..531373677c 100644 --- a/test/test_uri_parser.py +++ b/test/test_uri_parser.py @@ -706,8 +706,9 @@ def test_valid_uri_prints_parsed_dict(self): timeout=15, ) self.assertEqual(0, result.returncode) - self.assertIn("localhost", result.stdout) - self.assertIn("mydb", result.stdout) + # Assert on the pretty-printed dict structure, not bare substrings. + self.assertRegex(result.stdout, r"'database': 'mydb'") + self.assertRegex(result.stdout, r"'nodelist': \[\('localhost', 27017\)\]") def test_invalid_uri_prints_error(self): # An invalid URI is caught and its message printed, still exiting 0. From 4992f9fea96bfe396c66c679a1a1ae5ab7ece023 Mon Sep 17 00:00:00 2001 From: Jeffrey 'Alex' Clark Date: Wed, 22 Jul 2026 12:56:08 -0400 Subject: [PATCH 3/3] PYTHON-5727 Parse __main__ output as literal instead of regex-matching --- test/test_uri_parser.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/test/test_uri_parser.py b/test/test_uri_parser.py index 531373677c..c16d28b08f 100644 --- a/test/test_uri_parser.py +++ b/test/test_uri_parser.py @@ -16,6 +16,7 @@ from __future__ import annotations +import ast import copy import subprocess import sys @@ -706,9 +707,11 @@ def test_valid_uri_prints_parsed_dict(self): timeout=15, ) self.assertEqual(0, result.returncode) - # Assert on the pretty-printed dict structure, not bare substrings. - self.assertRegex(result.stdout, r"'database': 'mydb'") - self.assertRegex(result.stdout, r"'nodelist': \[\('localhost', 27017\)\]") + # The output is a valid Python literal; parse it and assert on values + # rather than the formatting of the pretty-printed text. + parsed = ast.literal_eval(result.stdout) + self.assertEqual("mydb", parsed["database"]) + self.assertEqual([("localhost", 27017)], parsed["nodelist"]) def test_invalid_uri_prints_error(self): # An invalid URI is caught and its message printed, still exiting 0.