在测试自定义风扇调速接口时,遇到参数校验错误与 HTTP 状态码不一致的问题,想请教排查方向。
复现步骤
- 使用管理员账号创建 Redfish 会话。
- GET
/redfish/v1/Chassis/1/Thermal,获取 ETag 并记录原配置:
{
"TemperatureRangeCelsius": [20, 30, 40],
"FanSpeedPercents": [40, 60, 80, 100]
}
当前 FanSpeedAdjustmentMode 为 Automatic,FanSmartCoolingMode 为 EnergySaving。
- 使用有效 Token 和上述 ETag,发送短数组请求:
PATCH /redfish/v1/Chassis/1/Thermal
Content-Type: application/json;charset=utf-8
X-Auth-Token: <有效Token>
If-Match: <GET获取的ETag>
{
"Oem": {
"openUBMC": {
"FanSpeedCustom": {
"InletTemperature": {
"TemperatureRangeCelsius": [0, 60],
"FanSpeedPercents": [20, 40, 80]
}
}
}
}
}
实际结果
HTTP 返回 200 OK,Body 为 Thermal 资源内容:
随后独立 GET 同一 Thermal 资源,确认温度数组仍为 [20,30,40]、转速数组仍为 [40,60,80,100],模式也未改变,即本次短数组没有被保存。
预期结果与已做检查
测试用例要求数组长度不符合限制时返回 HTTP 400。
本地构建输出也为 PropertyMemberQtyExceedLimit 配置了:
"HttpStatusCode": 400
rackmount/interface_config/redfish/mapping_config/Chassis/Thermal/Thermal.json 中,该请求通过 SetCustomCoolingPolicy 方法下发。
另外,在其他版本的 thermal_mgmt 参考源码中,看到温度数组最少 3 项、转速数组最少 4 项的检查,校验失败会在保存之前返回错误。
想请问:
1、对于本次仅设置两组数组、设置未成功且返回数量错误的请求,200 OK + @Message.ExtendedInfo 是否属于预期设计,还是应返回 400?
2、需要检查 libroute_mapper 的 PATCH 结果汇总,或 redfish/libmgmt_protocol 的响应生成逻辑吗?相关代码好像是闭源的?

