1*** Settings ***
2Documentation       Test suite for OpenBMC IPMI user management.
3
4Resource            ../lib/ipmi_client.robot
5Resource            ../lib/openbmc_ffdc.robot
6Library             ../lib/ipmi_utils.py
7
8Test Teardown       Test Teardown Execution
9
10
11*** Variables ***
12
13${invalid_username}     user%
14${invalid_password}     abc123
15${root_userid}          1
16${operator_level_priv}  0x3
17${admin_level_priv}     4
18${valid_password}       0penBmc1
19${max_password_length}  20
20${ipmi_setaccess_cmd}   channel setaccess
21
22
23*** Test Cases ***
24
25Verify IPMI User Summary
26    [Documentation]  Verify IPMI maximum supported IPMI user ID and
27    ...  enabled user form user summary
28    [Tags]  Verify_IPMI_User_Summary
29
30    # Delete all non-root IPMI (i.e. except userid 1)
31    Delete All Non Root IPMI User
32
33    # Create a valid user and enable it.
34    ${random_username}=  Generate Random String  8  [LETTERS]
35    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
36    IPMI Create User  ${random_userid}  ${random_username}
37    Run IPMI Standard Command  user enable ${random_userid}
38
39    # Verify maximum user count IPMI local user can have. Also verify
40    # currently enabled users.
41    ${resp}=  Run IPMI Standard Command  user summary
42    ${enabled_user_count}=
43    ...  Get Lines Containing String  ${resp}  Enabled User Count
44    ${maximum_ids}=  Get Lines Containing String  ${resp}  Maximum IDs
45    Should Contain  ${enabled_user_count}  2
46    Should Contain  ${maximum_ids}  15
47
48
49Verify IPMI User Creation With Valid Name And ID
50    [Documentation]  Create user via IPMI and verify.
51    [Tags]  Test_IPMI_User_Creation_With_Valid_Name_And_ID
52
53    ${random_username}=  Generate Random String  8  [LETTERS]
54    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
55    IPMI Create User  ${random_userid}  ${random_username}
56
57
58Verify IPMI User Creation With Invalid Name
59    [Documentation]  Verify error while creating IPMI user with invalid
60    ...  name(e.g. user name with special characters).
61    [Tags]  Verify_IPMI_User_Creation_With_Invalid_Name
62
63    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
64    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
65    ...  user set name ${random_userid} ${invalid_username}
66    Should Contain  ${msg}  Invalid data
67
68
69Verify IPMI User Creation With Invalid ID
70    [Documentation]  Verify error while creating IPMI user with invalid
71    ...  ID(i.e. any number greater than 15 or 0).
72    [Tags]  Verify_IPMI_User_Creation_With_Invalid_ID
73
74    @{id_list}=  Create List
75    ${random_invalid_id}=  Evaluate  random.randint(16, 1000)  modules=random
76    Append To List  ${id_list}  ${random_invalid_id}
77    Append To List  ${id_list}  0
78
79    :FOR  ${id}  IN  @{id_list}
80    \    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
81    \    ...  user set name ${id} newuser
82    \    Should Contain  ${msg}  User ID is limited to range
83
84
85Verify Setting IPMI User With Invalid Password
86    [Documentation]  Verify error while setting IPMI user with invalid
87    ...  password.
88    [Tags]  Verify_Setting_IPMI_User_With_Invalid_Password
89
90    # Create IPMI user.
91    ${random_username}=  Generate Random String  8  [LETTERS]
92    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
93    IPMI Create User  ${random_userid}  ${random_username}
94
95    # Set invalid password for newly created user.
96    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
97    ...  user set password ${random_userid} ${invalid_password}
98
99    Should Contain  ${msg}  Invalid data field in request
100
101
102Verify Setting IPMI Root User With New Name
103    [Documentation]  Verify error while setting IPMI root user with new
104    ...  name.
105    [Tags]  Verify_Setting_IPMI_Root_User_With_New_Name
106
107    # Set invalid password for newly created user.
108    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
109    ...  user set name ${root_userid} abcd
110
111    Should Contain  ${msg}  Set User Name command failed
112
113
114Verify IPMI User Password Via Test Command
115    [Documentation]  Verify IPMI user password using test command.
116    [Tags]  Verify_IPMI_User_Password_Via_Test_Command
117
118    # Create IPMI user.
119    ${random_username}=  Generate Random String  8  [LETTERS]
120    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
121    IPMI Create User  ${random_userid}  ${random_username}
122
123    # Set valid password for newly created user.
124    Run IPMI Standard Command
125    ...  user set password ${random_userid} ${valid_password}
126
127    # Verify newly set password using test command.
128    ${msg}=  Run IPMI Standard Command
129    ...  user test ${random_userid} ${max_password_length} ${valid_password}
130
131    Should Contain  ${msg}  Success
132
133
134Verify Setting Valid Password For IPMI User
135    [Documentation]  Set valid password for IPMI user and verify.
136    [Tags]  Verify_Setting_Valid_Password_For_IPMI_User
137
138    # Create IPMI user.
139    ${random_username}=  Generate Random String  8  [LETTERS]
140    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
141    IPMI Create User  ${random_userid}  ${random_username}
142
143    # Set valid password for newly created user.
144    Run IPMI Standard Command
145    ...  user set password ${random_userid} ${valid_password}
146
147    # Enable IPMI user
148    Run IPMI Standard Command  user enable ${random_userid}
149
150    # Set admin privilege and enable IPMI messaging for newly created user
151    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
152
153    Verify IPMI Username And Password  ${random_username}  ${valid_password}
154
155
156Verify IPMI User Creation With Same Name
157    [Documentation]  Verify error while creating two IPMI user with same name.
158    [Tags]  Verify_IPMI_User_Creation_With_Same_Name
159
160    ${random_username}=  Generate Random String  8  [LETTERS]
161    IPMI Create User  2  ${random_username}
162
163    # Set same username for another IPMI user.
164    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
165    ...  user set name 3 ${random_username}
166    Should Contain  ${msg}  Invalid data field in request
167
168
169Verify Setting IPMI User With Null Password
170    [Documentation]  Verify error while setting IPMI user with null
171    ...  password.
172    [Tags]  Verify_Setting_IPMI_User_With_Null_Password
173
174    # Create IPMI user.
175    ${random_username}=  Generate Random String  8  [LETTERS]
176    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
177    IPMI Create User  ${random_userid}  ${random_username}
178
179    # Set null password for newly created user.
180    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
181    ...  user set password ${random_userid} ""
182
183    Should Contain  ${msg}  Invalid data field in request
184
185
186Verify IPMI User Deletion
187    [Documentation]  Delete user via IPMI and verify.
188    [Tags]  Verify_IPMI_User_Deletion
189
190    ${random_username}=  Generate Random String  8  [LETTERS]
191    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
192    IPMI Create User  ${random_userid}  ${random_username}
193
194    # Delete IPMI User and verify
195    Run IPMI Standard Command  user set name ${random_userid} ""
196    ${user_info}=  Get User Info  ${random_userid}
197    Should Be Equal  ${user_info['user_name']}  ${EMPTY}
198
199
200Enable IPMI User And Verify
201    [Documentation]  Enable IPMI user and verify that the user is able
202    ...  to run IPMI command.
203    [Tags]  Enable_IPMI_User_And_Verify
204
205    # Create IPMI user and set valid password.
206    ${random_username}=  Generate Random String  8  [LETTERS]
207    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
208    IPMI Create User  ${random_userid}  ${random_username}
209    Run IPMI Standard Command
210    ...  user set password ${random_userid} ${valid_password}
211
212    # Set admin privilege and enable IPMI messaging for newly created user.
213    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
214
215    # Enable IPMI user and verify.
216    Run IPMI Standard Command  user enable ${random_userid}
217    ${user_info}=  Get User Info  ${random_userid}
218    Should Be Equal  ${user_info['enable_status']}  enabled
219
220    # Verify that enabled IPMI  user is able to run IPMI command.
221    Verify IPMI Username And Password  ${random_username}  ${valid_password}
222
223
224Disable IPMI User And Verify
225    [Documentation]  Disable IPMI user and verify that that the user
226    ...  is unable to run IPMI command.
227    [Tags]  Disable_IPMI_User_And_Verify
228
229    # Create IPMI user and set valid password.
230    ${random_username}=  Generate Random String  8  [LETTERS]
231    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
232    IPMI Create User  ${random_userid}  ${random_username}
233    Run IPMI Standard Command
234    ...  user set password ${random_userid} ${valid_password}
235
236    # Set admin privilege and enable IPMI messaging for newly created user.
237    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
238
239    # Disable IPMI user and verify.
240    Run IPMI Standard Command  user disable ${random_userid}
241    ${user_info}=  Get User Info  ${random_userid}
242    Should Be Equal  ${user_info['enable_status']}  disabled
243
244    # Verify that disabled IPMI  user is unable to run IPMI command.
245    ${msg}=  Run Keyword And Expect Error  *  Verify IPMI Username And Password
246    ...  ${random_username}  ${valid_password}
247    Should Contain  ${msg}  Unable to establish IPMI
248
249
250Verify IPMI Root User Password Change
251    [Documentation]  Change IPMI root user password and verify that
252    ...  root user is able to run IPMI command.
253    [Tags]  Verify_IPMI_Root_User_Password_Change
254    [Teardown]  Wait Until Keyword Succeeds  15 sec  5 sec
255    ...  Set Default Password For IPMI Root User
256
257    # Set new password for root user.
258    Run IPMI Standard Command
259    ...  user set password ${root_userid} ${valid_password}
260
261    # Verify that root user is able to run IPMI command using new password.
262    Verify IPMI Username And Password  root  ${valid_password}
263
264
265*** Keywords ***
266
267IPMI Create User
268    [Documentation]  Create IPMI user with given userid and username.
269    [Arguments]  ${userid}  ${username}
270
271    # Description of argument(s):
272    # userid      The user ID (e.g. "1", "2", etc.).
273    # username    The user name (e.g. "root", "robert", etc.).
274
275    ${ipmi_cmd}=  Catenate  user set name ${userid} ${username}
276    ${resp}=  Run IPMI Standard Command  ${ipmi_cmd}
277    ${user_info}=  Get User Info  ${userid}
278    Should Be Equal  ${user_info['user_name']}  ${username}
279
280
281Set Channel Access
282    [Documentation]  Verify that user is able to run IPMI command
283    ...  with given username and password.
284    [Arguments]  ${userid}  ${options}  ${channel}=1
285
286    # Description of argument(s):
287    # userid          The user ID (e.g. "1", "2", etc.).
288    # options         Set channel command options (e.g.
289    #                 "link=on", "ipmi=on", etc.).
290    # channel_number  The user's channel number (e.g. "1").
291
292    ${ipmi_cmd}=  Catenate  SEPARATOR=
293    ...  ${ipmi_setaccess_cmd}${SPACE}${channel}${SPACE}${userid}
294    ...  ${SPACE}${options}
295    Run IPMI Standard Command  ${ipmi_cmd}
296
297Set Default Password For IPMI Root User
298    [Documentation]  Set default password for IPMI root user (i.e. 0penBmc).
299
300    # Set default password for root user.
301    ${result}=  Run External IPMI Standard Command
302    ...  user set password ${root_userid} ${OPENBMC_PASSWORD}
303    ...  P=${valid_password}
304    Should Contain  ${result}  Set User Password command successful
305
306    # Verify that root user is able to run IPMI command using default password.
307    Verify IPMI Username And Password  root  ${OPENBMC_PASSWORD}
308
309
310Delete All Non Root IPMI User
311    [Documentation]  Delete all non-root IPMI user.
312
313    :FOR  ${userid}  IN RANGE  2  16
314    \  ${user_info}=  Get User Info  ${userid}
315    \  Run Keyword If  "${user_info['user_name']}" != ""
316    ...  Run IPMI Standard Command  user set name ${userid} ""
317
318
319Test Teardown Execution
320    [Documentation]  Do the test teardown execution.
321
322    FFDC On Test Case Fail
323    Delete All Non Root IPMI User
324
325