From 03e8bcddda3b1ba14f753ff931df90090987e12a Mon Sep 17 00:00:00 2001 From: DavidZagury <32644413+DavidZagury@users.noreply.github.com> Date: Tue, 9 Jan 2024 03:55:35 +0200 Subject: [PATCH] Fix SNMP dropping some of the queue counter when create_only_config_db_buffers is set to true (#303) This happened because the MIB assumed that half the queues configured are for mcast. When create_only_config_db_buffers is set to true this is not the case **- What I did** The ciscoSwitchQosMIB MIB assumed that all the counter are configured and that half of the configured queues are for mcast. This is no longer true, the feature "polling only configured ports buffer queue" make it possible for port to not have MC counters. This wrong assumption caused issue https://github.com/sonic-net/sonic-buildimage/issues/17448 To fix this, I instead used the BUFFER_MAX_PARAM_TABLE to find the max possible queues **- How I did it** **- How to verify it** Inside the SNMP docker run snmp walk: $ snmpwalk -v2c -c msft 10.64.247.240 1.3.6.1.4.1.9.9.580.1.5.5.1.4.1 Check that the results is not missing counters from any queue --- src/sonic_ax_impl/mibs/__init__.py | 13 +- .../mibs/vendor/cisco/ciscoSwitchQosMIB.py | 9 +- tests/mock_tables/asic0/appl_db.json | 4 + tests/mock_tables/asic0/counters_db.json | 70 +++++- tests/mock_tables/asic0/state_db.json | 9 + tests/mock_tables/asic1/appl_db.json | 4 + tests/mock_tables/asic1/counters_db.json | 70 +++++- tests/mock_tables/asic1/state_db.json | 9 + tests/mock_tables/asic2/appl_db.json | 5 + tests/mock_tables/asic2/counters_db.json | 111 ++++++++- tests/mock_tables/asic2/state_db.json | 9 + tests/mock_tables/counters_db.json | 227 +++++++++++++++++- tests/mock_tables/state_db.json | 20 +- tests/namespace/test_queues_stat.py | 46 ++++ tests/test_queues_stat.py | 45 ++++ 15 files changed, 632 insertions(+), 19 deletions(-) diff --git a/src/sonic_ax_impl/mibs/__init__.py b/src/sonic_ax_impl/mibs/__init__.py index 612d580f9..35e093ac3 100644 --- a/src/sonic_ax_impl/mibs/__init__.py +++ b/src/sonic_ax_impl/mibs/__init__.py @@ -13,6 +13,8 @@ COUNTERS_PORT_NAME_MAP = 'COUNTERS_PORT_NAME_MAP' COUNTERS_QUEUE_NAME_MAP = 'COUNTERS_QUEUE_NAME_MAP' +BUFFER_MAX_PARAM_TABLE = 'BUFFER_MAX_PARAM_TABLE' + LAG_TABLE = 'LAG_TABLE' LAG_MEMBER_TABLE = 'LAG_MEMBER_TABLE' LOC_CHASSIS_TABLE = 'LLDP_LOC_CHASSIS' @@ -60,6 +62,16 @@ def chassis_info_table(chassis_name): return "CHASSIS_INFO" + TABLE_NAME_SEPARATOR_VBAR + chassis_name + +def buffer_max_parm_table(port_name): + """ + :param: port_name: port name + :return: max buffer parametes info for this port + """ + + return "BUFFER_MAX_PARAM_TABLE" + TABLE_NAME_SEPARATOR_VBAR + port_name + + def fan_info_table(fan_name): """ :param: fan_name: fan name @@ -439,7 +451,6 @@ def init_sync_d_queue_tables(db_conn): port_index = get_index_from_str(port_name) key = queue_key(port_index, queue_index) port_queues_map[key] = sai_id - queue_stat_name = queue_table(sai_id) queue_stat = db_conn.get_all(COUNTERS_DB, queue_stat_name, blocking=False) if queue_stat is not None: diff --git a/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py index 2ee47e35c..31df647d0 100644 --- a/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py +++ b/src/sonic_ax_impl/mibs/vendor/cisco/ciscoSwitchQosMIB.py @@ -46,6 +46,9 @@ def __init__(self): """ super().__init__() self.db_conn = Namespace.init_namespace_dbs() + # establish connection to state database. + Namespace.connect_all_dbs(self.db_conn, mibs.STATE_DB) + self.lag_name_if_name_map = {} self.if_name_lag_name_map = {} self.oid_lag_name_map = {} @@ -132,8 +135,10 @@ def update_stats(self): namespace = self.port_index_namespace[if_index] # The first half of queue id is for ucast, and second half is for mcast - # To simulate vendor OID, we wrap queues by half distance - pq_count = math.ceil((max(if_queues) + 1) / 2) + # To simulate vendor OID, we wrap queues by max priority groups + port_max_queues = Namespace.dbs_get_all(self.db_conn, mibs.STATE_DB, + mibs.buffer_max_parm_table(self.oid_name_map[if_index]))['max_queues'] + pq_count = math.ceil(int(port_max_queues) / 2) for queue in if_queues: # Get queue type and statistics diff --git a/tests/mock_tables/asic0/appl_db.json b/tests/mock_tables/asic0/appl_db.json index 6b0c146a1..5663ccab8 100644 --- a/tests/mock_tables/asic0/appl_db.json +++ b/tests/mock_tables/asic0/appl_db.json @@ -46,6 +46,10 @@ "alias": "etp2", "speed": 100000 }, + "PORT_TABLE:Ethernet24": { + "alias": "etp17", + "speed": 100000 + }, "PORT_TABLE:Ethernet-BP0": { "description": "snowflake", "alias": "etp3", diff --git a/tests/mock_tables/asic0/counters_db.json b/tests/mock_tables/asic0/counters_db.json index 490b7d9b7..f7222c13d 100644 --- a/tests/mock_tables/asic0/counters_db.json +++ b/tests/mock_tables/asic0/counters_db.json @@ -311,7 +311,8 @@ "Ethernet-BP0": "oid:0x1000000000005", "Ethernet-BP4": "oid:0x1000000000006", "Ethernet-IB0": "oid:0x1000000000080", - "Ethernet-Rec0": "oid:0x1000000000081" + "Ethernet-Rec0": "oid:0x1000000000081", + "Ethernet24": "oid:0x1000000000014" }, "COUNTERS_LAG_NAME_MAP": { "PortChannel01": "oid:0x1000000000007" @@ -592,7 +593,13 @@ "Ethernet4:12": "oid:0x15000000010244", "Ethernet4:13": "oid:0x15000000010245", "Ethernet4:14": "oid:0x15000000010246", - "Ethernet4:15": "oid:0x15000000010247" + "Ethernet4:15": "oid:0x15000000010247", + "Ethernet24:0": "oid:0x15000000000260", + "Ethernet24:1": "oid:0x15000000000261", + "Ethernet24:2": "oid:0x15000000000262", + "Ethernet24:3": "oid:0x15000000000263", + "Ethernet24:4": "oid:0x15000000000264", + "Ethernet24:6": "oid:0x15000000000266" }, "COUNTERS_QUEUE_TYPE_MAP": { "oid:0x15000000000230": "SAI_QUEUE_TYPE_UNICAST", @@ -626,7 +633,13 @@ "oid:0x15000000010244": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010245": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010246": "SAI_QUEUE_TYPE_MULTICAST", - "oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST" + "oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000000260": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000261": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000262": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000263": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000264": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000266": "SAI_QUEUE_TYPE_UNICAST" }, "COUNTERS:oid:0x15000000000230": { "SAI_QUEUE_STAT_PACKETS": "1", @@ -883,4 +896,53 @@ "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" - }} + }, + "COUNTERS:oid:0x15000000000260": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "23492723984237432", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000261": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000262": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000263": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000264": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000266": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + } +} diff --git a/tests/mock_tables/asic0/state_db.json b/tests/mock_tables/asic0/state_db.json index bf0405422..5c281f9f4 100644 --- a/tests/mock_tables/asic0/state_db.json +++ b/tests/mock_tables/asic0/state_db.json @@ -33,5 +33,14 @@ }, "NEIGH_STATE_TABLE|fec0::ffff:afa:07": { "state": "Active" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet0": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet4": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet24": { + "max_queues": "16" } } diff --git a/tests/mock_tables/asic1/appl_db.json b/tests/mock_tables/asic1/appl_db.json index f8d7f0aa9..741b2358b 100644 --- a/tests/mock_tables/asic1/appl_db.json +++ b/tests/mock_tables/asic1/appl_db.json @@ -49,6 +49,10 @@ "speed": 1000, "alias": "etp16" }, + "PORT_TABLE:Ethernet32": { + "speed": 1000, + "alias": "etp18" + }, "PORT_TABLE:Ethernet-BP8": { "alias": "etp7" }, diff --git a/tests/mock_tables/asic1/counters_db.json b/tests/mock_tables/asic1/counters_db.json index 7304ffe10..4e7511f48 100644 --- a/tests/mock_tables/asic1/counters_db.json +++ b/tests/mock_tables/asic1/counters_db.json @@ -310,7 +310,8 @@ "Ethernet12": "oid:0x1000000000004", "Ethernet-BP8": "oid:0x1000000000005", "Ethernet-BP12": "oid:0x1000000000006", - "Ethernet16": "oid:0x1000000000010" + "Ethernet16": "oid:0x1000000000010", + "Ethernet32": "oid:0x1000000000011" }, "COUNTERS_LAG_NAME_MAP": { "PortChannel02": "oid:0x1000000000007" @@ -697,7 +698,13 @@ "Ethernet12:12": "oid:0x15000000010244", "Ethernet12:13": "oid:0x15000000010245", "Ethernet12:14": "oid:0x15000000010246", - "Ethernet12:15": "oid:0x15000000010247" + "Ethernet12:15": "oid:0x15000000010247", + "Ethernet32:8": "oid:0x15000000010270", + "Ethernet32:10": "oid:0x15000000010272", + "Ethernet32:11": "oid:0x15000000010273", + "Ethernet32:13": "oid:0x15000000010275", + "Ethernet32:14": "oid:0x15000000010276", + "Ethernet32:15": "oid:0x15000000010277" }, "COUNTERS_QUEUE_TYPE_MAP": { "oid:0x15000000000230": "SAI_QUEUE_TYPE_UNICAST", @@ -731,7 +738,13 @@ "oid:0x15000000010244": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010245": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010246": "SAI_QUEUE_TYPE_MULTICAST", - "oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST" + "oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010270": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010272": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010273": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010275": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010276": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010277": "SAI_QUEUE_TYPE_MULTICAST" }, "COUNTERS:oid:0x15000000000230": { "SAI_QUEUE_STAT_PACKETS": "1", @@ -988,4 +1001,53 @@ "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" - }} + }, + "COUNTERS:oid:0x15000000010270": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010272": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010273": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010275": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010276": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010277": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + } +} diff --git a/tests/mock_tables/asic1/state_db.json b/tests/mock_tables/asic1/state_db.json index 9af1a6316..026d90b49 100644 --- a/tests/mock_tables/asic1/state_db.json +++ b/tests/mock_tables/asic1/state_db.json @@ -30,5 +30,14 @@ }, "NEIGH_STATE_TABLE|10.10.0.4": { "state": "Established" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet8": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet12": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet32": { + "max_queues": "16" } } diff --git a/tests/mock_tables/asic2/appl_db.json b/tests/mock_tables/asic2/appl_db.json index c99d60591..291a1c10b 100644 --- a/tests/mock_tables/asic2/appl_db.json +++ b/tests/mock_tables/asic2/appl_db.json @@ -47,6 +47,11 @@ "alias": "etp12", "speed": 100000 }, + "PORT_TABLE:Ethernet40": { + "description": "snowflake", + "alias": "etp19", + "speed": 100000 + }, "ROUTE_TABLE:10.1.0.32": { "nexthop": "", "ifname": "lo" diff --git a/tests/mock_tables/asic2/counters_db.json b/tests/mock_tables/asic2/counters_db.json index 36b0ff839..010184f57 100644 --- a/tests/mock_tables/asic2/counters_db.json +++ b/tests/mock_tables/asic2/counters_db.json @@ -309,7 +309,8 @@ "Ethernet-BP16": "oid:0x1000000000003", "Ethernet-BP20": "oid:0x1000000000004", "Ethernet-BP24": "oid:0x1000000000005", - "Ethernet-BP28": "oid:0x1000000000006" + "Ethernet-BP28": "oid:0x1000000000006", + "Ethernet40": "oid:0x100000000000d" }, "COUNTERS_LAG_NAME_MAP": { "PortChannel03": "oid:0x1000000000007", @@ -659,7 +660,18 @@ "Ethernet-BP20:12": "oid:0x15000000010244", "Ethernet-BP20:13": "oid:0x15000000010245", "Ethernet-BP20:14": "oid:0x15000000010246", - "Ethernet-BP20:15": "oid:0x15000000010247" + "Ethernet-BP20:15": "oid:0x15000000010247", + "Ethernet40:1": "oid:0x15000000000281", + "Ethernet40:2": "oid:0x15000000000282", + "Ethernet40:4": "oid:0x15000000000284", + "Ethernet40:6": "oid:0x15000000000286", + "Ethernet40:7": "oid:0x15000000000287", + "Ethernet40:8": "oid:0x15000000010280", + "Ethernet40:9": "oid:0x15000000010281", + "Ethernet40:11": "oid:0x15000000010283", + "Ethernet40:13": "oid:0x15000000010285", + "Ethernet40:14": "oid:0x15000000010286" + }, "COUNTERS_QUEUE_TYPE_MAP": { "oid:0x15000000000230": "SAI_QUEUE_TYPE_UNICAST", @@ -693,7 +705,17 @@ "oid:0x15000000010244": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010245": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010246": "SAI_QUEUE_TYPE_MULTICAST", - "oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST" + "oid:0x15000000010247": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000000281": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000282": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000284": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000286": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000287": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000010280": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010281": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010283": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010285": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010286": "SAI_QUEUE_TYPE_MULTICAST" }, "COUNTERS:oid:0x15000000000230": { "SAI_QUEUE_STAT_PACKETS": "1", @@ -950,4 +972,85 @@ "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" - }} + }, + "COUNTERS:oid:0x15000000000281": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000282": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000284": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000286": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000287": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010280": { + "SAI_QUEUE_STAT_PACKETS": "123459", + "SAI_QUEUE_STAT_BYTES": "23492723984237432", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010281": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010283": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010285": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010286": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + } +} diff --git a/tests/mock_tables/asic2/state_db.json b/tests/mock_tables/asic2/state_db.json index 87ec6d4dd..be6fe9a42 100644 --- a/tests/mock_tables/asic2/state_db.json +++ b/tests/mock_tables/asic2/state_db.json @@ -4,5 +4,14 @@ }, "NEIGH_STATE_TABLE|10.10.0.5": { "state": "Established" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet-BP16": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet-BP20": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet40": { + "max_queues": "16" } } diff --git a/tests/mock_tables/counters_db.json b/tests/mock_tables/counters_db.json index a120b8a61..fdd76e764 100755 --- a/tests/mock_tables/counters_db.json +++ b/tests/mock_tables/counters_db.json @@ -3555,7 +3555,29 @@ "Ethernet8:12": "oid:0x15000000010254", "Ethernet8:13": "oid:0x15000000010255", "Ethernet8:14": "oid:0x15000000010256", - "Ethernet8:15": "oid:0x15000000010257" + "Ethernet8:15": "oid:0x15000000010257", + "Ethernet16:0": "oid:0x15000000000260", + "Ethernet16:1": "oid:0x15000000000261", + "Ethernet16:2": "oid:0x15000000000262", + "Ethernet16:3": "oid:0x15000000000263", + "Ethernet16:4": "oid:0x15000000000264", + "Ethernet16:6": "oid:0x15000000000266", + "Ethernet24:8": "oid:0x15000000010270", + "Ethernet24:10": "oid:0x15000000010272", + "Ethernet24:11": "oid:0x15000000010273", + "Ethernet24:13": "oid:0x15000000010275", + "Ethernet24:14": "oid:0x15000000010276", + "Ethernet24:15": "oid:0x15000000010277", + "Ethernet32:1": "oid:0x15000000000281", + "Ethernet32:2": "oid:0x15000000000282", + "Ethernet32:4": "oid:0x15000000000284", + "Ethernet32:6": "oid:0x15000000000286", + "Ethernet32:7": "oid:0x15000000000287", + "Ethernet32:8": "oid:0x15000000010280", + "Ethernet32:9": "oid:0x15000000010281", + "Ethernet32:11": "oid:0x15000000010283", + "Ethernet32:13": "oid:0x15000000010285", + "Ethernet32:14": "oid:0x15000000010286" }, "COUNTERS_QUEUE_TYPE_MAP": { "oid:0x15000000000230": "SAI_QUEUE_TYPE_UNICAST", @@ -3605,7 +3627,29 @@ "oid:0x15000000010254": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010255": "SAI_QUEUE_TYPE_MULTICAST", "oid:0x15000000010256": "SAI_QUEUE_TYPE_MULTICAST", - "oid:0x15000000010257": "SAI_QUEUE_TYPE_MULTICAST" + "oid:0x15000000010257": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000000260": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000261": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000262": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000263": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000264": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000266": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000010270": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010272": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010273": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010275": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010276": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010277": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000000281": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000282": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000284": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000286": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000000287": "SAI_QUEUE_TYPE_UNICAST", + "oid:0x15000000010280": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010281": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010283": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010285": "SAI_QUEUE_TYPE_MULTICAST", + "oid:0x15000000010286": "SAI_QUEUE_TYPE_MULTICAST" }, "COUNTERS:oid:0x15000000000230": { "SAI_QUEUE_STAT_PACKETS": "1", @@ -3990,4 +4034,181 @@ "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" - }} + }, + "COUNTERS:oid:0x15000000000260": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "23492723984237432", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000261": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000262": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000263": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000264": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000266": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010270": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010272": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010273": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010275": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010276": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010277": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000281": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000282": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000284": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000286": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000000287": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010280": { + "SAI_QUEUE_STAT_PACKETS": "123459", + "SAI_QUEUE_STAT_BYTES": "23492723984237432", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010281": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010283": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010285": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + }, + "COUNTERS:oid:0x15000000010286": { + "SAI_QUEUE_STAT_PACKETS": "1", + "SAI_QUEUE_STAT_BYTES": "2", + "SAI_QUEUE_STAT_DROPPED_PACKETS": "3", + "SAI_QUEUE_STAT_DISCARD_DROPPED_PACKETS": "4", + "SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES": "5", + "SAI_QUEUE_STAT_WATERMARK_BYTES": "6" + } +} diff --git a/tests/mock_tables/state_db.json b/tests/mock_tables/state_db.json index abccdb386..ad4cd5eca 100644 --- a/tests/mock_tables/state_db.json +++ b/tests/mock_tables/state_db.json @@ -195,5 +195,23 @@ }, "NEIGH_STATE_TABLE|fc00::12": { "state" : "Deleted" - } + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet0": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet4": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet8": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet16": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet24": { + "max_queues": "16" + }, + "BUFFER_MAX_PARAM_TABLE|Ethernet32": { + "max_queues": "16" + } } diff --git a/tests/namespace/test_queues_stat.py b/tests/namespace/test_queues_stat.py index d97db2efa..5c24cc624 100644 --- a/tests/namespace/test_queues_stat.py +++ b/tests/namespace/test_queues_stat.py @@ -48,6 +48,52 @@ def test_getQueueCounters(self): self.assertEqual(str(value0.name), str(oid)) self.assertEqual(value0.data, 1) + + # Test issue https://github.com/sonic-net/sonic-buildimage/issues/17448 + # In this Scenario not all counters are created. + # Ethernet24 is created on mock_tables\asic0\counters_db.json with only counters for UC 0,1,2,3,4,6 + # Ethernet32 is created on mock_tables\asic1\counters_db.json with only counters for MC 0,2,3,5,6,7 + # Ethernet40 is created on mock_tables\asic2\counters_db.json with only counters for UC 1,2,4,6,7 and MC 0,1,3,5,6 + def test_getQueueCountersForPortWithAllCounters(self): + tested_ports_counters_data = { + 25: { 1: {1:1, 2:23492723984237432, 5:3,6:0}, 2: {1:1, 2:2, 5:3, 6:0}, + 3: {1:1, 2:2, 5:3, 6:0}, 4: {1:1, 2:2, 5:3, 6:0}, + 5: {1:1, 2:2, 5:3, 6:0}, 7: {1:1, 2:2, 5:3, 6:0} + }, + 33: { 1: {3:1, 4:2, 7:3, 8:0}, 3: {3:1, 4:2, 7:3, 8:0}, + 4: {3:1, 4:2, 7:3, 8:0}, 6: {3:1, 4:2, 7:3, 8:0}, + 7: {3:1, 4:2, 7:3, 8:0}, 8: {3:1, 4:2, 7:3, 8:0} + }, + 41: { 1: {3:123459, 4:23492723984237432, 7:3, 8:0}, 2: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3,8:0}, + 3: {1:1, 2:2, 5:3, 6:0}, 4: {3:1, 4:2, 7:3, 8:0}, + 5: {1:1, 2:2, 5:3, 6:0}, 6: {3:1, 4:2, 7:3, 8:0}, + 7: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3,8:0}, 8: {1:1, 2:2, 5:3, 6:0} + } + } + + for port, configured_queues in tested_ports_counters_data.items(): + for queue_id in range(1, 8): + for counter_id in range(1, 8): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, port, 2, queue_id, counter_id)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut) + print(response) + value0 = response.values[0] + if queue_id in configured_queues.keys() and counter_id in configured_queues[queue_id]: + self.assertEqual(value0.type_, ValueType.COUNTER_64) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, configured_queues[queue_id][counter_id]) + else: + self.assertEqual(value0.type_, ValueType.NO_SUCH_INSTANCE) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, None) + + def test_getNextPduForQueueCounter(self): oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 1)) expected_oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 2)) diff --git a/tests/test_queues_stat.py b/tests/test_queues_stat.py index 31f82e60b..3ae9695c9 100644 --- a/tests/test_queues_stat.py +++ b/tests/test_queues_stat.py @@ -44,6 +44,51 @@ def test_getQueueCounters(self): self.assertEqual(str(value0.name), str(oid)) self.assertEqual(value0.data, 1) + # Test issue https://github.com/sonic-net/sonic-buildimage/issues/17448 + # In this Scenario not all counters are created. + # Ethernet16 is created on mock_tables\counters_db.json with only counters for UC 0,1,2,3,4,6 + # Ethernet24 is created on mock_tables\counters_db.json with only counters for MC 0,2,3,5,6,7 + # Ethernet32 is created on mock_tables\counters_db.json with only counters for UC 1,2,4,6,7 and MC 0,1,3,5,6 + def test_getQueueCountersForPortWithAllCounters(self): + tested_ports_counters_data = { + 17: { 1: {1:1, 2:23492723984237432, 5:3,6:0}, 2: {1:1, 2:2, 5:3, 6:0}, + 3: {1:1, 2:2, 5:3, 6:0}, 4: {1:1, 2:2, 5:3, 6:0}, + 5: {1:1, 2:2, 5:3, 6:0}, 7: {1:1, 2:2, 5:3, 6:0} + }, + 25: { 1: {3:1, 4:2, 7:3, 8:0}, 3: {3:1, 4:2, 7:3, 8:0}, + 4: {3:1, 4:2, 7:3, 8:0}, 6: {3:1, 4:2, 7:3, 8:0}, + 7: {3:1, 4:2, 7:3, 8:0}, 8: {3:1, 4:2, 7:3, 8:0} + }, + 33: { 1: {3:123459, 4:23492723984237432, 7:3, 8:0}, 2: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3,8:0}, + 3: {1:1, 2:2, 5:3, 6:0}, 4: {3:1, 4:2, 7:3, 8:0}, + 5: {1:1, 2:2, 5:3, 6:0}, 6: {3:1, 4:2, 7:3, 8:0}, + 7: {1:1, 2:2, 3:1, 4:2, 5:3, 6:0, 7:3,8:0}, 8: {1:1, 2:2, 5:3, 6:0} + } + } + + for port, configured_queues in tested_ports_counters_data.items(): + for queue_id in range(1, 8): + for counter_id in range(1, 8): + oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, port, 2, queue_id, counter_id)) + get_pdu = GetPDU( + header=PDUHeader(1, PduTypes.GET, 16, 0, 42, 0, 0, 0), + oids=[oid] + ) + + encoded = get_pdu.encode() + response = get_pdu.make_response(self.lut) + print(response) + value0 = response.values[0] + if queue_id in configured_queues.keys() and counter_id in configured_queues[queue_id]: + self.assertEqual(value0.type_, ValueType.COUNTER_64) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, configured_queues[queue_id][counter_id]) + else: + self.assertEqual(value0.type_, ValueType.NO_SUCH_INSTANCE) + self.assertEqual(str(value0.name), str(oid)) + self.assertEqual(value0.data, None) + + def test_getNextPduForQueueCounter(self): oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 1)) expected_oid = ObjectIdentifier(8, 0, 0, 0, (1, 3, 6, 1, 4, 1, 9, 9, 580, 1, 5, 5, 1, 4, 1, 2, 1, 2))