xref: /openbmc/openbmc-test-automation/redfish/service_root/test_sessions_management.robot (revision b2a2d948d555cb6e5169b9f21d489a3b089b4387)
1*** Settings ***
2
3Documentation    Test Redfish SessionService.
4
5Resource         ../../lib/bmc_redfish_utils.robot
6Resource         ../../lib/openbmc_ffdc.robot
7
8Suite Setup      Suite Setup Execution
9Suite Teardown   Suite Teardown Execution
10Test Setup       Printn
11Test Teardown    FFDC On Test Case Fail
12
13Test Tags        Sessions_Management
14
15*** Variables ***
16
17@{ADMIN}       admin_user  TestPwd123
18@{OPERATOR}    operator_user  TestPwd123
19# User-driven input parameter to skip operator user.
20# -v SKIP_OPERATOR_USER:1  to skip from CLI.
21${SKIP_OPERATOR_USER}    ${0}
22${REDFISH_DELETE_SESSIONS}  ${0}
23
24
25*** Test Cases ***
26
27Create Session And Verify Response Code Using Different Credentials
28    [Documentation]  Create session and verify response code using different
29    ...              credentials.
30    [Tags]  Create_Session_And_Verify_Response_Code_Using_Different_Credentials
31    [Template]  Create Session And Verify Response Code
32
33    # username           password             valid_status_code
34    ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}  ${HTTP_CREATED}
35    r00t                 ${OPENBMC_PASSWORD}  ${HTTP_UNAUTHORIZED}
36    ${OPENBMC_USERNAME}  password             ${HTTP_UNAUTHORIZED}
37    r00t                 password             ${HTTP_UNAUTHORIZED}
38    admin_user           TestPwd123           ${HTTP_CREATED}
39
40
41Create Session And Verify Response Code Using Operator Credentials
42    [Documentation]  Create session and verify response code using operator
43    ...              credentials.
44    [Tags]  Create_Session_And_Verify_Response_Code_Using_Operator_Credentials
45    [Template]  Create Session And Verify Response Code
46
47    # username           password             valid_status_code
48    operator_user        TestPwd123           ${HTTP_CREATED}
49
50
51Set Session Timeout And Verify Response Code
52    [Documentation]  Set Session Timeout And Verify Response Code.
53    [Tags]  Set_Session_Timeout_And_Verify_Response_Code
54    [Template]  Set Session Timeout And Verify
55    [Teardown]  Set Session Timeout And Verify  ${Default_Timeout_Value}  ${HTTP_OK}
56
57    # The minimum & maximum allowed values for session timeout are 30
58    # seconds and 86400 seconds respectively as per the session service
59    # schema mentioned at
60    # https://redfish.dmtf.org/schemas/v1/SessionService.v1_1_7.json
61
62    # value             valid_status_code
63    ${25}               ${HTTP_BAD_REQUEST}
64    ${30}               ${HTTP_OK}
65    ${3600}             ${HTTP_OK}
66    ${86400}            ${HTTP_OK}
67    ${86500}            ${HTTP_BAD_REQUEST}
68
69
70Set Session Timeout And Verify Session After Timeout
71    [Documentation]  Set timeout for session service and verify session is
72    ...              deleted after timeout.
73    [Tags]  Set_Session_Timeout_And_Verify_Session_After_Timeout
74    [Template]  Set Session Timeout And Verify Session Deleted After Timeout
75    [Teardown]  Set Session Timeout And Verify   ${Default_Timeout_Value}  ${HTTP_OK}
76
77    #timeout Value
78    ${30}
79    ${300}
80
81
82Verify Session Login And Logout For Newly Created User
83    [Documentation]  Verify able to login and logout using the session created
84    ...              for new user.
85    [Tags]  Verify_Session_Login_And_Logout_For_Newly_Created_User
86    [Teardown]  Redfish.Login
87
88    # Logout already created redfish session.
89    Redfish.Logout
90    Redfish.Login  ${ADMIN}[0]  ${ADMIN}[1]
91    ${systems}=  Redfish.Get Properties  /redfish/v1/Systems
92    Rprint Vars  systems
93    Redfish.Logout
94    ${systems}=  Redfish.Get  /redfish/v1/Systems
95    ...  valid_status_codes=[${HTTP_UNAUTHORIZED}]
96
97
98Verify SessionService Defaults
99    [Documentation]  Verify SessionService default property values.
100    [Tags]  Verify_SessionService_Defaults
101
102    ${session_service}=  Redfish.Get Properties  /redfish/v1/SessionService
103    Rprint Vars  session_service
104
105    Valid Value  session_service['@odata.id']  ['/redfish/v1/SessionService/']
106    Valid Value  session_service['Description']  ['Session Service']
107    Valid Value  session_service['Id']  ['SessionService']
108    Valid Value  session_service['Name']  ['Session Service']
109    Valid Value  session_service['ServiceEnabled']  [True]
110    Valid Value  session_service['SessionTimeout']  [${Default_Timeout_Value}]
111    Valid Value  session_service['Sessions']['@odata.id']  ['/redfish/v1/SessionService/Sessions']
112
113
114Verify Sessions Defaults
115    [Documentation]  Verify Sessions default property values.
116    [Tags]  Verify_Sessions_Defaults
117
118    ${sessions}=  Redfish.Get Properties  /redfish/v1/SessionService/Sessions
119    Rprint Vars  sessions
120    ${sessions_count}=  Get length  ${sessions['Members']}
121
122    Valid Value  sessions['@odata.id']  ['/redfish/v1/SessionService/Sessions/']
123    Valid Value  sessions['Description']  ['Session Collection']
124    Valid Value  sessions['Name']  ['Session Collection']
125    Valid Value  sessions['Members@odata.count']  [${sessions_count}]
126
127
128Verify Current Session Defaults
129    [Documentation]  Verify Current session default property values.
130    [Tags]  Verify_Current_Session_Defaults
131
132    ${session_location}=  Redfish.Get Session Location
133    ${session_id}=  Evaluate  os.path.basename($session_location)  modules=os
134    ${session_properties}=  Redfish.Get Properties  /redfish/v1/SessionService/Sessions/${session_id}
135    Rprint Vars  session_location  session_id  session_properties
136
137    Valid Value  session_properties['@odata.id']  ['/redfish/v1/SessionService/Sessions/${session_id}']
138    Valid Value  session_properties['Description']  ['Manager User Session']
139    Valid Value  session_properties['Name']  ['User Session']
140    Valid Value  session_properties['Id']  ['${session_id}']
141    Valid Value  session_properties['UserName']  ['${OPENBMC_USERNAME}']
142
143
144Verify Managers Defaults
145    [Documentation]  Verify managers defaults.
146    [Tags]  Verify_Managers_Defaults
147
148    ${managers}=  Redfish.Get Properties  /redfish/v1/Managers
149    Rprint Vars  managers
150    ${managers_count}=  Get Length  ${managers['Members']}
151
152    Valid Value  managers['Name']  ['Manager Collection']
153    Valid Value  managers['@odata.id']  ['/redfish/v1/Managers']
154    Valid Value  managers['Members@odata.count']  [${managers_count}]
155
156    # Members can be one or more, hence checking in the list.
157    Valid List  managers['Members']  required_values=[{'@odata.id': '/redfish/v1/Managers/${MANAGER_ID}'}]
158
159
160Verify Chassis Defaults
161    [Documentation]  Verify chassis defaults.
162    [Tags]  Verify_Chassis_Defaults
163
164    ${chassis}=  Redfish.Get Properties  /redfish/v1/Chassis
165    Rprint Vars  chassis
166    ${chassis_count}=  Get Length  ${chassis['Members']}
167
168    Valid Value  chassis['Name']  ['Chassis Collection']
169    Valid Value  chassis['@odata.id']  ['/redfish/v1/Chassis']
170    Valid Value  chassis['Members@odata.count']  [${chassis_count}]
171    Valid Value  chassis['Members@odata.count']  [${chassis_count}]
172
173    # Members can be one or more, hence checking in the list.
174    Valid List  chassis['Members']
175    ...  required_values=[{'@odata.id': '/redfish/v1/Chassis/${CHASSIS_ID}'}]
176
177
178Verify Systems Defaults
179    [Documentation]  Verify systems defaults.
180    [Tags]  Verify_Systems_Defaults
181
182    ${systems}=  Redfish.Get Properties  /redfish/v1/Systems
183    Rprint Vars  systems
184    ${systems_count}=  Get Length  ${systems['Members']}
185    Valid Value  systems['Name']  ['Computer System Collection']
186    Valid Value  systems['@odata.id']  ['/redfish/v1/Systems']
187    Valid Value  systems['Members@odata.count']  [${systems_count}]
188    Valid Value  systems['Members@odata.count']  [${systems_count}]
189    # Members can be one or more, hence checking in the list.
190    Valid List  systems['Members']  required_values=[{'@odata.id': '/redfish/v1/Systems/${SYSTEM_ID}'}]
191
192
193Verify Session Persistency After BMC Reboot
194    [Documentation]  Verify session persistency after BMC reboot.
195    [Tags]  Verify_Session_Persistency_After_BMC_Reboot
196
197    # Note the current session location.
198    ${session_location}=  Redfish.Get Session Location
199
200    Redfish OBMC Reboot (off)  stack_mode=normal
201
202    # Check for session persistency after BMC reboot.
203    # sessions here will have list of all sessions location.
204    ${sessions}=  Redfish.Get Attribute  /redfish/v1/SessionService/Sessions  Members
205    ${payload}=  Create Dictionary  @odata.id=${session_location}
206
207    List Should Contain Value  ${sessions}  ${payload}
208
209*** Keywords ***
210
211Create Session And Verify Response Code
212    [Documentation]  Create session and verify response code.
213    [Arguments]  ${username}=${OPENBMC_USERNAME}  ${password}=${OPENBMC_PASSWORD}
214    ...  ${valid_status_code}=${HTTP_CREATED}
215
216    # Description of argument(s):
217    # username            The username to create a session.
218    # password            The password to create a session.
219    # valid_status_code   Expected response code, default is ${HTTP_CREATED}.
220
221    ${resp}=  Redfish.Post  /redfish/v1/SessionService/Sessions
222    ...  body={'UserName':'${username}', 'Password': '${password}'}
223    ...  valid_status_codes=[${valid_status_code}]
224
225
226Set Session Timeout And Verify
227    [Documentation]  Set Session Timeout And Verify.
228    [Arguments]  ${value}=3600  ${valid_status_code}=${HTTP_OK}
229
230    # Description of argument(s):
231    # value               The value to patch session timeout.
232    # valid_status_code   Expected response code, default is ${HTTP_OK}.
233
234    Redfish.Login
235    ${data}=  Create Dictionary  SessionTimeout=${value}
236    Redfish.Patch  ${REDFISH_BASE_URI}SessionService
237    ...  body=&{data}
238    ...  valid_status_codes=[${valid_status_code}]
239
240    ${session_timeout}=  Redfish.Get Attribute
241    ...  ${REDFISH_BASE_URI}SessionService  SessionTimeout
242
243    IF  ${valid_status_code}==${HTTP_OK}
244        Valid Value  session_timeout  [${value}]
245    END
246
247
248Create Session And Check Session Timeout
249    [Documentation]  Create session and check session timeout.
250    [Arguments]  ${value}
251
252    # Description of argument(s):
253    # value   timeout value in integer to be configured.
254
255    ${resp}=  Redfish.Post  /redfish/v1/SessionService/Sessions
256    ...  body={'UserName':'${OPENBMC_USERNAME}', 'Password': '${OPENBMC_PASSWORD}'}
257    ...  valid_status_codes=[${HTTP_CREATED}]
258    ${session_id}=  Set Variable  ${resp.dict['@odata.id']}
259    Sleep  ${value}s
260
261    Redfish.Get  ${REDFISH_SESSION}  valid_status_codes=[${HTTP_UNAUTHORIZED}]
262    # Since sessions will deleted so logging again.
263    Redfish.Login
264    ${session_list}=  Redfish.Get Members List  /redfish/v1/SessionService/Sessions
265
266    List Should Not Contain Value  ${session_list}  ${session_id}
267
268
269Set Session Timeout And Verify Session Deleted After Timeout
270    [Documentation]  Set timeout for session service and verify session is deleted after timeout.
271    [Arguments]  ${timeout_value}
272
273    # Description of argument(s):
274    # timeout_value   timeout value in integer to be configured.
275
276    ${data}=  Create Dictionary  SessionTimeout=${timeout_value}
277    ${resp_patch}=  Redfish.Patch  /redfish/v1/SessionService
278    ...  body=&{data}  valid_status_codes=[${HTTP_OK}]
279    Create Session And Check Session Timeout  ${timeout_value}
280
281
282Get Default Timeout Value
283    [Documentation]  Get default session timeout value and set as a suite variable.
284
285    ${Default_Timeout_Value}=  Redfish.Get Attribute  /redfish/v1/SessionService  SessionTimeout
286    Set Suite Variable   ${Default_Timeout_Value}
287
288
289Suite Setup Execution
290    [Documentation]  Suite Setup Execution.
291
292    Redfish.Login
293
294    # Skip operator user if SKIP_OPERATOR_USER is 1.
295    IF  ${SKIP_OPERATOR_USER} == ${1}
296        Set Suite Variable  &{USERS}  Administrator=${ADMIN}
297    ELSE
298        Set Suite Variable  &{USERS}  Administrator=${ADMIN}  Operator=${OPERATOR}
299    END
300
301    Create Users With Different Roles  users=${USERS}  force=${True}
302    Get Default Timeout Value
303    Set Redfish Delete Session Flag  ${0}
304
305
306Suite Teardown Execution
307    [Documentation]  Suite teardown execution.
308
309    Delete BMC Users Via Redfish  users=${USERS}
310    Set Redfish Delete Session Flag  ${1}
311    Run Keyword And Ignore Error  Delete All Redfish Sessions
312    Redfish.Logout
313