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