blob: 808f22105686cc566c94b6e3c42b3d82eb1003d1 [file] [log] [blame]
Rahul Maheshwari51dee262019-03-06 23:36:21 -06001*** Settings ***
2Documentation Test IPMI and Redfish combinations for user management.
3
4Resource ../../lib/resource.robot
5Resource ../../lib/bmc_redfish_resource.robot
6Resource ../../lib/openbmc_ffdc.robot
7Resource ../../lib/ipmi_client.robot
Rahul Maheshwari75e91fe2019-03-29 05:32:28 -05008Library ../lib/ipmi_utils.py
Rahul Maheshwari51dee262019-03-06 23:36:21 -06009
10Test Setup Test Setup Execution
11Test Teardown Test Teardown Execution
12
13
14*** Variables ***
15
16${valid_password} 0penBmc1
Rahul Maheshwaricf2336e2019-03-15 00:49:13 -050017${valid_password2} 0penBmc2
Rahul Maheshwari75e91fe2019-03-29 05:32:28 -050018${admin_level_priv} 4
19${operator_level_priv} 3
Rahul Maheshwari3e61ce62019-06-18 02:09:01 -050020${max_num_users} ${15}
Rahul Maheshwari51dee262019-03-06 23:36:21 -060021
22** Test Cases **
23
24Create Admin Redfish User And Verify Login Via IPMI
25 [Documentation] Create user using redfish and verify via IPMI.
26 [Tags] Create_Admin_Redfish_User_And_Verify_Login_Via_IPMI
27
28 ${random_username}= Generate Random String 8 [LETTERS]
29 Set Test Variable ${random_username}
30
31 ${payload}= Create Dictionary
32 ... UserName=${random_username} Password=${valid_password}
33 ... RoleId=Administrator Enabled=${True}
34 Redfish.Post /redfish/v1/AccountService/Accounts body=&{payload}
35 ... valid_status_codes=[${HTTP_CREATED}]
36
37 Verify IPMI Username And Password ${random_username} ${valid_password}
38
39
Rahul Maheshwaricf2336e2019-03-15 00:49:13 -050040Update User Password Via Redfish And Verify Using IPMI
41 [Documentation] Update user password via Redfish and verify using IPMI.
42 [Tags] Update_User_Password_Via_Redfish_And_Verify_Using_IPMI
43
44 # Create user using Redfish.
45 ${random_username}= Generate Random String 8 [LETTERS]
46 Set Test Variable ${random_username}
47
48 ${payload}= Create Dictionary
49 ... UserName=${random_username} Password=${valid_password}
50 ... RoleId=Administrator Enabled=${True}
51 Redfish.Post /redfish/v1/AccountService/Accounts body=&{payload}
52 ... valid_status_codes=[${HTTP_CREATED}]
53
54 # Update user password using Redfish.
55 ${payload}= Create Dictionary Password=${valid_password2}
56 Redfish.Patch /redfish/v1/AccountService/Accounts/${random_username} body=&{payload}
57
58 # Verify that IPMI command works with new password and fails with older password.
59 Verify IPMI Username And Password ${random_username} ${valid_password2}
60
61 Run Keyword And Expect Error Error: Unable to establish IPMI*
62 ... Verify IPMI Username And Password ${random_username} ${valid_password}
63
64
Rahul Maheshwariff63ac02019-03-29 10:25:21 -050065Update User Privilege Via Redfish And Verify Using IPMI
66 [Documentation] Update user privilege via Redfish and verify using IPMI.
67 [Tags] Update_User_Privilege_Via_Redfish_And_Verify_Using_IPMI
68
69 # Create user using Redfish with admin privilege.
70 ${random_username}= Generate Random String 8 [LETTERS]
71 Set Test Variable ${random_username}
72
73 ${payload}= Create Dictionary
74 ... UserName=${random_username} Password=${valid_password}
75 ... RoleId=Administrator Enabled=${True}
76 Redfish.Post /redfish/v1/AccountService/Accounts body=&{payload}
77 ... valid_status_codes=[${HTTP_CREATED}]
78
79 # Update user privilege to operator using Redfish.
80 ${payload}= Create Dictionary RoleId=Operator
81 Redfish.Patch /redfish/v1/AccountService/Accounts/${random_username} body=&{payload}
82
83 # Verify new user privilege level via IPMI.
84 ${resp}= Run IPMI Standard Command user list
85
86 # Example of response data:
87 # ID Name Callin Link Auth IPMI Msg Channel Priv Limit
88 # 1 root false true true ADMINISTRATOR
89 # 2 OAvCxjMv false true true OPERATOR
90 # 3 true false false NO ACCESS
91 # ..
92 # ..
93 # 15 true false false NO ACCESS
94
95 ${user_info}=
96 ... Get Lines Containing String ${resp} ${random_username}
97 Should Contain ${user_info} OPERATOR
98
99
Rahul Maheshwaricf2336e2019-03-15 00:49:13 -0500100Delete User Via Redfish And Verify Using IPMI
101 [Documentation] Delete user via redfish and verify using IPMI.
102 [Tags] Delete_User_Via_Redfish_And_Verify_Using_IPMI
103
104 # Create user using Redfish.
105 ${random_username}= Generate Random String 8 [LETTERS]
106 Set Test Variable ${random_username}
107
108 ${payload}= Create Dictionary
109 ... UserName=${random_username} Password=${valid_password}
110 ... RoleId=Administrator Enabled=${True}
111 Redfish.Post /redfish/v1/AccountService/Accounts body=&{payload}
112 ... valid_status_codes=[${HTTP_CREATED}]
113
114 # Delete user using Redfish.
115 Redfish.Delete /redfish/v1/AccountService/Accounts/${random_username}
116
117 # Verify that IPMI command fails with deleted user.
118 Run Keyword And Expect Error Error: Unable to establish IPMI*
119 ... Verify IPMI Username And Password ${random_username} ${valid_password}
120
121
Rahul Maheshwari75e91fe2019-03-29 05:32:28 -0500122Create IPMI User And Verify Login Via Redfish
123 [Documentation] Create user using IPMI and verify user login via Redfish.
124 [Tags] Create_IPMI_User_And_Verify_Login_Via_Redfish
125
126 ${username} ${userid}= IPMI Create Random User Plus Password And Privilege
127 ... ${valid_password} ${admin_level_priv}
128
129 # Verify user login using Redfish.
130 Redfish.Login ${username} ${valid_password}
131
132
133Update User Password Via IPMI And Verify Using Redfish
134 [Documentation] Update user password using IPMI and verify user
135 ... login via Redfish.
136 [Tags] Update_User_Password_Via_IPMI_And_Verify_Using_Redfish
137
138 ${username} ${userid}= IPMI Create Random User Plus Password And Privilege
139 ... ${valid_password} ${admin_level_priv}
140
141 # Update user password using IPMI.
142 Run IPMI Standard Command
143 ... user set password ${userid} ${valid_password2}
144
145 # Verify that user login works with new password using Redfish.
146 Redfish.Login ${username} ${valid_password2}
147
148
149Update User Privilege Via IPMI And Verify Using Redfish
150 [Documentation] Update user privilege via IPMI and verify using Redfish.
151 [Tags] Update_User_Privilege_Via_IPMI_And_Verify_Using_Redfish
152
153 # Create user using IPMI with admin privilege.
154 ${username} ${userid}= IPMI Create Random User Plus Password And Privilege
155 ... ${valid_password} ${admin_level_priv}
156
157 # Change user privilege to opetrator using IPMI.
158 Run IPMI Standard Command
159 ... user priv ${userid} ${operator_level_priv}
160
161 # Verify new user privilege level via Redfish.
162 ${privilege}= Redfish_Utils.Get Attribute
163 ... /redfish/v1/AccountService/Accounts/${username} RoleId
164 Should Be Equal ${privilege} Operator
165
166
167Delete User Via IPMI And Verify Using Redfish
168 [Documentation] Delete user using IPMI and verify error while doing
169 ... user login with deleted user via Redfish.
170 [Tags] Delete_User_Via_IPMI_And_Verify_Using_Redfish
171
172 ${username} ${userid}= IPMI Create Random User Plus Password And Privilege
173 ... ${valid_password} ${admin_level_priv}
174
175 # Delete IPMI User.
176 Run IPMI Standard Command user set name ${userid} ""
177
178 # Verify that Redfish login fails with deleted user.
179 Run Keyword And Expect Error *InvalidCredentialsError*
180 ... Redfish.Login ${username} ${valid_password}
181
182
Rahul Maheshwari3e61ce62019-06-18 02:09:01 -0500183Verify Failure To Exceed Max Number Of Users
184 [Documentation] Verify failure attempting to exceed the max number of user accounts.
185 [Tags] Verify_Failure_To_Exceed_Max_Number_Of_Users
186 [Teardown] Run Keywords Test Teardown Execution AND Delete All Non Root IPMI User
187
188 # Get existing user count.
189 ${resp}= Redfish.Get /redfish/v1/AccountService/Accounts/
190 ${current_user_count}= Get From Dictionary ${resp.dict} Members@odata.count
191
192 ${payload}= Create Dictionary Password=${valid_password}
193 ... RoleId=Administrator Enabled=${True}
194
195 # Create users to reach maximum users count (i.e. 15 users).
196 FOR ${INDEX} IN RANGE ${current_user_count} ${max_num_users}
197 ${random_username}= Generate Random String 8 [LETTERS]
198 Set To Dictionary ${payload} UserName ${random_username}
199 Redfish.Post ${REDFISH_ACCOUNTS_URI} body=&{payload}
200 ... valid_status_codes=[${HTTP_CREATED}]
201 END
202
203 # Verify error while creating 16th user.
204 ${random_username}= Generate Random String 8 [LETTERS]
205 Set To Dictionary ${payload} UserName ${random_username}
206 Redfish.Post ${REDFISH_ACCOUNTS_URI} body=&{payload}
207 ... valid_status_codes=[${HTTP_BAD_REQUEST}]
208
209
Rahul Maheshwari51dee262019-03-06 23:36:21 -0600210*** Keywords ***
211
Rahul Maheshwari75e91fe2019-03-29 05:32:28 -0500212IPMI Create Random User Plus Password And Privilege
213 [Documentation] Create random IPMI user with given password and privilege
214 ... level.
215 [Arguments] ${password} ${privilege}
216
217 # Description of argument(s):
218 # password Password to be assigned for the user.
219 # privilege Privilege level for the user (e.g. "1", "2", "3", etc.).
220
221 # Create IPMI user.
222 ${random_username}= Generate Random String 8 [LETTERS]
223 Set Suite Variable ${random_username}
224
225 ${random_userid}= Evaluate random.randint(2, 15) modules=random
226 IPMI Create User ${random_userid} ${random_username}
227
228 # Set given password for newly created user.
229 Run IPMI Standard Command
230 ... user set password ${random_userid} ${password}
231
232 # Enable IPMI user.
233 Run IPMI Standard Command user enable ${random_userid}
234
235 # Set given privilege and enable IPMI messaging for newly created user.
236 Set Channel Access ${random_userid} ipmi=on privilege=${privilege}
237
238 [Return] ${random_username} ${random_userid}
239
240
Rahul Maheshwari51dee262019-03-06 23:36:21 -0600241Test Setup Execution
242 [Documentation] Do test case setup tasks.
243
244 Redfish.Login
245
246
247Test Teardown Execution
248 [Documentation] Do the post test teardown.
249
250 FFDC On Test Case Fail
251 # Delete the test user.
252 Run Keyword And Ignore Error
253 ... Redfish.Delete /redfish/v1/AccountService/Accounts/${random_username}
254
255 Redfish.Logout