Skip to content

Commit cbb31f0

Browse files
authored
[multi-asic] fix utilities_common Db helper (#4273)
- What I did This is to fix the utilities_common.Db() helper class. Using it now in the multi-asic environment leads to an error: RuntimeError: :- validateNamespace: Initialize global DB config using API SonicDBConfig::initializeGlobalConfig This impacts the counterpoll switch CLI command. - How I did it Added a proper DB config initialization - How to verify it Manual test for the Db() helper Running counterpoll switch disable in multi-asic environment Signed-off-by: Yakiv Huryk <yhuryk@nvidia.com>
1 parent f65ddfa commit cbb31f0

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

tests/test_db.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"""Unit tests for utilities_common.db.Db class"""
2+
from unittest import mock
3+
4+
from .mock_tables import dbconnector
5+
from utilities_common.db import Db
6+
7+
8+
class TestUtilitiesDb(object):
9+
@classmethod
10+
def setup_class(cls):
11+
dbconnector.load_database_config()
12+
13+
@mock.patch('utilities_common.db.multi_asic_ns_choices', return_value=[])
14+
@mock.patch('utilities_common.db.SonicDBConfig')
15+
@mock.patch('utilities_common.db.multi_asic')
16+
def test_utilities_db_init_multi_asic(self, mock_multi_asic, mock_sonic_db_config, mock_ns_choices):
17+
mock_multi_asic.is_multi_asic.return_value = True
18+
mock_sonic_db_config.isGlobalInit.return_value = False
19+
Db()
20+
mock_multi_asic.is_multi_asic.assert_called()
21+
mock_sonic_db_config.isGlobalInit.assert_called()
22+
mock_sonic_db_config.initializeGlobalConfig.assert_called_once()
23+
24+
@mock.patch('utilities_common.db.SonicDBConfig')
25+
@mock.patch('utilities_common.db.multi_asic')
26+
def test_utilities_db_init_single_asic(self, mock_multi_asic, mock_sonic_db_config):
27+
mock_multi_asic.is_multi_asic.return_value = False
28+
Db()
29+
mock_multi_asic.is_multi_asic.assert_called()
30+
mock_sonic_db_config.isGlobalInit.assert_not_called()
31+
mock_sonic_db_config.initializeGlobalConfig.assert_not_called()

utilities_common/db.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from sonic_py_common import multi_asic, device_info
2-
from swsscommon.swsscommon import ConfigDBConnector, ConfigDBPipeConnector, SonicV2Connector
2+
from swsscommon.swsscommon import ConfigDBConnector, ConfigDBPipeConnector, SonicV2Connector, SonicDBConfig
33
from utilities_common import constants
44
from utilities_common.multi_asic import multi_asic_ns_choices
55

@@ -30,6 +30,8 @@ def __init__(self):
3030
self.db_clients[constants.DEFAULT_NAMESPACE] = self.db
3131

3232
if multi_asic.is_multi_asic():
33+
if not SonicDBConfig.isGlobalInit():
34+
SonicDBConfig.initializeGlobalConfig()
3335
self.ns_list = multi_asic_ns_choices()
3436
for ns in self.ns_list:
3537
self.cfgdb_clients[ns] = (

0 commit comments

Comments
 (0)