xref: /openbmc/openbmc-test-automation/redfish/account_service/test_user_account.robot (revision 82ae33bf26b3a76eb8204eae44303bf5d2ae87e0)
1*** Settings ***
2Documentation    Test suite for verifying Redfish admin, readonly operation user accounts.
3
4Resource         ../../lib/resource.robot
5Resource         ../../lib/bmc_redfish_resource.robot
6Resource         ../../lib/openbmc_ffdc.robot
7Resource         ../../lib/bmc_redfish_utils.robot
8
9Library          SSHLibrary
10
11Test Setup       Redfish.Login
12Test Teardown    Test Teardown Execution
13
14Test Tags        User_Account
15
16*** Variables ***
17
18${account_lockout_duration}   ${30}
19${account_lockout_threshold}  ${3}
20${ssh_status}                 ${True}
21
22*** Test Cases ***
23
24Verify AccountService Available
25    [Documentation]  Verify Redfish account service is available.
26    [Tags]  Verify_AccountService_Available
27
28    ${resp} =  Redfish_utils.Get Attribute  /redfish/v1/AccountService  ServiceEnabled
29    Should Be Equal As Strings  ${resp}  ${True}
30
31
32Verify Redfish Admin And ReadOnly Users Persistence After Reboot
33    [Documentation]  Verify Redfish admin user persistence after reboot.
34    [Tags]  Verify_Redfish_Admin_And_ReadOnly_Users_Persistence_After_Reboot
35    [Setup]  Run Keywords  Redfish.Login  AND
36    ...  Redfish Create User  admin_user  TestPwd123  Administrator  ${True}
37    ...  AND  Redfish Create User  readonly_user  TestPwd123  ReadOnly  ${True}
38    [Teardown]  Run Keywords  Redfish.Delete  /redfish/v1/AccountService/Accounts/admin_user
39    ...  AND  Redfish.Delete  /redfish/v1/AccountService/Accounts/readonly_user
40    ...  AND  Test Teardown Execution
41
42    # Reboot BMC.
43    Redfish OBMC Reboot (off)  stack_mode=normal
44
45    # Verify users after reboot.
46    Redfish Verify User  admin_user     TestPwd123  Administrator   ${True}
47    Redfish Verify User  readonly_user  TestPwd123  ReadOnly        ${True}
48
49
50Verify Redfish Operator User Persistence After Reboot
51    [Documentation]  Verify Redfish operator user persistence after reboot.
52    [Tags]  Verify_Redfish_Operator_User_Persistence_After_Reboot
53    [Setup]  Run Keywords  Redfish.Login  AND
54    ...  Redfish Create User  operator_user  TestPwd123  Operator  ${True}
55    [Teardown]  Run Keywords  Redfish.Delete  /redfish/v1/AccountService/Accounts/operator_user
56    ...  AND  Test Teardown Execution
57
58    # Reboot BMC.
59    Redfish OBMC Reboot (off)  stack_mode=normal
60
61    # Verify users after reboot.
62     Redfish Verify User  operator_user  TestPwd123  Operator        ${True}
63
64
65Redfish Create and Verify Admin User
66    [Documentation]  Create a Redfish user with administrator role and verify.
67    [Tags]  Redfish_Create_and_Verify_Admin_User
68    [Template]  Redfish Create And Verify User
69
70    #username      password    role_id         enabled
71    admin_user     TestPwd123  Administrator   ${True}
72
73
74Redfish Create and Verify Operator User
75    [Documentation]  Create a Redfish user with operator role and verify.
76    [Tags]  Redfish_Create_and_Verify_Operator_User
77    [Template]  Redfish Create And Verify User
78
79    #username      password    role_id         enabled
80    operator_user  TestPwd123  Operator        ${True}
81
82
83Redfish Create and Verify Readonly User
84    [Documentation]  Create a Redfish user with readonly role and verify.
85    [Tags]  Redfish_Create_and_Verify_Readonly_User
86    [Template]  Redfish Create And Verify User
87
88    #username      password    role_id         enabled
89    readonly_user  TestPwd123  ReadOnly        ${True}
90
91
92Verify Redfish Admin User Login With Wrong Password
93    [Documentation]  Verify Redfish create admin user with valid password and make sure
94    ...  admin user failed to login with wrong password.
95    [Tags]  Verify_Redfish_Admin_User_Login_With_Wrong_Password
96    [Template]  Verify Redfish User Login With Wrong Password
97
98    #username      password    role_id         enabled  wrong_password
99    admin_user     TestPwd123  Administrator   ${True}  alskjhfwurh
100
101
102Verify Redfish Operator User Login With Wrong Password
103    [Documentation]  Verify Redfish create operator user with valid password and make sure
104    ...  operator user failed to login with wrong password.
105    [Tags]  Verify_Redfish_Operator_User_Login_With_Wrong_Password
106    [Template]  Verify Redfish User Login With Wrong Password
107
108    #username      password    role_id         enabled  wrong_password
109    operator_user  TestPwd123  Operator        ${True}  12j8a8uakjhdaosiruf024
110
111
112Verify Redfish Readonly User Login With Wrong Password
113    [Documentation]  Verify Redfish create readonly user with valid password and make sure
114    ...  readonly user failed to login with wrong password.
115    [Tags]  Verify_Redfish_Readonly_User_Login_With_Wrong_Password
116    [Template]  Verify Redfish User Login With Wrong Password
117
118    #username      password    role_id         enabled  wrong_password
119    readonly_user  TestPwd123  ReadOnly        ${True}  12
120
121
122Verify Login with Deleted Redfish Admin User
123    [Documentation]  Verify login with deleted Redfish admin user.
124    [Tags]  Verify_Login_with_Deleted_Redfish_Admin_User
125    [Template]  Verify Login with Deleted Redfish User
126
127    #username     password    role_id         enabled
128    admin_user     TestPwd123  Administrator   ${True}
129
130
131Verify Login with Deleted Redfish Operator User
132    [Documentation]  Verify login with deleted Redfish operator user.
133    [Tags]  Verify_Login_with_Deleted_Redfish_Operator_User
134    [Template]  Verify Login with Deleted Redfish User
135
136    #username     password    role_id         enabled
137    operator_user  TestPwd123  Operator        ${True}
138
139
140Verify Login with Deleted Redfish Readonly User
141    [Documentation]  Verify login with deleted Redfish readonly user.
142    [Tags]  Verify_Login_with_Deleted_Redfish_Readonly_User
143    [Template]  Verify Login with Deleted Redfish User
144
145    #username     password    role_id         enabled
146    readonly_user  TestPwd123  ReadOnly        ${True}
147
148
149Verify Admin User Creation Without Enabling It
150    [Documentation]  Verify admin user creation without enabling it.
151    [Tags]  Verify_Admin_User_Creation_Without_Enabling_It
152    [Template]  Verify Create User Without Enabling
153
154    #username      password    role_id         enabled
155    admin_user     TestPwd123  Administrator   ${False}
156
157
158Verify Operator User Creation Without Enabling It
159    [Documentation]  Verify operator user creation without enabling it.
160    [Tags]  Verify_Operator_User_Creation_Without_Enabling_It
161    [Template]  Verify Create User Without Enabling
162
163    #username      password    role_id         enabled
164    operator_user  TestPwd123  Operator        ${False}
165
166
167Verify Readonly User Creation Without Enabling It
168    [Documentation]  Verify readonly user creation without enabling it.
169    [Tags]  Verify_Readonly_User_Creation_Without_Enabling_It
170    [Template]  Verify Create User Without Enabling
171
172    #username      password    role_id         enabled
173    readonly_user  TestPwd123  ReadOnly        ${False}
174
175
176Verify User Creation With Invalid Role Id
177    [Documentation]  Verify user creation with invalid role ID.
178    [Tags]  Verify_User_Creation_With_Invalid_Role_Id
179
180    # Make sure the user account in question does not already exist.
181    Redfish.Delete  /redfish/v1/AccountService/Accounts/test_user
182    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
183
184    # Create specified user.
185    ${payload}=  Create Dictionary
186    ...  UserName=test_user  Password=TestPwd123  RoleId=wrongroleid  Enabled=${True}
187    Redfish.Post  /redfish/v1/AccountService/Accounts/  body=&{payload}
188    ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
189
190Verify Error Upon Creating Same Users With Different Privileges
191    [Documentation]  Verify error upon creating same users with different privileges.
192    [Tags]  Verify_Error_Upon_Creating_Same_Users_With_Different_Privileges
193
194    Redfish Create User  test_user  TestPwd123  Administrator  ${True}
195
196    # Create specified user.
197    ${payload}=  Create Dictionary
198    ...  UserName=test_user  Password=TestPwd123  RoleId=ReadOnly  Enabled=${True}
199    Redfish.Post  /redfish/v1/AccountService/Accounts/  body=&{payload}
200    ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
201
202    Redfish.Delete  /redfish/v1/AccountService/Accounts/test_user
203
204
205Verify Modifying User Attributes
206    [Documentation]  Verify modifying user attributes.
207    [Tags]  Verify_Modifying_User_Attributes
208
209    # Create Redfish users.
210    Redfish Create User  admin_user     TestPwd123  Administrator   ${True}
211    Redfish Create User  readonly_user  TestPwd123  ReadOnly        ${True}
212
213    # Make sure the new user account does not already exist.
214    Redfish.Delete  /redfish/v1/AccountService/Accounts/newadmin_user
215    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
216
217    # Update admin_user username using Redfish.
218    ${payload}=  Create Dictionary  UserName=newadmin_user
219    Redfish.Patch  /redfish/v1/AccountService/Accounts/admin_user  body=&{payload}
220    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
221
222    # Update readonly_user role using Redfish.
223    ${payload}=  Create Dictionary  RoleId=Administrator
224    Redfish.Patch  /redfish/v1/AccountService/Accounts/readonly_user  body=&{payload}
225    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
226
227    # Verify users after updating
228    Redfish Verify User  newadmin_user  TestPwd123     Administrator   ${True}
229    Redfish Verify User  readonly_user  TestPwd123     Administrator   ${True}
230
231    # Delete created users.
232    Redfish.Delete  /redfish/v1/AccountService/Accounts/newadmin_user
233    Redfish.Delete  /redfish/v1/AccountService/Accounts/readonly_user
234
235
236Verify Modifying Operator User Attributes
237    [Documentation]  Verify modifying operator user attributes.
238    [Tags]  Verify_Modifying_Operator_User_Attributes
239    [Setup]  Run Keywords  Redfish.Login  AND
240    ...  Redfish Create User  operator_user  TestPwd123  Operator  ${True}
241    [Teardown]  Run Keywords  Redfish.Delete  /redfish/v1/AccountService/Accounts/operator_user
242    ...  AND  Test Teardown Execution
243
244    # Update operator_user password using Redfish.
245    ${payload}=  Create Dictionary  Password=NewTestPwd123
246    Redfish.Patch  /redfish/v1/AccountService/Accounts/operator_user  body=&{payload}
247    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
248
249    # Verify users after updating
250    Redfish Verify User  operator_user  NewTestPwd123  Operator        ${True}
251
252
253Verify User Account Locked
254    [Documentation]  Verify user account locked upon trying with invalid password.
255    [Tags]  Verify_User_Account_Locked
256
257    Redfish Create User  admin_user  TestPwd123  Administrator   ${True}
258
259    ${payload}=  Create Dictionary  AccountLockoutThreshold=${account_lockout_threshold}
260    ...  AccountLockoutDuration=${account_lockout_duration}
261    Redfish.Patch  ${REDFISH_ACCOUNTS_SERVICE_URI}  body=${payload}
262    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
263
264    Redfish.Logout
265
266    # Make ${account_lockout_threshold} failed login attempts.
267    Repeat Keyword  ${account_lockout_threshold} times
268    ...  Run Keyword And Expect Error  *InvalidCredentialsError*  Redfish.Login  admin_user  abcd1234
269
270    # Verify that legitimate login fails due to lockout.
271    Run Keyword And Expect Error  *InvalidCredentialsError*
272    ...  Redfish.Login  admin_user  TestPwd123
273
274    # Wait for lockout duration to expire and adding 5 sec delay to the account lock timeout
275    # ... then verify that login works.
276    ${total_wait_duartion}=  Evaluate  ${account_lockout_duration} + 5
277    Sleep  ${total_wait_duartion}s
278
279    Redfish.Login  admin_user  TestPwd123
280
281    Redfish.Logout
282
283    Redfish.Login
284
285    Redfish.Delete  /redfish/v1/AccountService/Accounts/admin_user
286
287
288Verify User Account Unlock
289    [Documentation]  Verify manually unlocking the account before lockout time
290    [Tags]  Verify_User_Account_Unlock
291    [Teardown]  Run Keywords  SSHLibrary.Close All Connections
292    ...  AND  Redfish.Logout
293    ...  AND  Redfish.Login
294    ...  AND  Redfish.Delete  /redfish/v1/AccountService/Accounts/test_user
295
296    Redfish Create User  test_user  TestPwd123  Administrator  ${True}
297
298    ${payload}=  Create Dictionary
299    ...  AccountLockoutThreshold=${account_lockout_threshold}
300    ...  AccountLockoutDuration=${account_lockout_duration}
301    Redfish.Patch  ${REDFISH_ACCOUNTS_SERVICE_URI}  body=${payload}
302    ...  valid_status_codes=[${HTTP_OK},${HTTP_NO_CONTENT}]
303
304    Redfish.Logout
305
306    # Make ${account_lockout_threshold} failed login attempts.
307    Repeat Keyword  ${account_lockout_threshold} times
308    ...  Run Keyword And Expect Error  InvalidCredentialsError*
309    ...  Redfish.Login  test_user  abc123
310
311    # Ensure SSH Login with locked account gets failed
312    SSHLibrary.Open Connection  ${OPENBMC_HOST}
313    Run Keyword And Expect Error  Authentication failed*
314    ...  SSHLibrary.Login  test_user  TestPwd123
315
316    # Verify that legitimate login fails due to lockout.
317    Run Keyword And Expect Error  InvalidCredentialsError*
318    ...  Redfish.Login  test_user  TestPwd123
319
320    ${payload}=  Create Dictionary  Locked=${FALSE}
321
322    # Manually unlock the account before lockout threshold expires
323    Redfish.Login
324    Redfish.Patch  ${REDFISH_ACCOUNTS_URI}test_user  body=${payload}
325    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
326    Redfish.Logout
327
328    # Try redfish login with the recently unlocked account
329    Redfish.Login  test_user  TestPwd123
330
331    # Try SSH login with the unlocked account
332    SSHLibrary.Open Connection  ${OPENBMC_HOST}
333    SSHLibrary.Login  test_user  TestPwd123
334
335
336Verify Admin User Privilege
337    [Documentation]  Verify admin user privilege.
338    [Tags]  Verify_Admin_User_Privilege
339
340    Redfish Create User  admin_user  TestPwd123  Administrator  ${True}
341    Redfish Create User  readonly_user  TestPwd123  ReadOnly  ${True}
342
343    Redfish.Logout
344
345    Redfish.Login  admin_user  TestPwd123
346
347    # Change password of 'readonly' user with admin user.
348    Redfish.Patch  /redfish/v1/AccountService/Accounts/readonly_user  body={'Password': 'NewTestPwd123'}
349    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
350
351    # Verify modified user.
352    Redfish Verify User  readonly_user  NewTestPwd123  ReadOnly  ${True}
353
354    # Note: Delete user would work here because a root login is
355    # performed as part of "Redfish Verify User" keyword's teardown.
356    Redfish.Delete  /redfish/v1/AccountService/Accounts/admin_user
357    Redfish.Delete  /redfish/v1/AccountService/Accounts/readonly_user
358
359
360Verify Operator User Role Change Using Admin Privilege User
361    [Documentation]  Verify operator user role change using admin privilege user
362    [Tags]  Verify_Operator_User_Role_Change_Using_Admin_Privilege_User
363
364    Redfish Create User  admin_user  TestPwd123  Administrator  ${True}
365    Redfish Create User  operator_user  TestPwd123  Operator  ${True}
366
367    Redfish.Logout
368
369    # Change role ID of operator user with admin user.
370    # Login with admin user.
371    Redfish.Login  admin_user  TestPwd123
372
373    # Modify Role ID of Operator user.
374    Redfish.Patch  /redfish/v1/AccountService/Accounts/operator_user  body={'RoleId': 'Administrator'}
375    ...  valid_status_codes=[${HTTP_OK},${HTTP_NO_CONTENT}]
376
377    # Verify modified user.
378    Redfish Verify User  operator_user  TestPwd123  Administrator  ${True}
379
380    Redfish.Delete  /redfish/v1/AccountService/Accounts/admin_user
381    Redfish.Delete  /redfish/v1/AccountService/Accounts/operator_user
382
383
384Verify Operator User Privilege
385    [Documentation]  Verify operator user privilege.
386    [Tags]  Verify_Operator_User_Privilege
387
388    Redfish Create User  admin_user  TestPwd123  Administrator  ${True}
389    Redfish Create User  operator_user  TestPwd123  Operator  ${True}
390
391    Redfish.Logout
392    # Login with operator user.
393    Redfish.Login  operator_user  TestPwd123
394
395    # Verify BMC reset.
396    Run Keyword And Expect Error  ValueError*  Redfish BMC Reset Operation
397
398    # Attempt to change password of admin user with operator user.
399    Redfish.Patch  /redfish/v1/AccountService/Accounts/admin_user  body={'Password': 'NewTestPwd123'}
400    ...  valid_status_codes=[${HTTP_FORBIDDEN}]
401
402    Redfish.Logout
403
404    Redfish.Login
405
406    Redfish.Delete  /redfish/v1/AccountService/Accounts/admin_user
407    Redfish.Delete  /redfish/v1/AccountService/Accounts/operator_user
408
409
410Verify ReadOnly User Privilege
411    [Documentation]  Verify ReadOnly user privilege.
412    [Tags]  Verify_ReadOnly_User_Privilege
413
414    Redfish Create User  readonly_user  TestPwd123  ReadOnly  ${True}
415    Redfish.Logout
416
417    # Login with read_only user.
418    Redfish.Login  readonly_user  TestPwd123
419
420    # Read system level data.
421    ${system_model}=  Redfish_Utils.Get Attribute
422    ...  ${SYSTEM_BASE_URI}  Model
423
424    Redfish.Logout
425    Redfish.Login
426    Redfish.Delete  ${REDFISH_ACCOUNTS_URI}readonly_user
427
428
429Verify Minimum Password Length For Redfish Admin And Readonly User
430    [Documentation]  Verify minimum password length for new and existing admin or
431    ...  readonly user.
432    [Template]  Verify Minimum Password Length For Redfish User
433
434    #username        role_id
435    admin_user       Administrator
436    readonly_user    ReadOnly
437
438
439Verify Standard User Roles Defined By Redfish
440    [Documentation]  Verify standard user roles defined by Redfish.
441    [Tags]  Verify_Standard_User_Roles_Defined_By_Redfish
442
443    ${member_list}=  Redfish_Utils.Get Member List
444    ...  /redfish/v1/AccountService/Roles
445
446    @{roles}=  Create List
447    ...  /redfish/v1/AccountService/Roles/Administrator
448    ...  /redfish/v1/AccountService/Roles/Operator
449    ...  /redfish/v1/AccountService/Roles/ReadOnly
450
451    List Should Contain Sub List  ${member_list}  ${roles}
452
453    # The standard roles are:
454
455    # | Role name | Assigned privileges |
456    # | Administrator | Login, ConfigureManager, ConfigureUsers, ConfigureComponents, ConfigureSelf |
457    # | Operator | Login, ConfigureComponents, ConfigureSelf |
458    # | ReadOnly | Login, ConfigureSelf |
459
460    @{admin}=  Create List  Login  ConfigureManager  ConfigureUsers  ConfigureComponents  ConfigureSelf
461    @{operator}=  Create List  Login  ConfigureComponents  ConfigureSelf
462    @{readOnly}=  Create List  Login  ConfigureSelf
463
464    ${roles_dict}=  create dictionary  admin_privileges=${admin}  operator_privileges=${operator}
465    ...  readOnly_privileges=${readOnly}
466
467    ${resp}=  redfish.Get  /redfish/v1/AccountService/Roles/Administrator
468    List Should Contain Sub List  ${resp.dict['AssignedPrivileges']}  ${roles_dict['admin_privileges']}
469
470    ${resp}=  redfish.Get  /redfish/v1/AccountService/Roles/Operator
471    List Should Contain Sub List  ${resp.dict['AssignedPrivileges']}  ${roles_dict['operator_privileges']}
472
473    ${resp}=  redfish.Get  /redfish/v1/AccountService/Roles/ReadOnly
474    List Should Contain Sub List  ${resp.dict['AssignedPrivileges']}  ${roles_dict['readOnly_privileges']}
475
476
477Verify Error While Deleting Root User
478    [Documentation]  Verify error while deleting root user.
479    [Tags]  Verify_Error_While_Deleting_Root_User
480
481    Redfish.Delete  /redfish/v1/AccountService/Accounts/root  valid_status_codes=[${HTTP_FORBIDDEN}]
482
483
484Verify SSH Login Access With Admin User
485    [Documentation]  Verify that admin user have SSH login access.
486    ...              By default, admin should have access but there could be
487    ...              case where admin user shell access is restricted by design
488    ...              in the community sphere..
489    [Tags]  Verify_SSH_Login_Access_With_Admin_User
490
491    #Create an admin user and verify SSH login.
492    Create Admin User And Verify SSH Login
493
494    Redfish.Login
495    Redfish.Delete  /redfish/v1/AccountService/Accounts/new_admin
496
497Verify SSH Login Is Revoked For Deleted User
498    [Documentation]  Verify SSH login access is revoked for deleted User.
499    [Tags]    Verify_SSH_Login_Is_Revoked_For_Deleted_User
500
501    #Create an admin user and verify SSH login.
502    Create Admin User And Verify SSH Login
503
504    #Login with root user.
505    Redfish.Login
506
507    # Delete the admin user.
508    Redfish.Delete  /redfish/v1/AccountService/Accounts/new_admin
509    ...  valid_status_codes=[${HTTP_OK}]
510
511    # Attempt SSH login with Deleted user.
512    SSHLibrary.Open Connection  ${OPENBMC_HOST}
513    Run Keyword And Expect Error  Authentication failed*
514    ...  SSHLibrary.Login  new_admin  TestPwd1
515
516Verify Configure BasicAuth Enable And Disable
517    [Documentation]  Verify configure basicauth enable and disable
518    [Tags]  Verify_Configure_BasicAuth_Enable_And_Disable
519    [Template]  Template For Configure Auth Methods
520
521    # auth_method
522    BasicAuth
523    XToken
524
525
526Redfish Create and Verify Admin User With Invalid Password Format
527    [Documentation]  Create a admin user with invalid password format and verify.
528    [Template]  Create User With Unsupported Password Format And Verify
529    [Tags]  Redfish_Create_and_Verify_Admin_User_With_Invalid_Password_Format
530
531    #username       role_id        password
532    admin_user      Administrator  snellens
533    admin_user      Administrator  10000001
534    admin_user      Administrator  12345678
535    admin_user      Administrator  abcdefgh
536    admin_user      Administrator  abf12345
537    admin_user      Administrator  helloworld
538    admin_user      Administrator  HELLOWORLD
539    admin_user      Administrator  &$%**!*@
540    admin_user      Administrator  Dictation
541
542
543Redfish Create and Verify Readonly User With Invalid Password Format
544    [Documentation]  Create a readonly user with invalid password format and verify.
545    [Template]  Create User With Unsupported Password Format And Verify
546    [Tags]  Redfish_Create_and_Verify_Readonly_User_With_Invalid_Password_Format
547
548    #username       role_id        password
549    readonly_user   ReadOnly       snellens
550    readonly_user   ReadOnly       10000001
551    readonly_user   ReadOnly       12345678
552    readonly_user   ReadOnly       abcdefgh
553    readonly_user   ReadOnly       abf12345
554    readonly_user   ReadOnly       helloworld
555    readonly_user   ReadOnly       HELLOWORLD
556    readonly_user   ReadOnly       &$%**!*@
557    readonly_user   ReadOnly       Dictation
558
559
560Verify Admin And Readonly User Password Is Not Same As Username
561    [Documentation]  Verify that admin and readonly user creation is failed if
562    ...  password is same as username.
563    [Template]  Create User With Unsupported Password Format And Verify
564    [Tags]      Verify_Admin_And_Readonly_User_Password_Is_Not_Same_As_Username
565
566    #username        role_id             password
567    AdminUser1       Administrator       AdminUser1
568    ReadOnlyUser1    ReadOnly            ReadOnlyUser1
569
570Verify AccountService Unsupported Methods
571    [Documentation]  Verify Unsupported methods of AccountService
572    [Tags]  Verify_AccountService_Unsupported_Methods
573
574    # Put operation on Account Services
575    Redfish.Put  /redfish/v1/AccountService
576    ...    valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
577
578    # Post operation on Account Services
579    Redfish.Post  /redfish/v1/AccountService
580    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
581
582    # Delete operation on Account Services
583    Redfish.Delete  /redfish/v1/AccountService
584    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
585
586Verify AccountService Roles Unsupported Methods
587    [Documentation]  Verify Unsupported methods of AccountService/Roles
588    [Tags]  Verify_AccountService_Roles_Unsupported_Methods
589
590    # Put operation on Account Services Roles
591    Redfish.Put  /redfish/v1/AccountService/Roles
592    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
593
594    # Post operation on Account Services Roles
595    Redfish.Post  /redfish/v1/AccountService/Roles
596    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
597
598    # Delete operation on Account Services Roles
599    Redfish.Delete  /redfish/v1/AccountService/Roles
600    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
601
602    # Patch operation on Account Services Roles
603    Redfish.Patch  /redfish/v1/AccountService/Roles
604    ...  valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
605
606Verify AccountService Roles Instance With Unsupported Methods
607    [Documentation]  Verify Instance Roles for AccountService and Unsupported Methods
608    [Tags]    Verify_AccountService_Roles_Instance_With_Unsupported_Methods
609
610    # GET Administrator Role Instance
611    Redfish.Get    /redfish/v1/AccountService/Roles/Administrator
612    ...    valid_status_codes=[${HTTP_OK}]
613
614    # GET Operator Role Instance
615    Redfish.Get    /redfish/v1/AccountService/Roles/Operator
616    ...    valid_status_codes=[${HTTP_OK}]
617
618    # GET ReadOnly RoleInstance
619    Redfish.Get    /redfish/v1/AccountService/Roles/ReadOnly
620    ...    valid_status_codes=[${HTTP_OK}]
621
622    # Post operation on Account Service Roles Instance
623    Redfish.Post    /redfish/v1/AccountService/Roles/Administrator
624    ...    valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
625
626    # Put operation on Account Service Roles Instance
627    Redfish.Put    /redfish/v1/AccountService/Roles/Administrator
628    ...    valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
629
630    # Patch operation on Account Service Roles Instance
631    Redfish.Patch    /redfish/v1/AccountService/Roles/Administrator
632    ...    valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
633
634    #Delete operation on Account Service Roles Instance
635    Redfish.Delete    /redfish/v1/AccountService/Roles/Administrator
636    ...    valid_status_codes=[${HTTP_METHOD_NOT_ALLOWED}]
637
638Verify Account Lockout With Invalid Configuration
639    [Documentation]  Verify Account Lockout configuration with invalid values.
640    [Tags]  Verify_Account_Lockout_With_Invalid_Configuration
641
642    @{invalid_values_list}=  Create List  -1  abc  3.5  ${EMPTY}
643
644    FOR  ${invalid_value}  IN  @{invalid_values_list}
645        ${payload}=  Create Dictionary  AccountLockoutThreshold=${invalid_value}
646        Redfish.Patch  ${REDFISH_ACCOUNTS_SERVICE_URI}  body=${payload}
647        ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
648
649        ${payload}=  Create Dictionary  AccountLockoutDuration=${invalid_value}
650        Redfish.Patch  ${REDFISH_ACCOUNTS_SERVICE_URI}  body=${payload}
651        ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
652
653        ${payload}=  Create Dictionary  AccountLockoutThreshold=${account_lockout_threshold}
654        ...  AccountLockoutDuration=${invalid_value}
655        Redfish.Patch  ${REDFISH_ACCOUNTS_SERVICE_URI}  body=${payload}
656        ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
657
658        ${payload}=  Create Dictionary  AccountLockoutThreshold=${invalid_value}
659        ...  AccountLockoutDuration=${account_lockout_duration}
660        Redfish.Patch  ${REDFISH_ACCOUNTS_SERVICE_URI}  body=${payload}
661        ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
662    END
663
664*** Keywords ***
665
666Test Teardown Execution
667    [Documentation]  Do the post test teardown.
668
669    Run Keyword And Ignore Error  Redfish.Logout
670    FFDC On Test Case Fail
671
672
673Redfish Create User
674    [Documentation]  Redfish create user.
675    [Arguments]   ${username}  ${password}  ${role_id}  ${enabled}  ${login_check}=${True}
676
677    # Description of argument(s):
678    # username            The username to be created.
679    # password            The password to be assigned.
680    # role_id             The role ID of the user to be created
681    #                     (e.g. "Administrator", "Operator", etc.).
682    # enabled             Indicates whether the username being created
683    #                     should be enabled (${True}, ${False}).
684    # login_check         Checks user login for created user.
685    #                     (e.g. ${True}, ${False}).
686
687    # Make sure the user account in question does not already exist.
688    Redfish.Delete  /redfish/v1/AccountService/Accounts/${userName}
689    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
690
691    # Create specified user.
692    ${payload}=  Create Dictionary
693    ...  UserName=${username}  Password=${password}  RoleId=${role_id}  Enabled=${enabled}
694    Redfish.Post  /redfish/v1/AccountService/Accounts/  body=&{payload}
695    ...  valid_status_codes=[${HTTP_CREATED}]
696
697    # Resetting faillock count as a workaround for issue
698    # openbmc/phosphor-user-manager#4
699    ${cmd}=  Catenate  /usr/sbin/faillock --user ${username} --reset
700
701    Bmc Execute Command  ${cmd}
702
703    # Verify login with created user.
704    IF  '${login_check}' == '${True}'
705        ${status}=  Run Keyword And Return Status
706        ...  Verify Redfish User Login  ${username}  ${password}
707    ELSE
708        ${status}=  Set Variable  ${False}
709    END
710
711    IF  '${login_check}' == '${True}'  Should Be Equal  ${status}  ${enabled}
712
713    # Validate Role ID of created user.
714    ${role_config}=  Redfish_Utils.Get Attribute
715    ...  /redfish/v1/AccountService/Accounts/${username}  RoleId
716    Should Be Equal  ${role_id}  ${role_config}
717
718
719Redfish Verify User
720    [Documentation]  Redfish user verification.
721    [Arguments]   ${username}  ${password}  ${role_id}  ${enabled}
722
723    # Description of argument(s):
724    # username            The username to be created.
725    # password            The password to be assigned.
726    # role_id             The role ID of the user to be created
727    #                     (e.g. "Administrator", "Operator", etc.).
728    # enabled             Indicates whether the username being created
729    #                     should be enabled (${True}, ${False}).
730
731    ${status}=  Verify Redfish User Login  ${username}  ${password}
732    # Doing a check of the returned status.
733    Should Be Equal  ${status}  ${enabled}
734
735    # Validate Role Id of user.
736    ${role_config}=  Redfish_Utils.Get Attribute
737    ...  /redfish/v1/AccountService/Accounts/${username}  RoleId
738    Should Be Equal  ${role_id}  ${role_config}
739
740
741Verify Redfish User Login
742    [Documentation]  Verify Redfish login with given user id.
743    [Teardown]  Run Keywords  Run Keyword And Ignore Error  Redfish.Logout  AND  Redfish.Login
744    [Arguments]   ${username}  ${password}
745
746    # Description of argument(s):
747    # username            Login username.
748    # password            Login password.
749
750    # Logout from current Redfish session.
751    # We don't really care if the current session is flushed out since we are going to login
752    # with new credential in next.
753    Run Keyword And Ignore Error  Redfish.Logout
754
755    ${status}=  Run Keyword And Return Status  Redfish.Login  ${username}  ${password}
756    RETURN  ${status}
757
758
759Redfish Create And Verify User
760    [Documentation]  Redfish create and verify user.
761    [Arguments]   ${username}  ${password}  ${role_id}  ${enabled}
762
763    # Description of argument(s):
764    # username            The username to be created.
765    # password            The password to be assigned.
766    # role_id             The role ID of the user to be created
767    #                     (e.g. "Administrator", "Operator", etc.).
768    # enabled             Indicates whether the username being created
769    #                     should be enabled (${True}, ${False}).
770
771    # Example:
772    #{
773    #"@odata.context": "/redfish/v1/$metadata#ManagerAccount.ManagerAccount",
774    #"@odata.id": "/redfish/v1/AccountService/Accounts/test1",
775    #"@odata.type": "#ManagerAccount.v1_0_3.ManagerAccount",
776    #"Description": "User Account",
777    #"Enabled": true,
778    #"Id": "test1",
779    #"Links": {
780    #  "Role": {
781    #    "@odata.id": "/redfish/v1/AccountService/Roles/Administrator"
782    #  }
783    #},
784
785    Redfish Create User  ${username}  ${password}  ${role_id}  ${enabled}
786
787    Redfish Verify User  ${username}  ${password}  ${role_id}  ${enabled}
788
789    # Delete Specified User
790    Redfish.Delete  /redfish/v1/AccountService/Accounts/${username}
791
792Verify Redfish User Login With Wrong Password
793    [Documentation]  Verify Redfish User failed to login with wrong password.
794    [Arguments]   ${username}  ${password}  ${role_id}  ${enabled}  ${wrong_password}
795
796    # Description of argument(s):
797    # username            The username to be created.
798    # password            The password to be assigned.
799    # role_id             The role ID of the user to be created
800    #                     (e.g. "Administrator", "Operator", etc.).
801    # enabled             Indicates whether the username being created
802    #                     should be enabled (${True}, ${False}).
803    # wrong_password      Any invalid password.
804
805    Redfish Create User  ${username}  ${password}  ${role_id}  ${enabled}
806
807    Redfish.Logout
808
809    # Attempt to login with created user with invalid password.
810    Run Keyword And Expect Error  InvalidCredentialsError*
811    ...  Redfish.Login  ${username}  ${wrong_password}
812
813    Redfish.Login
814
815    # Delete newly created user.
816    Redfish.Delete  /redfish/v1/AccountService/Accounts/${username}
817
818
819Verify Login with Deleted Redfish User
820    [Documentation]  Verify Login with Deleted Redfish User.
821    [Arguments]   ${username}  ${password}  ${role_id}  ${enabled}
822
823    # Description of argument(s):
824    # username            The username to be created.
825    # password            The password to be assigned.
826    # role_id             The role ID of the user to be created
827    #                     (e.g. "Administrator", "Operator", etc.).
828    # enabled             Indicates whether the username being created
829    #                     should be enabled (${True}, ${False}).
830
831    Redfish Create User  ${username}  ${password}  ${role_id}  ${enabled}
832
833    # Delete newly created user.
834    Redfish.Delete  /redfish/v1/AccountService/Accounts/${userName}
835
836    Redfish.Logout
837
838    # Attempt to login with deleted user account.
839    Run Keyword And Expect Error  InvalidCredentialsError*
840    ...  Redfish.Login  ${username}  ${password}
841
842    Redfish.Login
843
844
845Verify Create User Without Enabling
846    [Documentation]  Verify Create User Without Enabling.
847    [Arguments]   ${username}  ${password}  ${role_id}  ${enabled}
848
849    # Description of argument(s):
850    # username            The username to be created.
851    # password            The password to be assigned.
852    # role_id             The role ID of the user to be created
853    #                     (e.g. "Administrator", "Operator", etc.).
854    # enabled             Indicates whether the username being created
855    #                     should be enabled (${True}, ${False}).
856
857    Redfish Create User  ${username}  ${password}  ${role_id}  ${enabled}  ${False}
858
859    Redfish.Logout
860
861    # Login with created user.
862    Run Keyword And Expect Error  InvalidCredentialsError*
863    ...  Redfish.Login  ${username}  ${password}
864
865    Redfish.Login
866
867    # Delete newly created user.
868    Redfish.Delete  /redfish/v1/AccountService/Accounts/${username}
869
870Template For Configure Auth Methods
871    [Documentation]  Template to configure auth methods.
872    [Arguments]  ${auth_method}
873    [Teardown]  Configure AuthMethods  ${auth_method}=${initial_value}
874
875    # Description of Argument(s):
876    # authmethods   The authmethod setting which needs to be
877    #               set in account service URI.
878    # valid values  BasicAuth, XToken.
879
880    Get AuthMethods Default Values  ${auth_method}
881
882    # Patch basicauth to TRUE
883    Configure AuthMethods  ${auth_method}=${TRUE}
884
885    IF  "${auth_method}" == "XToken"
886        Check XToken Works Fine  ${HTTP_OK}
887    ELSE
888        Check BasicAuth Works Fine  ${HTTP_OK}
889    END
890
891    # Patch basicauth to FALSE
892    Configure AuthMethods  ${auth_method}=${FALSE}
893
894    IF  "${auth_method}" == "BasicAuth"
895        Check BasicAuth Works Fine  ${HTTP_UNAUTHORIZED}
896    ELSE
897        Check XToken Works Fine  ${HTTP_UNAUTHORIZED}
898    END
899
900Configure AuthMethods
901    [Documentation]  Enable/disable authmethod types.
902    [Arguments]  &{authmethods}
903
904    # Description of argument(s):
905    # authmethods            The authmethod setting which needs to be
906    #                        set in account service URI.
907    # Usage Example          Configure AuthMethods  XToken=${TRUE}  BasicAuth=${TRUE}
908    #                        This will set the value of "XToken" and "BasicAuth"
909    #                        property in accountservice uri to TRUE.
910
911    ${openbmc}=  Create Dictionary  AuthMethods=${authmethods}
912    ${oem}=  Create Dictionary  OpenBMC=${openbmc}
913    ${payload}=  Create Dictionary  Oem=${oem}
914
915    # Setting authmethod properties using Redfish session based auth
916    ${status}=  Run Keyword And Return Status
917    ...  Redfish.Patch  ${REDFISH_BASE_URI}AccountService
918    ...  body=${payload}  valid_status_codes=[${HTTP_OK},${HTTP_NO_CONTENT}]
919
920    # Setting authmethod properties using basic auth in case the former fails
921    IF  ${status}==${FALSE}
922        # Payload dictionary pre-process to match json formatting
923        ${payload}=  Convert To String  ${payload}
924        ${payload}=  Replace String  ${payload}  '  "
925        ${payload}=  Replace String  ${payload}  False  false
926        ${payload}=  Replace String  ${payload}  True  true
927
928        # Curl Command Framing for PATCH authmethod
929        ${cmd}=  Catenate  curl -k -i -u ${OPENBMC_USERNAME}:${OPENBMC_PASSWORD}
930        ...  -X PATCH '${AUTH_URI}${REDFISH_ACCOUNTS_SERVICE_URI}'
931        ...  -H 'content-type:application/json' -H 'If-Match:*'
932        ...  -d '${payload}'
933        ${rc}  ${out}=  Run And Return Rc And Output  ${cmd}
934
935        #  Check the response of curl command is 200 or 204
936        ${check_no_content}=
937        ...  Run Keyword and Return Status  Should Contain  ${out}  204
938        ${check_ok}=
939        ...  Run Keyword and Return Status  Should Contain  ${out}  200
940        Pass Execution If  ${check_no_content}==${TRUE}
941        ...  OR  ${check_ok}==${TRUE}
942    END
943
944
945Get AuthMethods Default Values
946    [Documentation]  Get enabled/disabled status of all authmethods
947    ...  from Redfish account service URI
948    [Arguments]  ${authmethod}
949
950    # Description of argument(s):
951    # authmethod            The authmethod property whose value needs to be
952    #                       retrieved from account service URI.
953    # Usage Example         Get AuthMethods Default Values  BasicAuth
954    #                       returns >> ${TRUE}
955    # Example:
956    # {
957    #     "@odata.id": "/redfish/v1/AccountService",
958    #     (...)
959    #     "Oem": {
960    #         "OpenBMC": {
961    #             "AuthMethods": {
962    #                 "BasicAuth": true,
963    #                 "Cookie": true,
964    #                 "SessionToken": true,
965    #                 "TLS": true,
966    #                 "XToken": true
967    #             }
968    #         }
969    #     }
970    # }
971
972    ${resp}=  Redfish.Get Attribute  ${REDFISH_ACCOUNTS_SERVICE_URI}  Oem
973    ${authmethods}=  Set Variable  ${resp['OpenBMC']['AuthMethods']}
974    ${initial_value}=  Get From Dictionary  ${authmethods}  ${authmethod}
975    Set Test Variable  ${initial_value}
976
977Check XToken Works Fine
978    [Documentation]  Verify Xtoken works fine.
979    [Arguments]  ${status_code}
980
981    # Description of Argument(s):
982    # status_code : 200, 401.
983
984    # Verify xtoken auth works for xtoken
985    Redfish.Get  ${REDFISH_ACCOUNTS_SERVICE_URI}
986    ...  valid_status_codes=[${status_code}]
987
988Check BasicAuth Works Fine
989    [Documentation]  Verify Basic Auth works fine.
990    [Arguments]  ${status_code}
991
992    # Description of Argument(s):
993    # status_code : 200, 401.
994
995    # Verify basic auth works based on basic auth.
996    ${cmd}=  Catenate  curl -k -i -u ${OPENBMC_USERNAME}:${OPENBMC_PASSWORD}
997    ...  ${AUTH_URI}/redfish/v1/AccountService
998    ${rc}  ${out}=  Run And Return Rc And Output  ${cmd}
999
1000    #  Check the response of curl command is 200/401
1001    Should Contain  ${out}  ${status_code}
1002
1003
1004Create User With Unsupported Password Format And Verify
1005   [Documentation]  Create admin or readonly user with unsupported password format
1006   ...  and verify.
1007   [Arguments]   ${username}  ${role_id}  ${password}
1008
1009   # Description of argument(s):
1010   # username            The username to be created.
1011   # role_id             The role ID of the user to be created
1012   #                     (e.g. "Administrator", "ReadOnly").
1013   # password            The password to be assigned.
1014   #                     Unsupported password format are sequential characters,
1015   #                     sequential digits, palindrome digits, palindrome characters,
1016   #                     only uppercase letters, only lowercase letters, only digits,
1017   #                     only characters, not a dictionary word, username and password
1018   #                     should not be same.
1019
1020   # Make sure the user account in question does not already exist.
1021    Redfish.Delete  /redfish/v1/AccountService/Accounts/${userName}
1022    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
1023
1024   # Create specified user with invalid password format.
1025   ${payload}=  Create Dictionary
1026   ...  UserName=${username}  Password=${password}  RoleId=${role_id}  Enabled=${True}
1027   Redfish.Post  /redfish/v1/AccountService/Accounts/  body=&{payload}
1028   ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
1029
1030
1031Verify Minimum Password Length For Redfish User
1032    [Documentation]  Verify minimum password length for new and existing admin or
1033    ...  readonly user.
1034    [Arguments]  ${user_name}  ${role_id}
1035
1036    # Description of argument(s):
1037    # user_name           The username to be created.
1038    # role_id             The role ID of the user to be created.
1039
1040    # Make sure the user account in question does not already exist.
1041    Redfish.Delete  /redfish/v1/AccountService/Accounts/${user_name}
1042    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
1043
1044    # Try to create a user with invalid length password.
1045    ${payload}=  Create Dictionary
1046    ...  UserName=${user_name}  Password=UserPwd  RoleId=${role_id}  Enabled=${True}
1047    Redfish.Post  /redfish/v1/AccountService/Accounts/  body=&{payload}
1048    ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
1049
1050    # Create specified user with valid length password.
1051    Set To Dictionary  ${payload}  Password  UserPwd1
1052    Redfish.Post  /redfish/v1/AccountService/Accounts/  body=&{payload}
1053    ...  valid_status_codes=[${HTTP_CREATED}]
1054
1055    # Try to change to an invalid password.
1056    Redfish.Patch  /redfish/v1/AccountService/Accounts/${user_name}  body={'Password': 'UserPwd'}
1057    ...  valid_status_codes=[${HTTP_BAD_REQUEST}]
1058
1059    # Change to a valid password.
1060    Redfish.Patch  /redfish/v1/AccountService/Accounts/${user_name}  body={'Password': 'UserPwd1'}
1061    ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]
1062
1063    # Verify login.
1064    Redfish.Logout
1065    Redfish.Login  ${user_name}  UserPwd1
1066    Redfish.Logout
1067    Redfish.Login
1068    Redfish.Delete  /redfish/v1/AccountService/Accounts/${user_name}
1069
1070Create Admin User And Verify SSH Login
1071    [Documentation]  Create admin user and verify SSH login & logout.
1072
1073    # Create an admin User.
1074    Redfish Create User  new_admin  TestPwd1  Administrator  ${True}
1075
1076    # Attempt SSH login with admin user.
1077    SSHLibrary.Open Connection  ${OPENBMC_HOST}
1078    ${status}=  Run Keyword And Return Status  SSHLibrary.Login  new_admin  TestPwd1
1079
1080    # By default ssh_status is True, user can change the status via CLI
1081    # -v ssh_status:False
1082    Should Be Equal As Strings  "${status}"  "${ssh_status}"
1083
1084    # Close SSH connection for admin user.
1085    SSHLibrary.Close Connection
1086