Configure IP Address Via Different User Roles And Verify(1)

测试用例

Configure IP Address Via Different User Roles And Verify

Documentation Configure IP address via different user roles and verify.

Tags Configure_IP_Address_Via_Different_User_Roles_And_Verify

Teardown Restore LDAP Privilege

Template Update LDAP User Role And Configure IP Address

Verify LDAP user with Administrator privilege is able to configure IP address.

{LDAP_TYPE} Administrator {GROUP_NAME} ${HTTP_OK},${HTTP_NO_CONTENT}

Verify LDAP user with ReadOnly privilege is forbidden to configure IP address.

{LDAP_TYPE} ReadOnly {GROUP_NAME} ${HTTP_FORBIDDEN}

Verify LDAP user with Operator privilege is able to configure IP address.

{LDAP_TYPE} Operator {GROUP_NAME} ${HTTP_FORBIDDEN}

模板关键字:

Update LDAP User Role And Configure IP Address

Documentation Update LDAP user role and configure IP address.

Arguments\] ${ldap_type} ${group_privilege} ${group_name} ${valid_status_code}=\[${HTTP_OK,${HTTP_NO_CONTENT}

Teardown Run Keywords Redfish.Logout AND Redfish.Login AND Delete IP Address ${test_ip}

Description of argument(s):

ldap_type The LDAP type ("ActiveDirectory" or "LDAP").

group_privilege The group privilege ("Administrator", "Operator" or "ReadOnly").

group_name The group name of user.

valid_status_code The expected valid status code.

Update LDAP Configuration With LDAP User Role And Group ${ldap_type}

... {group_privilege} {group_name}

Redfish.Logout

Redfish.Login {LDAP_USER} {LDAP_USER_PASSWORD}

${test_gateway}= Get BMC Default Gateway

Add IP Address {test_ip} {test_mask} {test_gateway} {valid_status_code}

问题一:admin返回了204状态码,符合预期但是测试失败

一、初始现象

测试套件redfish/account_service/test_ldap_configuration.robot

测试用例Configure IP Address Via Different User Roles And Verify

当前状态:仅启用 Administrator 数据行

测试数据行

robotframework

复制代码
[Template]  Update LDAP User Role And Configure IP Address
${LDAP_TYPE}  Administrator  ${GROUP_NAME}  [${HTTP_OK},${HTTP_NO_CONTENT}]

执行流程

  • 测试用例调用模板关键字 Update LDAP User Role And Configure IP Address,后者内部调用 Add IP Address

  • Add IP Address 内部最终执行 Redfish.Patch 操作。

实际结果

  • BMC 返回 HTTP 204 No Content(符合预期,因为 Administrator 配置 IP 时,BMC 可能返回 200 或 204)。

  • 测试用例最终 FAIL,错误信息如下:

复制代码
ValueError: The HTTP status code was not valid:
status: 204
valid_status_codes:
  [0]:
    [0]: 200
    [1]: 204
  • 说明 Redfish 库收到的 valid_status_codes[[200,204]],而不是 [200,204],导致 204 被认为不合法。

二、最初对原因的初步判断

最初怀疑问题出在 Add IP Address 关键字内部的这句代码:

robotframework

复制代码
Redfish.Patch ... valid_status_codes=[${valid_status_codes}]

如果 ${valid_status_codes} 本身是列表 [200,204],再套一层 [ ] 就会变成 [[200,204]],从而导致校验失败。

但进一步分析后发现,这不能直接认定为底层关键字实现错误


三、实际代码关系分析

1. Update LDAP User Role And Configure IP Address 关键字定义

robotframework

复制代码
[Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}
...  ${valid_status_code}=[${HTTP_OK},${HTTP_NO_CONTENT}]
  • 该关键字仅将 valid_status_code 直接传递给 Add IP Address,未做任何处理。

2. Add IP Address 关键字定义

robotframework

复制代码
[Arguments]  ${ip}  ${subnet_mask}  ${gateway}
...  ${valid_status_codes}=${HTTP_OK}
  • 内部包含状态码转换逻辑:

robotframework

复制代码
${valid_status_codes}=  Set Variable If
...  '${valid_status_codes}' == '${HTTP_OK}'
...  ${HTTP_OK},${HTTP_NO_CONTENT}
...  ${valid_status_codes}
  • 设计意图 :调用方传入单个状态码(如 ${HTTP_OK}),Add IP Address 将其扩展为 200,204,再传递给 Redfish.Patch 时包装成列表 [200,204]

因此,valid_status_codes=[${valid_status_codes}] 本身不是错误 ,它是在将 keyword 内部处理好的 200,204 包装成 Redfish 库需要的列表格式。


四、Admin 失败的实际原因

综合以上分析,当前失败的直接原因可定性为:

  1. 测试用例实际执行时 ,Administrator 数据行的 valid_status_code 被作为字符串 [200,204] 传递给 Add IP Address

  2. Add IP Address 未检测到 HTTP_OK,因此未进行扩展,直接将此字符串原样传递。

  3. 调用 Redfish.Patch 时,使用 valid_status_codes=[${valid_status_codes}],将字符串 [200,204] 包装成嵌套列表 [[200,204]]

  4. BMC 返回 204,但 Redfish 库无法将 204 与嵌套列表中的允许状态码正确匹配,抛出 ValueError

重点强调

目前没有证据表明 Add IP Addressvalid_status_codes=[${valid_status_codes}] 本身存在缺陷。

真正的问题是调用约定没有被正确遵守------测试用例应当传入单个状态码,而不是列表或字符串形式的列表。


五、修改方式

1. 修改 Administrator 的 Template 数据行

修改前

robotframework

复制代码
${LDAP_TYPE}  Administrator  ${GROUP_NAME}  [${HTTP_OK},${HTTP_NO_CONTENT}]

修改后

robotframework

复制代码
${LDAP_TYPE}  Administrator  ${GROUP_NAME}  ${HTTP_OK}

理由 :利用 Add IP Address 现有逻辑,传入 200 后自动扩展为 200,204,仍然兼容 BMC 返回 200 或 204 的实现。

2. 同步调整 Update LDAP User Role And Configure IP Address 的默认值

修改前

robotframework

复制代码
[Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=[${HTTP_OK},${HTTP_NO_CONTENT}]

修改后

robotframework

复制代码
[Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=${HTTP_OK}

理由 :使上层关键字的参数语义与底层 Add IP Address 保持一致(即期望单个状态码),避免后续调用者误解。


六、建议最终修改后的代码

模板关键字定义

robotframework

复制代码
Update LDAP User Role And Configure IP Address
    [Documentation]  Update LDAP user role and configure IP address.
    [Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=${HTTP_OK}
    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login  AND  Delete IP Address  ${test_ip}

    Update LDAP Configuration With LDAP User Role And Group  ${ldap_type}
    ...  ${group_privilege}  ${group_name}

    Redfish.Logout
    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}

    ${test_gateway}=  Get BMC Default Gateway
    Add IP Address  ${test_ip}  ${test_mask}  ${test_gateway}  ${valid_status_code}

测试数据行

robotframework

复制代码
[Template]  Update LDAP User Role And Configure IP Address
# Verify LDAP user with Administrator privilege is able to configure IP address.
${LDAP_TYPE}  Administrator  ${GROUP_NAME}  ${HTTP_OK}

总结:修改仅涉及测试用例层面的参数传递,不修改底层库,风险低、效果明确。此方案已通过实际验证,可有效解决 Administrator 执行失败的问题。

相关推荐
QH139292318801 小时前
NVIDIA H200 H300服务器
运维·服务器·开发语言·网络·信息与通信
xixiaoyunya1 小时前
中小微企业轻量组网方案的技术选型与实践:从传统专线到软定义隧道的成本与效能分析
服务器·php·apache
Hello-FPGA1 小时前
嵌入式LINUX 设备 ip配置后怎么保存才能掉电不消失?
linux·运维·服务器
奥莱维2 小时前
KNX酒店方案_KNX专用线与高端酒店技术逻辑
java·服务器·前端·数据库
工业一体机老司机2 小时前
Linux工业一体机自启动服务配置:systemd服务单元编写与开机优化实战
java·linux·服务器
zhixingheyi_tian2 小时前
Linux 之 ssh
linux·服务器·ssh
CHHH_HHH4 小时前
【Linux系统篇】深入解析Linux文件系统:从磁盘寻址到软硬链接
linux·服务器·开发语言·后端·ubuntu
剑锋所指,所向披靡!4 小时前
TCP并发服务器
服务器·网络·tcp/ip
刚入门的大一新生4 小时前
Linux-Linux的进程状态
linux·运维·服务器