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