已合并
修复环境上安装两张沐创网卡时,只有一张正常显示通过oem_smbus获取到的信息 #552
修复环境上安装两张沐创网卡时,只有一张正常显示通过oem_smbus获取到的信息 #552
已合并
yctco_huangyuxuan创建于 7月17日
共 4 个文件变更+105-3
@@ -1,5 +1,8 @@
1# Changelog1# Changelog
2All notable changes to this project will be documented in this file.2All notable changes to this project will be documented in this file.
3+## [1.81.20] - 2026-7-21
4+修复环境上安装两张沐创网卡时,只有一张正常显示通过oem_smbus获取到的信息
5+ 
3## [1.81.19] - 2026-7-176## [1.81.19] - 2026-7-17
4LTS 适配沐创 N20G-R2F-25G7LTS 适配沐创 N20G-R2F-25G
5 8 
@@ -1,6 +1,6 @@
1{1{
2 "name": "network_adapter",2 "name": "network_adapter",
3- "version": "1.81.19",3+ "version": "1.81.20",
4 "type": "application",4 "type": "application",
5 "deployConfig": "hardware.service",5 "deployConfig": "hardware.service",
6 "author": "Huawei",6 "author": "Huawei",
@@ -2022,7 +2022,7 @@ end
2022function c_network_adapter:update_card_and_ports_oem_smbus_info(ports)2022function c_network_adapter:update_card_and_ports_oem_smbus_info(ports)
2023 local properties = {}2023 local properties = {}
2024 self.tasks:new_task(2024 self.tasks:new_task(
2025- 'get oem smbus info task ' .. tostring(self.NetworkAdapterId)):loop(function(task)2025+ 'get oem smbus info task ' .. tostring(self.NodeId)):loop(function(task)
2026 -- 不支持独立供电的网卡跟随服务器上下电状态判断,支持独立供电的网卡以自身供电状态为准2026 -- 不支持独立供电的网卡跟随服务器上下电状态判断,支持独立供电的网卡以自身供电状态为准
2027 if (fructl.get_power_status() == 'ON' and self.CardPowerGood == 0) or2027 if (fructl.get_power_status() == 'ON' and self.CardPowerGood == 0) or
2028 self.CardPowerGood == 1 then2028 self.CardPowerGood == 1 then
@@ -4150,4 +4150,103 @@ function TEST_network_adapter:test_init_ncsi_over_mctp_signal_monitor_os_reset()
4150 c_network_adapter.update_ncsi_properties = orig.update4150 c_network_adapter.update_ncsi_properties = orig.update
4151 c_network_adapter.collect_log_by_ncsi_task = orig.collect4151 c_network_adapter.collect_log_by_ncsi_task = orig.collect
4152 libmgmt.device_spec_parser = orig.parser 4152 libmgmt.device_spec_parser = orig.parser
4153-end4153+end
4154+ 
4155+function TEST_network_adapter:test_update_card_and_ports_oem_smbus_info()
4156+ -- 保存原始全局依赖
4157+ local orig_fructl = _G.fructl
4158+ _G.fructl = require 'infrastructure.fructl'
4159+ local orig_get_power_status = _G.fructl.get_power_status
4160+ local orig_skynet_fork = skynet.fork
4161+ 
4162+ -- 让 skynet.fork 同步执行
4163+ skynet.fork = function(f) f() end
4164+ 
4165+ local task_name_log = {} -- 记录 new_task 收到的任务名称
4166+ local adapter = {
4167+ NodeId = 'test_adapter',
4168+ tasks = {
4169+ new_task = function(_, name) -- 第一个参数为冒号调用的 self(tasks表),忽略它
4170+ task_name_log[#task_name_log + 1] = name
4171+ return {
4172+ loop = function(_, cb) -- 同样,loop 也使用冒号调用,忽略 self
4173+ cb()
4174+ return { set_timeout_ms = function() end }
4175+ end,
4176+ }
4177+ end,
4178+ },
4179+ }
4180+ 
4181+ local call_log = {}
4182+ local function spy(name)
4183+ return function(...)
4184+ table.insert(call_log, { name = name, args = { ... } })
4185+ end
4186+ end
4187+ adapter.update_oem_smbus_network_adapter_power_on = spy('adapter_power_on')
4188+ adapter.update_oem_smbus_port_properties_power_on = spy('port_power_on')
4189+ adapter.update_oem_smbus_info_power_off = spy('power_off')
4190+ 
4191+ local ports = { 'port1', 'port2' }
4192+ local function find_call(name)
4193+ for _, entry in ipairs(call_log) do
4194+ if entry.name == name then return entry end
4195+ end
4196+ return nil
4197+ end
4198+ 
4199+ -- 场景1:电源 ON,CardPowerGood == 0 → 上电
4200+ _G.fructl.get_power_status = function() return 'ON' end
4201+ adapter.CardPowerGood = 0
4202+ call_log = {}
4203+ task_name_log = {}
4204+ c_network_adapter.update_card_and_ports_oem_smbus_info(adapter, ports)
4205+ 
4206+ -- 校验任务名称(使用 NodeId 而非不存在的 NetworkAdapterId)
4207+ lu.assertEquals(#task_name_log, 1, 'should create exactly one task')
4208+ lu.assertEquals(task_name_log[1], 'get oem smbus info task test_adapter',
4209+ 'task name should use NodeId')
4210+ 
4211+ lu.assertNotNil(find_call('adapter_power_on'), 'should call adapter power_on')
4212+ lu.assertNotNil(find_call('port_power_on'), 'should call port power_on')
4213+ lu.assertIsNil(find_call('power_off'), 'should not call power_off')
4214+ 
4215+ local port_call = find_call('port_power_on')
4216+ local adapter_call = find_call('adapter_power_on')
4217+ lu.assertEquals(port_call.args[2], ports, 'ports should be provided correctly')
4218+ lu.assertEquals(port_call.args[3], adapter_call.args[2], 'properties must be the same table')
4219+ 
4220+ -- 场景2:CardPowerGood == 1 → 上电(电源状态被忽略)
4221+ _G.fructl.get_power_status = function() return 'OFF' end
4222+ adapter.CardPowerGood = 1
4223+ call_log = {}
4224+ task_name_log = {}
4225+ c_network_adapter.update_card_and_ports_oem_smbus_info(adapter, ports)
4226+ 
4227+ lu.assertEquals(task_name_log[1], 'get oem smbus info task test_adapter',
4228+ 'task name should use NodeId')
4229+ lu.assertNotNil(find_call('adapter_power_on'))
4230+ lu.assertNotNil(find_call('port_power_on'))
4231+ lu.assertIsNil(find_call('power_off'))
4232+ 
4233+ -- 场景3:电源 OFF,CardPowerGood == 0 → 下电
4234+ _G.fructl.get_power_status = function() return 'OFF' end
4235+ adapter.CardPowerGood = 0
4236+ call_log = {}
4237+ task_name_log = {}
4238+ c_network_adapter.update_card_and_ports_oem_smbus_info(adapter, ports)
4239+ 
4240+ lu.assertEquals(task_name_log[1], 'get oem smbus info task test_adapter',
4241+ 'task name should use NodeId')
4242+ lu.assertIsNil(find_call('adapter_power_on'))
4243+ lu.assertIsNil(find_call('port_power_on'))
4244+ local off_call = find_call('power_off')
4245+ lu.assertNotNil(off_call)
4246+ lu.assertEquals(off_call.args[2], ports)
4247+ 
4248+ -- 恢复原始全局状态
4249+ _G.fructl.get_power_status = orig_get_power_status
4250+ skynet.fork = orig_skynet_fork
4251+ _G.fructl = orig_fructl
4252+end