From 6ef20c11648331d398bc4f114121b22f5faf6d15 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Fri, 11 Jul 2025 02:25:22 +0900 Subject: [PATCH] mongodb: Ignore suffix in server version Make sure the logic accepts additional suffix string such as 1.2.3-4.5, which is exposed by some distributions of mongodb. Closes-Bug: #1709607 Change-Id: I23c101fddce514ca840d80cef9c035a7ce3c9808 Signed-off-by: Takashi Kajinami --- zaqar/storage/mongodb/driver.py | 3 +- zaqar/tests/unit/storage/test_impl_mongodb.py | 32 +++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/zaqar/storage/mongodb/driver.py b/zaqar/storage/mongodb/driver.py index bb89ac08b..97715d005 100644 --- a/zaqar/storage/mongodb/driver.py +++ b/zaqar/storage/mongodb/driver.py @@ -86,7 +86,8 @@ class DataDriver(storage.DataDriverBase): conn = self.connection server_info = conn.server_info()['version'] - self.server_version = tuple(map(int, server_info.split('.'))) + version_str = server_info.split('-')[0] + self.server_version = tuple(map(int, version_str.split('.'))) if self.server_version < (2, 2): raise RuntimeError(_('The mongodb driver requires mongodb>=2.2, ' diff --git a/zaqar/tests/unit/storage/test_impl_mongodb.py b/zaqar/tests/unit/storage/test_impl_mongodb.py index c3e2a943e..70781ed52 100644 --- a/zaqar/tests/unit/storage/test_impl_mongodb.py +++ b/zaqar/tests/unit/storage/test_impl_mongodb.py @@ -172,17 +172,37 @@ class MongodbDriverTest(MongodbSetupMixin, testing.TestBase): with mock.patch('pymongo.MongoClient.server_info') as info: info.return_value = {'version': '2.1'} + self.assertRaises(RuntimeError, mongodb.DataDriver, + self.conf, cache, + mongodb.ControlDriver(self.conf, cache)) + info.return_value = {'version': '2.1.0'} + self.assertRaises(RuntimeError, mongodb.DataDriver, + self.conf, cache, + mongodb.ControlDriver(self.conf, cache)) + info.return_value = {'version': '2.1.0-1.0'} self.assertRaises(RuntimeError, mongodb.DataDriver, self.conf, cache, mongodb.ControlDriver(self.conf, cache)) - info.return_value = {'version': '2.11'} + info.return_value = {'version': '2.2'} + mongodb.DataDriver(self.conf, cache, + mongodb.ControlDriver(self.conf, cache)) + info.return_value = {'version': '2.2.0'} + mongodb.DataDriver(self.conf, cache, + mongodb.ControlDriver(self.conf, cache)) + info.return_value = {'version': '2.2.0-1.0'} + mongodb.DataDriver(self.conf, cache, + mongodb.ControlDriver(self.conf, cache)) - try: - mongodb.DataDriver(self.conf, cache, - mongodb.ControlDriver(self.conf, cache)) - except RuntimeError: - self.fail('version match failed') + info.return_value = {'version': '2.10'} + mongodb.DataDriver(self.conf, cache, + mongodb.ControlDriver(self.conf, cache)) + info.return_value = {'version': '2.10.0'} + mongodb.DataDriver(self.conf, cache, + mongodb.ControlDriver(self.conf, cache)) + info.return_value = {'version': '2.10.0-1.0'} + mongodb.DataDriver(self.conf, cache, + mongodb.ControlDriver(self.conf, cache)) def test_replicaset_or_mongos_needed(self): cache = oslo_cache.get_cache(self.conf)