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

相关推荐
琥珀.25 分钟前
mysql中json数组转列表查询
linux·运维·服务器
云边云科技_云网融合3 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
网络小江4 小时前
组网第35课:静态路由——下一跳、出接口、默认路由、浮动静态与黑洞路由
服务器·网络·默认路由·黑洞路由·浮动静态路由
叼烟扛炮4 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
无足鸟ICT5 小时前
【RHCA+】who命令(查看已登陆用户)
linux·运维·服务器
Escalating_xu5 小时前
【Linux 网络编程】应用层协议 HTTP(下):Header、连接管理与 C++ HTTP 服务器
linux·服务器·网络
注塑机数据采集联网6 小时前
注塑机生产管控MES系统应用
大数据·运维·服务器·人工智能·物联网
Brilliantwxx7 小时前
【Linux】 文件访问与路径解析:目录、文件名、dentry、路径缓冲与 dcache 全解析
linux·运维·服务器·开发语言·spring
~城南花已开~10 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师