From 4db1210fb7cb9db306812aa8d99114b58e17676d Mon Sep 17 00:00:00 2001 From: Yakiv Huryk Date: Fri, 6 Feb 2026 17:59:59 +0200 Subject: [PATCH] [multi-asic] fix utilities_common Db helper Currently, using utilities_common.Db() in multi-asic gives an error: RuntimeError: :- validateNamespace: Initialize global DB config using API SonicDBConfig::initializeGlobalConfig This commit adds a proper DB config initialization Signed-off-by: Yakiv Huryk --- tests/test_db.py | 31 +++++++++++++++++++++++++++++++ utilities_common/db.py | 4 +++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 tests/test_db.py diff --git a/tests/test_db.py b/tests/test_db.py new file mode 100644 index 0000000000..ab95aca9ca --- /dev/null +++ b/tests/test_db.py @@ -0,0 +1,31 @@ +"""Unit tests for utilities_common.db.Db class""" +from unittest import mock + +from .mock_tables import dbconnector +from utilities_common.db import Db + + +class TestUtilitiesDb(object): + @classmethod + def setup_class(cls): + dbconnector.load_database_config() + + @mock.patch('utilities_common.db.multi_asic_ns_choices', return_value=[]) + @mock.patch('utilities_common.db.SonicDBConfig') + @mock.patch('utilities_common.db.multi_asic') + def test_utilities_db_init_multi_asic(self, mock_multi_asic, mock_sonic_db_config, mock_ns_choices): + mock_multi_asic.is_multi_asic.return_value = True + mock_sonic_db_config.isGlobalInit.return_value = False + Db() + mock_multi_asic.is_multi_asic.assert_called() + mock_sonic_db_config.isGlobalInit.assert_called() + mock_sonic_db_config.initializeGlobalConfig.assert_called_once() + + @mock.patch('utilities_common.db.SonicDBConfig') + @mock.patch('utilities_common.db.multi_asic') + def test_utilities_db_init_single_asic(self, mock_multi_asic, mock_sonic_db_config): + mock_multi_asic.is_multi_asic.return_value = False + Db() + mock_multi_asic.is_multi_asic.assert_called() + mock_sonic_db_config.isGlobalInit.assert_not_called() + mock_sonic_db_config.initializeGlobalConfig.assert_not_called() diff --git a/utilities_common/db.py b/utilities_common/db.py index 091a821ff1..e7857558e0 100644 --- a/utilities_common/db.py +++ b/utilities_common/db.py @@ -1,5 +1,5 @@ from sonic_py_common import multi_asic, device_info -from swsscommon.swsscommon import ConfigDBConnector, ConfigDBPipeConnector, SonicV2Connector +from swsscommon.swsscommon import ConfigDBConnector, ConfigDBPipeConnector, SonicV2Connector, SonicDBConfig from utilities_common import constants from utilities_common.multi_asic import multi_asic_ns_choices @@ -30,6 +30,8 @@ def __init__(self): self.db_clients[constants.DEFAULT_NAMESPACE] = self.db if multi_asic.is_multi_asic(): + if not SonicDBConfig.isGlobalInit(): + SonicDBConfig.initializeGlobalConfig() self.ns_list = multi_asic_ns_choices() for ns in self.ns_list: self.cfgdb_clients[ns] = (