xref: /openbmc/openbmc-test-automation/redfish/extended/test_websocket.robot (revision 7916eb3fd577eedd3ef934e45bf8b557197c9907)
1*** Settings ***
2
3Documentation  Websocket functionality test.
4
5# Test Parameters:
6# OPENBMC_HOST       The BMC host name or IP address.
7# OPENBMC_USERNAME   The username for the BMC login.
8# OPENBMC_PASSWORD   The password for OPENBMC_USERNAME.
9# OS_HOST            The OS host name or IP address.
10# OS_USERNAME        The username for the OS login.
11# OS_PASSWORD        The password for OS_USERNAME.
12
13Resource             ../../lib/esel_utils.robot
14Resource             ../../lib/bmc_redfish_resource.robot
15Resource             ../../lib/logging_utils.robot
16Resource             ../../lib/dump_utils.robot
17Resource             ../../lib/os_utilities.robot
18Library              ../../lib/gen_cmd.py
19Library              OperatingSystem
20
21
22Suite Setup          Suite Setup Execution
23Suite Teardown       Suite Teardown Execution
24Test Teardown        Test Teardown Execution
25
26Test Tags            Test_Websocket
27
28*** Variables ***
29
30${monitor_pgm}          websocket_monitor.py
31${monitor_file}         websocket_monitor_out.txt
32${esel_received}        eSEL received over websocket interface
33${dump_received}        Dump notification received over websocket interface
34${min_number_chars}     22
35${monitor_cmd}          ${monitor_pgm} ${OPENBMC_HOST} --openbmc_username ${OPENBMC_USERNAME}
36
37
38*** Test Cases ***
39
40
41Test BMC Websocket ESEL Interface
42    [Documentation]  Verify eSELs are reported over the websocket interface.
43    [Tags]  Test_BMC_Websocket_ESEL_Interface
44
45    # Check that the ipmitool is available. That tool is used to create an eSEL.
46    Tool Exist  ipmitool
47
48    # Spawn the websocket monitor program and then generate an eSEL.
49    # The monitor should asynchronously receive the eSEL through the
50    # websocket interface and report this fact to standard output.
51
52    Start Websocket Monitor  logging
53
54    ${initial_esel_count}=  Get Number Of Event Logs
55
56    # Generate eSEL (e.g.  typically "CPU 1 core 3 has failed").
57    Create eSEL  ${RAW_PREFIX}
58
59    ${current_esel_count}=   Get Number Of Event Logs
60
61    IF  ${initial_esel_count} == ${current_esel_count}
62        Fail  msg=System failed to generate eSEL upon request.
63    END
64
65    ${line}=  Grep File  ${monitor_file}  ${esel_received}
66    # Typical monitor_file contents:
67    # --------------- ON_MESSAGE:begin --------------------
68    # {"event":"PropertiesChanged","interface":"xyz.openbmc_project.Logging.
69    # Entry","path":"/xyz/openbmc_project/logging/entry/5","properties":{"Id":5}}
70    # eSEL received over websocket interface.
71
72    ${num_chars}=  Get Length  ${line}
73    IF  ${num_chars} < ${min_number_chars}
74        Fail  msg=No eSEL notification from websocket_monitor.py.
75    END
76
77
78Test BMC Websocket Dump Interface
79    [Documentation]  Verify dumps are reported over the websocket interface.
80    [Tags]  Test_BMC_Websocket_Dump_Interface
81
82    Redfish Delete All BMC Dumps
83    Start Websocket Monitor  dump
84    ${dump_id}=  Create User Initiated BMC Dump Via Redfish
85    Check Existence Of BMC Dump File  ${dump_id}
86
87    # Check that the monitor received notification of the dump.
88    ${line}=  Grep File  ${monitor_file}  ${dump_received}
89    # Typical monitor_file contents:
90    # --------------- ON_MESSAGE:begin --------------------
91    # {"event":"PropertiesChanged","interface":"xyz.openbmc_project.Dump.
92    # Entry","path":"/xyz/openbmc_project/dump/entry/1","properties":{"Size":157888}}
93    # Dump notification received over websocket interface.
94
95    ${num_chars}=  Get Length  ${line}
96    IF  ${num_chars} < ${min_number_chars}
97        Fail  msg=No dump notification from websocket_monitor.py.
98    END
99
100
101*** Keywords ***
102
103
104Start Websocket Monitor
105    [Documentation]  Fork the monitor to run in the background.
106    [Arguments]  ${monitor_type}
107
108    # Description of Argument(s):
109    # monitor_type  The type of websocket notifications to monitor,
110    #               either "logging" or "dump".
111
112    # Delete the previous output file, if any.
113    Remove File  ${monitor_file}
114
115    ${command}=  Catenate  ${monitor_cmd} --openbmc_password ${OPENBMC_PASSWORD}
116    ...   --monitor_type ${monitor_type} 1>${monitor_file} 2>&1
117
118    # Start the monitor. Fork so its a parallel task.
119    Shell Cmd  ${command}  fork=${1}
120
121    # Allow time for the monitor to initialize.
122    Sleep  5s
123
124
125Find Websocket Monitor
126    [Documentation]  Return the process Id(s) of running websocket monitors.
127
128    ${cmd}=  Catenate  ps -ef | grep '${monitor_cmd}'
129    ...  | grep -v grep | grep -v bash | cut -c10-14
130    ${shell_rc}  ${pid}=  Shell Cmd  ${cmd}
131    # There may be more than one pid returned if there is an instance
132    # of a monitory_pgm running from a previous run.
133    @{pid_list}=  Split String  ${pid}
134    RETURN  ${pid_list}
135
136
137Kill Websocket Monitor
138    [Documentation]  Terminate running websocket monitor.
139
140    ${pid_list}=  Find Websocket Monitor
141    FOR  ${pid}  IN  @{pid_list}
142        Shell Cmd  kill -s SIGTERM ${pid}
143    END
144
145
146Print Websocket Monitor Log
147    [Documentation]  Show the contents of the monitor output file.
148
149    ${websocket_monitor_log}=  OperatingSystem.Get File  ${monitor_file}
150    Log to Console  websocket_monitor_log:
151    Log to Console  ${websocket_monitor_log}
152
153
154Suite Setup Execution
155    [Documentation]  Do the suite setup tasks.
156
157    Run Keyword  Redfish Power On  stack_mode=skip
158
159    Redfish.Login
160
161    Delete All Error Logs
162    Kill Websocket Monitor
163
164    # Allow time for Error Logs to be deleted.
165    Sleep  5s
166
167
168Test Teardown Execution
169    [Documentation]  Do teardown tasks after a test.
170
171    FFDC On Test Case Fail
172    IF  '${TEST_STATUS}' == 'FAIL'  Print Websocket Monitor Log
173    Kill Websocket Monitor
174
175    Redfish Delete All BMC Dumps
176
177
178Suite Teardown Execution
179    [Documentation]  Do the post-suite teardown.
180
181    Delete All Error Logs
182    Run Keyword and Return Status  Redfish.Logout
183