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 Address 中 valid_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 执行失败的问题。

相关推荐
正在走向自律10 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
OnlineProxy11 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
91刘仁德12 小时前
IP协议详解:从IP协议头到网段划分、路由与NAT
linux·服务器·网络·网络协议·tcp/ip
辻弋20112 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
工作10年+,存储芯片行业15 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
一号弯16 小时前
装完LINUX,请先新建日常用户
linux·运维·服务器
许彰午16 小时前
03-Linux环境准备依赖包内核参数与用户组
linux·运维·服务器·数据库
一号弯18 小时前
Hyperv的LINUX虚拟机扩容
linux·运维·服务器
一技安身18 小时前
VMware Workstation 25H2 创建兼容ESXi8.0虚拟机教程
服务器
硅基手札19 小时前
【Linux 内核专栏 13】快IO层
linux·服务器·嵌入式硬件