def test_thermal(self): from sonic_platform.thermal import THERMAL_NAMING_RULE DeviceDataManager.get_gearbox_count = mock.MagicMock(return_value=2) utils.read_int_from_file = mock.MagicMock(return_value=1) m = Module(1) assert m.get_num_thermals() == 2 assert len(m._thermal_list) == 0 thermals = m.get_all_thermals() assert len(thermals) == 2 rule = THERMAL_NAMING_RULE['linecard thermals'] start_index = rule.get('start_index', 1) for i, thermal in enumerate(thermals): assert rule['name'].format(i + start_index) in thermal.get_name() assert rule['temperature'].format( i + start_index) in thermal.temperature assert rule['high_threshold'].format( i + start_index) in thermal.high_threshold assert rule['high_critical_threshold'].format( i + start_index) in thermal.high_critical_threshold assert thermal.get_position_in_parent() == i + 1 thermal = m.get_thermal(1) assert thermal assert thermal.get_position_in_parent() == 2
def __init__(self): ChassisBase.__init__(self) # Initialize EEPROM self._eeprom = Eeprom() for i in range(MAX_S6100_MODULE): module = Module(i) self._module_list.append(module) self._sfp_list.extend(module._sfp_list) for i in range(MAX_S6100_FAN): fan = Fan(i) self._fan_list.append(fan) for i in range(MAX_S6100_PSU): psu = Psu(i) self._psu_list.append(psu) for i in range(MAX_S6100_THERMAL): thermal = Thermal(i) self._thermal_list.append(thermal) for i in range(MAX_S6100_COMPONENT): component = Component(i) self._component_list.append(component) self._watchdog = Watchdog() self._transceiver_presence = self._get_transceiver_presence()
def __init__(self): ChassisBase.__init__(self) self.status_led_reg = "sys_status_led" self.supported_led_color = [ 'green', 'blinking green', 'amber', 'blinking amber' ] # Initialize EEPROM self._eeprom = Eeprom() for i in range(MAX_S6100_MODULE): module = Module(i) self._module_list.append(module) self._sfp_list.extend(module._sfp_list) for i in range(MAX_S6100_FANTRAY): fandrawer = FanDrawer(i) self._fan_drawer_list.append(fandrawer) self._fan_list.extend(fandrawer._fan_list) for i in range(MAX_S6100_PSU): psu = Psu(i) self._psu_list.append(psu) for i in range(MAX_S6100_THERMAL): thermal = Thermal(i) self._thermal_list.append(thermal) for i in range(MAX_S6100_COMPONENT): component = Component(i) self._component_list.append(component) self._watchdog = Watchdog() self._transceiver_presence = self._get_transceiver_presence()
def __init__(self): ChassisBase.__init__(self) # Initialize EEPROM self.sys_eeprom = Eeprom() for i in range(MAX_S6100_MODULE): module = Module(i) self._module_list.append(module) for i in range(MAX_S6100_FAN): fan = Fan(i) self._fan_list.append(fan) for i in range(MAX_S6100_PSU): psu = Psu(i) self._psu_list.append(psu) for i in range(MAX_S6100_THERMAL): thermal = Thermal(i) self._thermal_list.append(thermal) # Initialize component list self._component_name_list.append(COMPONENT_BIOS) self._component_name_list.append(SWITCH_CPLD) self._component_name_list.append(SMF_FPGA)
def __init__(self): ChassisBase.__init__(self) self.status_led_reg = "sys_status_led" self.supported_led_color = [ 'green', 'blinking green', 'amber', 'blinking amber' ] # Initialize EEPROM self._eeprom = Eeprom() for i in range(MAX_S6100_MODULE): module = Module(i) self._module_list.append(module) self._sfp_list.extend(module._sfp_list) #SFP ports sfp_port = 11 for index in range(64, 66): eeprom_path = "/sys/bus/i2c/devices/i2c-{0}/{0}-0050/eeprom".format( sfp_port) sfp_control = "" sfp_node = Sfp(index, 'SFP', eeprom_path, sfp_control, index) self._sfp_list.append(sfp_node) sfp_port = sfp_port + 1 for i in range(MAX_S6100_FANTRAY): fandrawer = FanDrawer(i) self._fan_drawer_list.append(fandrawer) self._fan_list.extend(fandrawer._fan_list) for i in range(MAX_S6100_PSU): psu = Psu(i) self._psu_list.append(psu) for i in range(MAX_S6100_THERMAL): thermal = Thermal(i) self._thermal_list.append(thermal) for i in range(MAX_S6100_COMPONENT): component = Component(i) self._component_list.append(component) bios_ver = self.get_component(0).get_firmware_version() bios_minor_ver = bios_ver.split("-")[-1] if bios_minor_ver.isdigit() and (int(bios_minor_ver) >= 9): self._watchdog = WatchdogTCO() else: self._watchdog = Watchdog() self._transceiver_presence = self._get_transceiver_presence()
def __init__(self): ChassisBase.__init__(self) # Initialize EEPROM self.sys_eeprom = Eeprom() for i in range(MAX_S6100_MODULE): module = Module(i) self._module_list.append(module) for i in range(MAX_S6100_FAN): fan = Fan(i) self._fan_list.append(fan) for i in range(MAX_S6100_PSU): psu = Psu(i) self._psu_list.append(psu) for i in range(MAX_S6100_THERMAL): thermal = Thermal(i) self._thermal_list.append(thermal) for i in range(MAX_S6100_COMPONENT): component = Component(i) self._component_list.append(component)
def get_sfp(self): DeviceDataManager.get_linecard_sfp_count = mock.MagicMock( return_value=3) utils.read_int_from_file = mock.MagicMock(return_value=1) # Test get_num_sfps, it should not create any SFP objects m = Module(1) assert m.get_num_sfps() == 3 assert len(m._sfp_list) == 0 # Index out of bound, return None sfp = m.get_sfp(3) assert sfp is None assert len(m._sfp_list) == 0 # Get one SFP, other SFP list should be initialized to None sfp = m.get_sfp(0) assert sfp is not None assert len(m._sfp_list) == 3 assert m._sfp_list[1] is None assert m._sfp_list[2] is None assert m.sfp_initialized_count == 1 # Get the SFP again, no new SFP created sfp1 = m.get_sfp(0) assert id(sfp) == id(sfp1) # Get another SFP, sfp_initialized_count increase sfp2 = m.get_sfp(1) assert sfp2 is not None assert m._sfp_list[2] is None assert m.sfp_initialized_count == 2 # Get all SFPs, but there are SFP already created, only None SFP created sfp_list = m.get_all_sfps() assert len(sfp_list) == 3 assert m.sfp_initialized_count == 3 assert filter(lambda x: x is not None, sfp_list) assert id(sfp1) == id(sfp_list[0]) assert id(sfp2) == id(sfp_list[1]) # Get all SFPs, no SFP yet, all SFP created m._sfp_list = [] m.sfp_initialized_count = 0 sfp_list = m.get_all_sfps() assert len(sfp_list) == 3 assert m.sfp_initialized_count == 3
def test_module_vpd(self): m = Module(1) m.vpd_parser.vpd_file = os.path.join(test_path, 'mock_psu_vpd') assert m.get_model() == 'MTEF-PSF-AC-C' assert m.get_serial() == 'MT1946X07684' assert m.get_revision() == 'A3' m.vpd_parser.vpd_file = 'not exists' assert m.get_model() == 'N/A' assert m.get_serial() == 'N/A' assert m.get_revision() == 'N/A' m.vpd_parser.vpd_file_last_mtime = None m.vpd_parser.vpd_file = os.path.join(test_path, 'mock_psu_vpd') assert m.get_model() == 'MTEF-PSF-AC-C' assert m.get_serial() == 'MT1946X07684' assert m.get_revision() == 'A3'
def test_check_state(self): utils.read_int_from_file = mock.MagicMock(return_value=0) m = Module(1) m._sfp_list.append(1) m._thermal_list.append(1) m._get_seq_no = mock.MagicMock(return_value=0) # both seq number and state no change, do not re-init module m._check_state() assert len(m._sfp_list) > 0 assert len(m._thermal_list) > 0 # seq number changes, but state keeps deactivated, no need re-init module m._get_seq_no = mock.MagicMock(return_value=1) m._check_state() assert len(m._sfp_list) > 0 assert len(m._thermal_list) > 0 # seq number not change, state changes from deactivated to activated, need re-init module utils.read_int_from_file = mock.MagicMock(return_value=1) m._check_state() assert len(m._sfp_list) == 0 assert len(m._thermal_list) == 0 # seq number changes, state keeps activated, which means the module has been replaced, need re-init module m._sfp_list.append(1) m._thermal_list.append(1) m._get_seq_no = mock.MagicMock(return_value=2) m._check_state() assert len(m._sfp_list) == 0 assert len(m._thermal_list) == 0 # seq number not change, state changes from activated to deactivated, need re-init module m._sfp_list.append(1) m._thermal_list.append(1) utils.read_int_from_file = mock.MagicMock(return_value=0) m._check_state() assert len(m._sfp_list) == 0 assert len(m._thermal_list) == 0
def get_module_list(self): channel, stub = nokia_common.channel_setup(nokia_common.NOKIA_GRPC_CHASSIS_SERVICE) if not channel or not stub: return ret, response = nokia_common.try_grpc(stub.GetChassisProperties, platform_ndk_pb2.ReqModuleInfoPb()) nokia_common.channel_shutdown(channel) if ret is False: return if self.is_modular_chassis() and not self.is_cpm: index = 0 supervisor = Module(index, ModuleBase.MODULE_TYPE_SUPERVISOR+str(index), ModuleBase.MODULE_TYPE_SUPERVISOR, self.get_supervisor_slot(), self.chassis_stub) supervisor.set_maximum_consumed_power(self.supervisor_power) index = 1 module = Module(index, ModuleBase.MODULE_TYPE_LINE+str(self.get_my_slot()-1), ModuleBase.MODULE_TYPE_LINE, self.get_my_slot(), self.chassis_stub) module.set_maximum_consumed_power(self.line_card_power) self._module_list.append(supervisor) self._module_list.append(module) logger.log_info('Not control card. Adding self into module list') return if self.is_modular_chassis() and self.is_cpm: for property_index in range(len(response.chassis_property.hw_property)): hw_property = response.chassis_property.hw_property[property_index] if hw_property.module_type == platform_ndk_pb2.HwModuleType.HW_MODULE_TYPE_CONTROL: # Single CPM is supported in chassis num_control_cards = 1 for j in range(num_control_cards): module = Module(property_index, ModuleBase.MODULE_TYPE_SUPERVISOR+str(j), ModuleBase.MODULE_TYPE_SUPERVISOR, self.get_supervisor_slot(), self.chassis_stub) module.set_maximum_consumed_power(self.supervisor_power) self._module_list.append(module) elif hw_property.module_type == platform_ndk_pb2.HwModuleType.HW_MODULE_TYPE_LINE: for j in range(hw_property.max_num): module = Module(property_index, ModuleBase.MODULE_TYPE_LINE+str(j), ModuleBase.MODULE_TYPE_LINE, hw_property.slot[j], self.chassis_stub) module.set_maximum_consumed_power(self.line_card_power) self._module_list.append(module) elif hw_property.module_type == platform_ndk_pb2.HwModuleType.HW_MODULE_TYPE_FABRIC: for j in range(hw_property.max_num): module = Module(property_index, ModuleBase.MODULE_TYPE_FABRIC+str(j), ModuleBase.MODULE_TYPE_FABRIC, hw_property.slot[j], self.chassis_stub) module.set_maximum_consumed_power(self.fabric_card_power) self._module_list.append(module)