@@ -1119,3 +1119,74 @@ def teardown_class(cls):
11191119 os .environ ["UTILITIES_UNIT_TESTING" ] = "0"
11201120 os .environ ["UTILITIES_UNIT_TESTING_TOPOLOGY" ] = ""
11211121 remove_tmp_cnstat_file ()
1122+
1123+
1124+ class TestPortstatGetDbClient (object ):
1125+ """Test the get_db_client method for caching DB connections"""
1126+
1127+ def test_get_db_client_creates_new_connection (self ):
1128+ """Test that get_db_client creates a new connection when none exists"""
1129+ from unittest import mock
1130+ from utilities_common .portstat import Portstat
1131+ from utilities_common .constants import DEFAULT_NAMESPACE
1132+
1133+ portstat = Portstat (namespace = DEFAULT_NAMESPACE , display_option = '' )
1134+
1135+ with mock .patch ('sonic_py_common.multi_asic.connect_to_all_dbs_for_ns' ) as mock_connect :
1136+ mock_db_client = mock .MagicMock ()
1137+ mock_connect .return_value = mock_db_client
1138+
1139+ result = portstat .get_db_client ('asic0' )
1140+
1141+ mock_connect .assert_called_once_with ('asic0' )
1142+
1143+ assert result == mock_db_client
1144+
1145+ assert portstat .db_clients ['asic0' ] == mock_db_client
1146+
1147+ def test_get_db_client_returns_cached_connection (self ):
1148+ """Test that get_db_client returns cached connection on subsequent calls"""
1149+ from unittest import mock
1150+ from utilities_common .portstat import Portstat
1151+ from utilities_common .constants import DEFAULT_NAMESPACE
1152+
1153+ portstat = Portstat (namespace = DEFAULT_NAMESPACE , display_option = '' )
1154+
1155+ with mock .patch ('sonic_py_common.multi_asic.connect_to_all_dbs_for_ns' ) as mock_connect :
1156+ mock_db_client = mock .MagicMock ()
1157+ mock_connect .return_value = mock_db_client
1158+ result1 = portstat .get_db_client ('asic0' )
1159+ result2 = portstat .get_db_client ('asic0' )
1160+ mock_connect .assert_called_once_with ('asic0' )
1161+
1162+ assert result1 == result2
1163+ assert result1 == mock_db_client
1164+
1165+ def test_get_db_client_multiple_namespaces (self ):
1166+ """Test that get_db_client handles multiple namespaces correctly"""
1167+ from unittest import mock
1168+ from utilities_common .portstat import Portstat
1169+ from utilities_common .constants import DEFAULT_NAMESPACE
1170+
1171+ portstat = Portstat (namespace = DEFAULT_NAMESPACE , display_option = '' )
1172+
1173+ with mock .patch ('sonic_py_common.multi_asic.connect_to_all_dbs_for_ns' ) as mock_connect :
1174+ mock_db_client_asic0 = mock .MagicMock ()
1175+ mock_db_client_asic1 = mock .MagicMock ()
1176+
1177+ def side_effect (ns ):
1178+ if ns == 'asic0' :
1179+ return mock_db_client_asic0
1180+ elif ns == 'asic1' :
1181+ return mock_db_client_asic1
1182+
1183+ mock_connect .side_effect = side_effect
1184+ result_asic0 = portstat .get_db_client ('asic0' )
1185+ result_asic1 = portstat .get_db_client ('asic1' )
1186+ assert mock_connect .call_count == 2
1187+ mock_connect .assert_any_call ('asic0' )
1188+ mock_connect .assert_any_call ('asic1' )
1189+ assert result_asic0 == mock_db_client_asic0
1190+ assert result_asic1 == mock_db_client_asic1
1191+ assert portstat .db_clients ['asic0' ] == mock_db_client_asic0
1192+ assert portstat .db_clients ['asic1' ] == mock_db_client_asic1
0 commit comments