1*** Settings ***
2Documentation     Test BMC using https://github.com/DMTF/Redfish-JsonSchema-ResponseValidator
3...               DMTF tool.
4
5Library           OperatingSystem
6Resource          ../../lib/dmtf_tools_utils.robot
7Resource          ../../lib/bmc_redfish_resource.robot
8
9Test Tags         Redfish_JsonSchema_ResponseValidator
10
11*** Variables ***
12
13${DEFAULT_PYTHON}  python3
14${rsv_dir_path}    Redfish-JsonSchema-ResponseValidator
15${rsv_github_url}  https://github.com/DMTF/Redfish-JsonSchema-ResponseValidator.git
16${command_string}  ${DEFAULT_PYTHON} ${rsv_dir_path}${/}Redfish-JsonSchema-ResponseValidator.py
17...                -r https://${OPENBMC_HOST} -u ${OPENBMC_USERNAME} -p ${OPENBMC_PASSWORD} -S -v
18
19${branch_name}    main
20
21*** Test Cases ***
22
23Test BMC Redfish Using Redfish JsonSchema ResponseValidator
24    [Documentation]  Check OpenBMC conformance with JsonSchema files at the DMTF site.
25    [Tags]  Test_BMC_Redfish_Using_Redfish_JsonSchema_ResponseValidator
26
27    Download DMTF Tool  ${rsv_dir_path}  ${rsv_github_url}  ${branch_name}
28
29    Redfish.Login
30    ${url_list}=  redfish_utils.List Request  /redfish/v1
31    Redfish.Logout
32
33    Shell Cmd  mkdir -p logs/
34
35    Set Test Variable  ${test_run_status}  ${True}
36
37    FOR  ${url}  IN  @{url_list}
38        ${rc}  ${output}=  Run DMTF Tool  ${rsv_dir_path}  ${command_string} -i ${url}
39        ${status}=  Run Keyword And Return Status  Redfish JsonSchema ResponseValidator Result  ${output}
40        IF  ${status} == ${False}  Set Test Variable  ${test_run_status}  ${status}
41        Save Logs For Debugging  ${status}  ${url}
42    END
43
44    IF  ${test_run_status} == ${False}
45        Fail  Redfish-JsonSchema-ResponseValidator detected errors.
46    END
47
48
49*** Keywords ***
50
51Save Logs For Debugging
52    [Documentation]  Save validate_errs on errors.
53    [Arguments]      ${status}  ${url}
54
55    # Description of arguments:
56    # status    True/False.
57    # url       Redfish resource path (e.g. "/redfish/v1/AccountService").
58
59    ${validate_errs}=  Shell Cmd  cat validate_errs
60    Log  ${validate_errs}
61
62    # URL /redfish/v1/Managers/${MANAGER_ID} strip the last ending string and save off
63    # the logs for debugging "validate_errs_AccountService" and move to logs/.
64    IF  ${status} == ${False}
65        Shell Cmd  mv validate_errs logs/validate_errs_${url.rsplit("/")[-1]}
66    END
67