已合并
修复环境上安装两张沐创网卡时,只有一张正常显示通过oem_smbus获取到的信息 #552
yctco_huangyuxuan创建于 7月17日
修复环境上安装两张沐创网卡时,只有一张正常显示通过oem_smbus获取到的信息 #552
已合并
共 4 个文件变更+105-3
| @@ -1,5 +1,8 @@ | |||
| 1 | # Changelog | 1 | # Changelog |
| 2 | All notable changes to this project will be documented in this file. | 2 | All 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-17 | 6 | ## [1.81.19] - 2026-7-17 |
| 4 | LTS 适配沐创 N20G-R2F-25G | 7 | LTS 适配沐创 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 | |||
| 2022 | function c_network_adapter:update_card_and_ports_oem_smbus_info(ports) | 2022 | function 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) or | 2027 | if (fructl.get_power_status() == 'ON' and self.CardPowerGood == 0) or |
| 2028 | self.CardPowerGood == 1 then | 2028 | 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.update | 4150 | c_network_adapter.update_ncsi_properties = orig.update |
| 4151 | c_network_adapter.collect_log_by_ncsi_task = orig.collect | 4151 | 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 | -end | 4153 | +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 | ||