77import re
88import logging
99import json
10+ import functools
1011from collections import defaultdict
1112from natsort import natsorted
1213from .transceiver_utils import all_transceivers_detected
@@ -91,6 +92,7 @@ def check_interface_status(dut, asic_index, interfaces, xcvr_skip_list):
9192 @param dut: The AnsibleHost object of DUT. For interacting with DUT.
9293 @param interfaces: List of interfaces that need to be checked.
9394 """
95+
9496 asichost = dut .asic_instance (asic_index )
9597 namespace = asichost .get_asic_namespace ()
9698 logging .info ("Check interface status using cmd 'show interface'" )
@@ -104,9 +106,13 @@ def check_interface_status(dut, asic_index, interfaces, xcvr_skip_list):
104106 output = dut .command ("show interface description" )
105107 intf_status = parse_intf_status (output ["stdout_lines" ][2 :])
106108 if dut .is_multi_asic :
107- check_intf_presence_command = 'show interface transceiver presence -n {} {} ' .format (namespace , {} )
109+ check_intf_presence_command = 'show interface transceiver presence -n {}' .format (namespace )
108110 else :
109- check_intf_presence_command = 'show interface transceiver presence {}'
111+ check_intf_presence_command = 'show interface transceiver presence'
112+ check_inerfaces_presence_output = dut .command (check_intf_presence_command )["stdout_lines" ][2 :]
113+ check_inerfaces_presence_output = (
114+ {ports_presence .split ()[0 ]: ports_presence .split ()[1 ] for ports_presence in check_inerfaces_presence_output }
115+ )
110116 for intf in interfaces :
111117 expected_oper = "up" if intf in mg_ports else "down"
112118 expected_admin = "up" if intf in mg_ports else "down"
@@ -124,10 +130,10 @@ def check_interface_status(dut, asic_index, interfaces, xcvr_skip_list):
124130
125131 # Cross check the interface SFP presence status
126132 if intf not in xcvr_skip_list [dut .hostname ]:
127- check_presence_output = dut . command ( check_intf_presence_command . format ( intf ) )
128- presence_list = check_presence_output [ "stdout_lines" ][ 2 ]. split ( )
129- assert intf in presence_list , "Wrong interface name in the output: %s" % str ( presence_list )
130- assert 'Present' in presence_list , "Status is not expected, presence status: %s" % str (presence_list )
133+ assert intf in check_inerfaces_presence_output , "Wrong interface name in the output for: %s" % str ( intf )
134+ interface_presence = check_inerfaces_presence_output . get ( intf , '' )
135+ assert 'Present' in interface_presence , \
136+ "Status is not expected, presence status: %s" % str ({ intf : interface_presence } )
131137
132138 logging .info ("Check interface status using the interface_facts module" )
133139 intf_facts = dut .interface_facts (up_ports = mg_ports , namespace = namespace )["ansible_facts" ]
@@ -167,6 +173,7 @@ def check_interface_information(dut, asic_index, interfaces, xcvr_skip_list):
167173 return True
168174
169175
176+ @functools .lru_cache (maxsize = 1 )
170177def get_port_map (dut , asic_index = None ):
171178 """
172179 @summary: Get the port mapping info from the DUT
@@ -219,7 +226,7 @@ def get_physical_port_indices(duthost, logical_intfs=None):
219226 asic_subcommand = f'-n asic{ asic_index } ' if asic_index is not None else ''
220227 cmd_keys = f'sonic-db-cli { asic_subcommand } CONFIG_DB KEYS "PORT|Ethernet*"'
221228 cmd_hget = f'sonic-db-cli { asic_subcommand } CONFIG_DB HGET $key index'
222- cmd = f'for key in $({ cmd_keys } ); do echo "$key : $({ cmd_hget } )" ; done'
229+ cmd = f'for key in $({ cmd_keys } ); do echo "$key : $({ cmd_hget } )" ; done' # noqa: E702,E203
223230 cmd_out = duthost .command (cmd , _uses_shell = True )["stdout_lines" ]
224231 cmd_out_dict = {}
225232 for line in cmd_out :
@@ -285,7 +292,7 @@ def get_fec_eligible_interfaces(duthost, supported_speeds):
285292 if oper == "up" and speed in supported_speeds :
286293 interfaces .append (intf_name )
287294 else :
288- logging .info (f"Skip for { intf_name } : oper_state:{ oper } speed:{ speed } " )
295+ logging .info (f"Skip for { intf_name } : oper_state: { oper } speed: { speed } " )
289296
290297 return interfaces
291298
0 commit comments