1*** Settings ***
2Documentation    Test Redfish LDAP user configuration.
3
4Library          ../../lib/gen_robot_valid.py
5Resource         ../../lib/bmc_redfish_resource.robot
6Resource         ../../lib/utils.robot
7Resource         ../../lib/openbmc_ffdc.robot
8Resource         ../../lib/bmc_network_utils.robot
9Resource         ../../lib/bmc_ldap_utils.robot
10
11Suite Setup      Suite Setup Execution
12Suite Teardown   LDAP Suite Teardown Execution
13Test Teardown    Run Keywords  Redfish.Login  AND  FFDC On Test Case Fail
14Force Tags       Ldap_Configuration
15
16*** Variables ***
17${old_ldap_privilege}   Administrator
18&{old_account_service}  &{EMPTY}
19&{old_ldap_config}      &{EMPTY}
20${hostname}             ${EMPTY}
21${test_ip}              10.6.6.6
22${test_mask}            255.255.255.0
23
24** Test Cases **
25
26Verify LDAP Configuration Created
27    [Documentation]  Verify that LDAP configuration created.
28    [Tags]  Verify_LDAP_Configuration_Created
29
30    Create LDAP Configuration
31    # Call 'Get LDAP Configuration' to verify that LDAP configuration exists.
32    Get LDAP Configuration  ${LDAP_TYPE}
33    Sleep  10s
34    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
35    Redfish.Logout
36
37
38Verify Redfish LDAP Service Disable
39    [Documentation]  Verify that LDAP is disabled and that LDAP user cannot
40    ...  login.
41    [Tags]  Verify_Redfish_LDAP_Service_Disable
42
43    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
44    ...  body={'${LDAP_TYPE}': {'ServiceEnabled': ${False}}}
45    Sleep  15s
46    ${resp}=  Run Keyword And Return Status  Redfish.Login  ${LDAP_USER}
47    ...  ${LDAP_USER_PASSWORD}
48    Should Be Equal  ${resp}  ${False}
49    ...  msg=LDAP user was able to login even though the LDAP service was disabled.
50    Redfish.Logout
51    Redfish.Login
52    # Enabling LDAP so that LDAP user works.
53    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
54    ...  body={'${LDAP_TYPE}': {'ServiceEnabled': ${True}}}
55    Redfish.Logout
56
57
58Verify LDAP Login With ServiceEnabled
59    [Documentation]  Verify that LDAP Login with ServiceEnabled.
60    [Tags]  Verify_LDAP_Login_With_ServiceEnabled
61
62    Disable Other LDAP
63    # Actual service enablement.
64    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
65    ...  body={'${LDAP_TYPE}': {'ServiceEnabled': ${True}}}
66    Sleep  15s
67    # After update, LDAP login.
68    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
69    Redfish.Logout
70
71
72Verify LDAP Login With Correct AuthenticationType
73    [Documentation]  Verify that LDAP Login with right AuthenticationType.
74    [Tags]  Verify_LDAP_Login_With_Correct_AuthenticationType
75
76    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
77    ...  body={'${ldap_type}': {'Authentication': {'AuthenticationType':'UsernameAndPassword'}}}
78    Sleep  15s
79    # After update, LDAP login.
80    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
81    Redfish.Logout
82
83
84Verify LDAP Config Update With Incorrect AuthenticationType
85    [Documentation]  Verify that invalid AuthenticationType is not updated.
86    [Tags]  Verify_LDAP_Config_Update_With_Incorrect_AuthenticationType
87
88    ${body}=  Catenate  {'${ldap_type}': {'Authentication': {'AuthenticationType':'KerberosKeytab'}}}
89
90    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
91    ...  body=${body}  valid_status_codes=[400]
92
93
94Verify LDAP Login With Correct LDAP URL
95    [Documentation]  Verify LDAP Login with right LDAP URL.
96    [Tags]  Verify_LDAP_Login_With_Correct_LDAP_URL
97
98    Config LDAP URL  ${LDAP_SERVER_URI}
99
100
101Verify LDAP Config Update With Incorrect LDAP URL
102    [Documentation]  Verify that LDAP Login fails with invalid LDAP URL.
103    [Tags]  Verify_LDAP_Config_Update_With_Incorrect_LDAP_URL
104    [Teardown]  Run Keywords  Restore LDAP URL  AND
105    ...  FFDC On Test Case Fail
106
107    Config LDAP URL  ldap://1.2.3.4/  ${FALSE}
108
109Verify LDAP Configuration Exist
110    [Documentation]  Verify that LDAP configuration is available.
111    [Tags]  Verify_LDAP_Configuration_Exist
112
113    ${resp}=  Redfish.Get Attribute  ${REDFISH_BASE_URI}AccountService
114    ...  ${LDAP_TYPE}  default=${EMPTY}
115    Should Not Be Empty  ${resp}  msg=LDAP configuration is not defined.
116
117
118Verify LDAP User Login
119    [Documentation]  Verify that LDAP user able to login into BMC.
120    [Tags]  Verify_LDAP_User_Login
121
122    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
123    Redfish.Logout
124
125
126Verify LDAP Service Available
127    [Documentation]  Verify that LDAP service is available.
128    [Tags]  Verify_LDAP_Service_Available
129
130    @{ldap_configuration}=  Get LDAP Configuration  ${LDAP_TYPE}
131    Should Contain  ${ldap_configuration}  LDAPService
132    ...  msg=LDAPService is not available.
133
134
135Verify LDAP Login Works After BMC Reboot
136    [Documentation]  Verify that LDAP login works after BMC reboot.
137    [Tags]  Verify_LDAP_Login_Works_After_BMC_Reboot
138
139    Redfish OBMC Reboot (off)
140    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
141    Redfish.Logout
142
143
144Verify LDAP User With Admin Privilege Able To Do BMC Reboot
145    [Documentation]  Verify that LDAP user with administrator privilege able to do BMC reboot.
146    [Tags]  Verify_LDAP_User_With_Admin_Privilege_Able_To_Do_BMC_Reboot
147
148
149    Update LDAP Configuration with LDAP User Role And Group  ${LDAP_TYPE}
150    ...  ${GROUP_PRIVILEGE}  ${GROUP_NAME}
151    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
152    # With LDAP user and with right privilege trying to do BMC reboot.
153    Redfish OBMC Reboot (off)
154    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
155    Redfish.Logout
156
157
158Verify LDAP User With Operator Privilege Able To Do Host Poweroff
159    [Documentation]  Verify that LDAP user with operator privilege can do host
160    ...  power off.
161    [Tags]  Verify_LDAP_User_With_Operator_Privilege_Able_To_Do_Host_Poweroff
162    [Teardown]  Restore LDAP Privilege
163
164    Update LDAP Configuration with LDAP User Role And Group  ${LDAP_TYPE}
165    ...  Operator  ${GROUP_NAME}
166
167    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
168    # Verify that the LDAP user with operator privilege is able to power the system off.
169    Redfish.Post  ${REDFISH_POWER_URI}
170    ...  body={'ResetType': 'ForceOff'}   valid_status_codes=[200]
171    Redfish.Logout
172    Redfish.Login
173
174
175Verify AccountLockout Attributes Set To Zero By LDAP User
176    [Documentation]  Verify that attribute AccountLockoutDuration and
177    ...  AccountLockoutThreshold are set to 0 by LDAP user.
178    [Teardown]  Run Keywords  Restore AccountLockout Attributes  AND
179    ...  FFDC On Test Case Fail
180    [Tags]  Verify_AccountLockout_Attributes_Set_To_Zero_By_LDAP_User
181
182    ${old_account_service}=  Redfish.Get Properties
183    ...  ${REDFISH_BASE_URI}AccountService
184    Rprint Vars  old_account_service
185
186    # Create LDAP user and create session using LDAP user.
187    Update LDAP Configuration with LDAP User Role And Group  ${LDAP_TYPE}
188    ...  Administrator  ${GROUP_NAME}
189
190    # Clear existing Redfish sessions.
191    Redfish.Logout
192
193    # Login using LDAP user.
194    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
195
196    # Set Account Lockout attributes using LDAP user.
197    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
198    ...  body=[('AccountLockoutDuration', 0)]
199    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
200    ...  body=[('AccountLockoutThreshold', 0)]
201
202
203Verify LDAP User With Read Privilege Able To Check Inventory
204    [Documentation]  Verify that LDAP user with read privilege able to
205    ...  read firmware inventory.
206    [Tags]  Verify_LDAP_User_With_Read_Privilege_Able_To_Check_Inventory
207    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND  Restore LDAP Privilege
208    [Template]  Set Read Privilege And Check Firmware Inventory
209
210    ReadOnly
211
212
213Verify LDAP User With Read Privilege Should Not Do Host Poweron
214    [Documentation]  Verify that LDAP user with read privilege should not be
215    ...  allowed to power on the host.
216    [Tags]  Verify_LDAP_User_With_Read_Privilege_Should_Not_Do_Host_Poweron
217    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND  Restore LDAP Privilege
218    [Template]  Set Read Privilege And Check Poweron
219
220    ReadOnly
221
222
223Update LDAP Group Name And Verify Operations
224    [Documentation]  Verify that LDAP group name update and able to do right
225    ...  operations.
226    [Tags]  Update_LDAP_Group_Name_And_Verify_Operations
227    [Template]  Update LDAP Config And Verify Set Host Name
228    [Teardown]  Restore LDAP Privilege
229
230    # group_name             group_privilege  valid_status_codes
231    ${GROUP_NAME}            Administrator    [${HTTP_OK}, ${HTTP_NO_CONTENT}]
232    ${GROUP_NAME}            Operator         [${HTTP_OK}, ${HTTP_NO_CONTENT}]
233    ${GROUP_NAME}            ReadOnly         [${HTTP_UNAUTHORIZED}, ${HTTP_FORBIDDEN}]
234    Invalid_LDAP_Group_Name  Administrator    [${HTTP_UNAUTHORIZED}, ${HTTP_FORBIDDEN}]
235    Invalid_LDAP_Group_Name  Operator         [${HTTP_UNAUTHORIZED}, ${HTTP_FORBIDDEN}]
236    Invalid_LDAP_Group_Name  ReadOnly         [${HTTP_UNAUTHORIZED}, ${HTTP_FORBIDDEN}]
237
238
239Verify LDAP BaseDN Update And LDAP Login
240    [Documentation]  Update LDAP BaseDN of LDAP configuration and verify
241    ...  that LDAP login works.
242    [Tags]  Verify_LDAP_BaseDN_Update_And_LDAP_Login
243
244
245    ${body}=  Catenate  {'${LDAP_TYPE}': { 'LDAPService': {'SearchSettings':
246    ...   {'BaseDistinguishedNames': ['${LDAP_BASE_DN}']}}}}
247    Redfish.Patch  ${REDFISH_BASE_URI}AccountService  body=${body}
248    Sleep  15s
249    Redfish Verify LDAP Login
250
251
252Verify LDAP BindDN Update And LDAP Login
253    [Documentation]  Update LDAP BindDN of LDAP configuration and verify
254    ...  that LDAP login works.
255    [Tags]  Verify_LDAP_BindDN_Update_And_LDAP_Login
256
257    ${body}=  Catenate  {'${LDAP_TYPE}': { 'Authentication':
258    ...   {'AuthenticationType':'UsernameAndPassword', 'Username':
259    ...  '${LDAP_BIND_DN}'}}}
260    Redfish.Patch  ${REDFISH_BASE_URI}AccountService  body=${body}
261    Sleep  15s
262    Redfish Verify LDAP Login
263
264
265Verify LDAP BindDN Password Update And LDAP Login
266    [Documentation]  Update LDAP BindDN password of LDAP configuration and
267    ...  verify that LDAP login works.
268    [Tags]  Verify_LDAP_BindDN_Password_Update_And_LDAP_Login
269
270
271    ${body}=  Catenate  {'${LDAP_TYPE}': { 'Authentication':
272    ...   {'AuthenticationType':'UsernameAndPassword', 'Password':
273    ...  '${LDAP_BIND_DN_PASSWORD}'}}}
274    Redfish.Patch  ${REDFISH_BASE_URI}AccountService  body=${body}
275    Sleep  15s
276    Redfish Verify LDAP Login
277
278
279Verify LDAP Type Update And LDAP Login
280    [Documentation]  Update LDAP type of LDAP configuration and verify
281    ...  that LDAP login works.
282    [Tags]  Verify_LDAP_Type_Update_And_LDAP_Login
283
284    Disable Other LDAP
285    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
286    ...  body={'${LDAP_TYPE}': {'ServiceEnabled': ${True}}}
287    Sleep  15s
288    Redfish Verify LDAP Login
289
290
291Verify LDAP Authorization With Null Privilege
292    [Documentation]  Verify the failure of LDAP authorization with empty
293    ...  privilege.
294    [Tags]  Verify_LDAP_Authorization_With_Null_Privilege
295    [Teardown]  Restore LDAP Privilege
296
297    Update LDAP Config And Verify Set Host Name  ${GROUP_NAME}  ${EMPTY}
298    ...  [${HTTP_FORBIDDEN}]
299
300
301Verify LDAP Authorization With Invalid Privilege
302    [Documentation]  Verify that LDAP user authorization with wrong privilege
303    ...  fails.
304    [Tags]  Verify_LDAP_Authorization_With_Invalid_Privilege
305    [Teardown]  Restore LDAP Privilege
306
307    Update LDAP Config And Verify Set Host Name  ${GROUP_NAME}
308    ...  Invalid_Privilege  [${HTTP_FORBIDDEN}]
309
310
311Verify LDAP Login With Invalid Data
312    [Documentation]  Verify that LDAP login with Invalid LDAP data and
313    ...  right LDAP user fails.
314    [Tags]  Verify_LDAP_Login_With_Invalid_Data
315    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
316    ...  Redfish.Login  AND
317    ...  Create LDAP Configuration
318
319    Create LDAP Configuration  ${LDAP_TYPE}  Invalid_LDAP_Server_URI
320    ...  Invalid_LDAP_BIND_DN  LDAP_BIND_DN_PASSWORD
321    ...  Invalid_LDAP_BASE_DN
322    Sleep  15s
323    Redfish Verify LDAP Login  ${False}
324
325
326Verify LDAP Config Creation Without BASE DN
327    [Documentation]  Verify that LDAP login with LDAP configuration
328    ...  created without BASE_DN fails.
329    [Tags]  Verify_LDAP_Config_Creation_Without_BASE_DN
330    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
331    ...  Redfish.Login  AND
332    ...  Create LDAP Configuration
333
334    Create LDAP Configuration  ${LDAP_TYPE}  Invalid_LDAP_Server_URI
335    ...  Invalid_LDAP_BIND_DN  LDAP_BIND_DN_PASSWORD  ${EMPTY}
336    Sleep  15s
337    Redfish Verify LDAP Login  ${False}
338
339
340Verify LDAP Authentication Without Password
341    [Documentation]  Verify that LDAP user authentication without LDAP
342    ...  user password fails.
343    [Tags]  Verify_LDAP_Authentication_Without_Password
344    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
345
346    ${status}=  Run Keyword And Return Status  Redfish.Login  ${LDAP_USER}
347    Valid Value  status  [${False}]
348
349
350Verify LDAP Login With Invalid BASE DN
351    [Documentation]  Verify that LDAP login with invalid BASE_DN and
352    ...  valid LDAP user fails.
353    [Tags]  Verify_LDAP_Login_With_Invalid_BASE_DN
354    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
355    ...  Redfish.Login  AND
356    ...  Create LDAP Configuration
357
358    Create LDAP Configuration  ${LDAP_TYPE}  ${LDAP_SERVER_URI}
359    ...  ${LDAP_BIND_DN}  ${LDAP_BIND_DN_PASSWORD}  Invalid_LDAP_BASE_DN
360    Sleep  15s
361    Redfish Verify LDAP Login  ${False}
362
363
364Verify LDAP Login With Invalid BIND_DN_PASSWORD
365    [Documentation]  Verify that LDAP login with invalid BIND_DN_PASSWORD and
366    ...  valid LDAP user fails.
367    [Tags]  Verify_LDAP_Login_With_Invalid_BIND_DN_PASSWORD
368    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
369    ...  Redfish.Login  AND
370    ...  Create LDAP Configuration
371
372    Create LDAP Configuration  ${LDAP_TYPE}  ${LDAP_SERVER_URI}
373    ...  ${LDAP_BIND_DN}  INVALID_LDAP_BIND_DN_PASSWORD  ${LDAP_BASE_DN}
374    Sleep  15s
375    Redfish Verify LDAP Login  ${False}
376
377
378Verify LDAP Login With Invalid BASE DN And Invalid BIND DN
379    [Documentation]  Verify that LDAP login with invalid BASE_DN and invalid
380    ...  BIND_DN and valid LDAP user fails.
381    [Tags]  Verify_LDAP_Login_With_Invalid_BASE_DN_And_Invalid_BIND_DN
382    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
383    ...  Redfish.Login  AND
384    ...  Create LDAP Configuration
385
386    Create LDAP Configuration  ${LDAP_TYPE}  ${LDAP_SERVER_URI}
387    ...  INVALID_LDAP_BIND_DN  ${LDAP_BIND_DN_PASSWORD}  INVALID_LDAP_BASE_DN
388    Sleep  15s
389    Redfish Verify LDAP Login  ${False}
390
391
392Verify Group Name And Group Privilege Able To Modify
393    [Documentation]  Verify that LDAP group name and group privilege able to
394    ...  modify.
395    [Tags]  Verify_Group_Name_And_Group_Privilege_Able_To_Modify
396    [Setup]  Update LDAP Configuration with LDAP User Role And Group
397    ...  ${LDAP_TYPE}  Operator  ${GROUP_NAME}
398
399    Update LDAP Configuration with LDAP User Role And Group  ${LDAP_TYPE}
400    ...  Administrator  ${GROUP_NAME}
401
402
403Verify LDAP Login With Invalid BIND DN
404    [Documentation]  Verify that LDAP login with invalid BIND_DN and
405    ...  valid LDAP user fails.
406    [Tags]  Verify_LDAP_Login_With_Invalid_BIND_DN
407    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
408    ...  Redfish.Login  AND
409    ...  Create LDAP Configuration
410
411    Create LDAP Configuration  ${LDAP_TYPE}  ${LDAP_SERVER_URI}
412    ...  Invalid_LDAP_BIND_DN  ${LDAP_BIND_DN_PASSWORD}  ${LDAP_BASE_DN}
413    Sleep  15s
414    Redfish Verify LDAP Login  ${False}
415
416
417Verify LDAP Authentication With Invalid LDAP User
418    [Documentation]  Verify that LDAP user authentication for user not exist
419    ...  in LDAP server and fails.
420    [Tags]  Verify_LDAP_Authentication_With_Invalid_LDAP_User
421    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
422
423    ${status}=  Run Keyword And Return Status  Redfish.Login  INVALID_LDAP_USER
424    ...  ${LDAP_USER_PASSWORD}
425    Valid Value  status  [${False}]
426
427
428Update LDAP User Roles And Verify Host Poweroff Operation
429    [Documentation]  Update LDAP user roles and verify host poweroff operation.
430    [Tags]  Update_LDAP_User_Roles_And_Verify_Host_Poweroff_Operation
431    [Teardown]  Restore LDAP Privilege
432
433    [Template]  Update LDAP User Role And Host Poweroff
434    # ldap_type   group_privilege  group_name     valid_status_codes
435
436    # Verify LDAP user with ReadOnly privilege not able to do host poweroff.
437    ${LDAP_TYPE}  ReadOnly         ${GROUP_NAME}  ${HTTP_FORBIDDEN}
438
439    # Verify LDAP user with Operator privilege able to do host poweroff.
440    ${LDAP_TYPE}  Operator         ${GROUP_NAME}  ${HTTP_OK}
441
442    # Verify LDAP user with Administrator privilege able to do host poweroff.
443    ${LDAP_TYPE}  Administrator    ${GROUP_NAME}  ${HTTP_OK}
444
445
446Update LDAP User Roles And Verify Host Poweron Operation
447    [Documentation]  Update LDAP user roles and verify host poweron operation.
448    [Tags]  Update_LDAP_User_Roles_And_Verify_Host_Poweron_Operation
449    [Teardown]  Restore LDAP Privilege
450
451    [Template]  Update LDAP User Role And Host Poweron
452    # ldap_type   group_privilege  group_name     valid_status_codes
453
454    # Verify LDAP user with ReadOnly privilege not able to do host poweron.
455    ${LDAP_TYPE}  ReadOnly         ${GROUP_NAME}  ${HTTP_FORBIDDEN}
456
457    # Verify LDAP user with Operator privilege able to do host poweron.
458    ${LDAP_TYPE}  Operator         ${GROUP_NAME}  ${HTTP_OK}
459
460    # Verify LDAP user with Administrator privilege able to do host poweron.
461    ${LDAP_TYPE}  Administrator    ${GROUP_NAME}  ${HTTP_OK}
462
463
464Configure IP Address Via Different User Roles And Verify
465    [Documentation]  Configure IP address via different user roles and verify.
466    [Tags]  Configure_IP_Address_Via_Different_User_Roles_And_Verify
467    [Teardown]  Restore LDAP Privilege
468
469    [Template]  Update LDAP User Role And Configure IP Address
470    # Verify LDAP user with Administrator privilege is able to configure IP address.
471    ${LDAP_TYPE}  Administrator    ${GROUP_NAME}  ${HTTP_OK}
472
473    # Verify LDAP user with ReadOnly privilege is forbidden to configure IP address.
474    ${LDAP_TYPE}  ReadOnly         ${GROUP_NAME}  ${HTTP_FORBIDDEN}
475
476    # Verify LDAP user with Operator privilege is able to configure IP address.
477    ${LDAP_TYPE}  Operator         ${GROUP_NAME}  ${HTTP_FORBIDDEN}
478
479
480Delete IP Address Via Different User Roles And Verify
481    [Documentation]  Delete IP address via different user roles and verify.
482    [Tags]  Delete_IP_Address_Via_Different_User_Roles_And_Verify
483    [Teardown]  Run Keywords  Restore LDAP Privilege  AND  FFDC On Test Case Fail
484
485    [Template]  Update LDAP User Role And Delete IP Address
486    # Verify LDAP user with Administrator privilege is able to delete IP address.
487    ${LDAP_TYPE}  Administrator    ${GROUP_NAME}  ${HTTP_OK}
488
489    # Verify LDAP user with ReadOnly privilege is forbidden to delete IP address.
490    ${LDAP_TYPE}  ReadOnly         ${GROUP_NAME}  ${HTTP_FORBIDDEN}
491
492    # Verify LDAP user with Operator privilege is able to delete IP address.
493    ${LDAP_TYPE}  Operator         ${GROUP_NAME}  ${HTTP_FORBIDDEN}
494
495
496Read Network Configuration Via Different User Roles And Verify
497    [Documentation]  Read network configuration via different user roles and verify.
498    [Tags]  Read_Network_Configuration_Via_Different_User_Roles_And_Verify
499    [Teardown]  Restore LDAP Privilege
500
501    [Template]  Update LDAP User Role And Read Network Configuration
502    ${LDAP_TYPE}  Administrator  ${GROUP_NAME}  ${HTTP_OK}
503
504    ${LDAP_TYPE}  ReadOnly       ${GROUP_NAME}  ${HTTP_OK}
505
506    ${LDAP_TYPE}  Operator       ${GROUP_NAME}  ${HTTP_OK}
507
508Switch LDAP Type And Verify Login Fails
509    [Documentation]  Switch LDAP type and verify login fails.
510    [Tags]  Switch_LDAP_Type_And_Verify_Login_Fails
511
512    # Check Login with LDAP Type is working
513    Create LDAP Configuration
514    Redfish Verify LDAP Login
515
516    # Disable the LDAP Type from OpenLDAP to ActiveDirectory or vice-versa
517    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
518    ...  body={'${LDAP_TYPE}': {'ServiceEnabled': ${False}}}
519
520    # Enable the inverse LDAP type
521    Disable Other LDAP  ${True}
522    Create LDAP Configuration  ${LDAP_TYPE_1}  ${LDAP_SERVER_URI_1}  ${LDAP_BIND_DN_1}  ${LDAP_BIND_DN_PASSWORD_1}  ${LDAP_BASE_DN_1}
523    Redfish.Logout
524    Sleep  10s
525
526    # Check if Login works via Inverse LDAP
527    Redfish.Login  ${LDAP_USER_1}  ${LDAP_USER_PASSWORD_1}
528    Redfish.Logout
529    Sleep  10s
530
531    # Login using LDAP type must fail
532    Redfish Verify LDAP Login  ${False}
533    Redfish.Logout
534
535*** Keywords ***
536
537Redfish Verify LDAP Login
538    [Documentation]  LDAP user log into BMC.
539    [Arguments]  ${valid_status}=${True}
540
541    # Description of argument(s):
542    # valid_status  Expected status of LDAP login ("True" or "False").
543
544    # According to our repo coding rules, Redfish.Login is to be done in Suite
545    # Setup and Redfish.Logout is to be done in Suite Teardown.  For any
546    # deviation from this rule (such as in this keyword), the deviant code
547    # must take steps to restore us to our original logged-in state.
548
549    ${status}=  Run Keyword And Return Status  Redfish.Login  ${LDAP_USER}
550    ...  ${LDAP_USER_PASSWORD}
551    Valid Value  status  [${valid_status}]
552    Redfish.Logout
553    Redfish.Login
554
555
556Update LDAP Config And Verify Set Host Name
557    [Documentation]  Update LDAP config and verify by attempting to set host name.
558    [Arguments]  ${group_name}  ${group_privilege}=Administrator
559    ...  ${valid_status_codes}=[${HTTP_OK}]
560    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
561
562    # Description of argument(s):
563    # group_name                    The group name of user.
564    # group_privilege               The group privilege ("Administrator",
565    #                               "Operator", "User" or "Callback").
566    # valid_status_codes            Expected return code(s) from patch
567    #                               operation (e.g. "200") used to update
568    #                               HostName.  See prolog of rest_request
569    #                               method in redfish_plus.py for details.
570    Update LDAP Configuration with LDAP User Role And Group  ${LDAP_TYPE}
571    ...  ${group_privilege}  ${group_name}
572
573    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
574    # Verify that the LDAP user in ${group_name} with the given privilege is
575    # allowed to change the hostname.
576    Redfish.Patch  ${REDFISH_NW_ETH0_URI}  body={'HostName': '${hostname}'}
577    ...  valid_status_codes=${valid_status_codes}
578
579Disable Other LDAP
580    [Documentation]  Disable other LDAP configuration.
581    [Arguments]  ${service_state}=${False}
582
583    # First disable other LDAP.
584    ${inverse_ldap_type}=  Set Variable If  '${LDAP_TYPE}' == 'LDAP'  ActiveDirectory  LDAP
585    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
586    ...  body={'${inverse_ldap_type}': {'ServiceEnabled': ${service_state}}}
587    Sleep  15s
588
589
590Config LDAP URL
591    [Documentation]  Config LDAP URL.
592    [Arguments]  ${ldap_server_uri}=${LDAP_SERVER_URI}  ${expected_status}=${TRUE}
593
594    # Description of argument(s):
595    # ldap_server_uri LDAP server uri (e.g. "ldap://XX.XX.XX.XX/").
596
597    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
598    ...  body={'${ldap_type}': {'ServiceAddresses': ['${ldap_server_uri}']}}
599    Sleep  15s
600    # After update, LDAP login.
601    ${status}=  Run Keyword And Return Status  Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
602    Valid Value  status  [${expected_status}]
603
604    Redfish.Logout
605    Redfish.Login
606
607
608Restore LDAP URL
609    [Documentation]  Restore LDAP URL.
610
611    # Restoring the working LDAP server uri.
612    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
613    ...  body={'${ldap_type}': {'ServiceAddresses': ['${LDAP_SERVER_URI}']}}
614    Sleep  15s
615
616
617Restore AccountLockout Attributes
618    [Documentation]  Restore AccountLockout Attributes.
619
620    Return From Keyword If  &{old_account_service} == &{EMPTY}
621    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
622    ...  body=[('AccountLockoutDuration', ${old_account_service['AccountLockoutDuration']})]
623    Redfish.Patch  ${REDFISH_BASE_URI}AccountService
624    ...  body=[('AccountLockoutDuration', ${old_account_service['AccountLockoutThreshold']})]
625
626
627Suite Setup Execution
628    [Documentation]  Do suite setup tasks.
629
630    Valid Value  LDAP_TYPE  valid_values=["ActiveDirectory", "LDAP"]
631    Valid Value  LDAP_USER
632    Valid Value  LDAP_USER_PASSWORD
633    Valid Value  GROUP_PRIVILEGE
634    Valid Value  GROUP_NAME
635    Valid Value  LDAP_SERVER_URI
636    Valid Value  LDAP_BIND_DN_PASSWORD
637    Valid Value  LDAP_BIND_DN
638    Valid Value  LDAP_BASE_DN
639
640    Redfish.Login
641    # Call 'Get LDAP Configuration' to verify that LDAP configuration exists.
642    Get LDAP Configuration  ${LDAP_TYPE}
643    Set Suite Variable  ${old_ldap_privilege}
644    Disable Other LDAP
645    Create LDAP Configuration
646    ${hostname}=  Redfish.Get Attribute  ${REDFISH_NW_PROTOCOL_URI}  HostName
647
648
649LDAP Suite Teardown Execution
650    [Documentation]  Restore ldap configuration, delete unused redfish session.
651
652    Restore LDAP Privilege
653    Redfish.Logout
654    Run Keyword And Ignore Error  Delete All Redfish Sessions
655
656
657Set Read Privilege And Check Firmware Inventory
658    [Documentation]  Set read privilege and check firmware inventory.
659    [Arguments]  ${read_privilege}
660
661    # Description of argument(s):
662    # read_privilege  The read privilege role (e.g. "User" / "Callback").
663
664    Update LDAP Configuration with LDAP User Role And Group  ${LDAP_TYPE}
665    ...  ${read_privilege}  ${GROUP_NAME}
666
667    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
668    # Verify that the LDAP user with read privilege is able to read inventory.
669    ${resp}=  Redfish.Get  /redfish/v1/UpdateService/FirmwareInventory
670    Should Be True  ${resp.dict["Members@odata.count"]} >= ${1}
671    Length Should Be  ${resp.dict["Members"]}  ${resp.dict["Members@odata.count"]}
672    Redfish.Logout
673    Redfish.Login
674
675
676Set Read Privilege And Check Poweron
677    [Documentation]  Set read privilege and power on should not be possible.
678    [Arguments]  ${read_privilege}
679
680    # Description of argument(s):
681    # read_privilege  The read privilege role (e.g. "User" / "Callback").
682
683    Update LDAP Configuration with LDAP User Role And Group  ${LDAP_TYPE}
684    ...  ${read_privilege}  ${GROUP_NAME}
685    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
686    Redfish.Post  ${REDFISH_POWER_URI}
687    ...  body={'ResetType': 'On'}   valid_status_codes=[401, 403]
688    Redfish.Logout
689    Redfish.Login
690
691
692Get LDAP Configuration
693    [Documentation]  Retrieve LDAP Configuration.
694    [Arguments]   ${ldap_type}
695
696    # Description of argument(s):
697    # ldap_type  The LDAP type ("ActiveDirectory" or "LDAP").
698
699    ${ldap_config}=  Redfish.Get Properties  ${REDFISH_BASE_URI}AccountService
700    [Return]  ${ldap_config["${ldap_type}"]}
701
702
703Update LDAP Configuration with LDAP User Role And Group
704    [Documentation]  Update LDAP configuration update with LDAP user Role and group.
705    [Arguments]   ${ldap_type}  ${group_privilege}  ${group_name}
706
707    # Description of argument(s):
708    # ldap_type        The LDAP type ("ActiveDirectory" or "LDAP").
709    # group_privilege  The group privilege ("Administrator", "Operator", "User" or "Callback").
710    # group_name       The group name of user.
711
712    ${local_role_remote_group}=  Create Dictionary  LocalRole=${group_privilege}  RemoteGroup=${group_name}
713    ${remote_role_mapping}=  Create List  ${local_role_remote_group}
714    ${ldap_data}=  Create Dictionary  RemoteRoleMapping=${remote_role_mapping}
715    ${payload}=  Create Dictionary  ${ldap_type}=${ldap_data}
716    Redfish.Patch  ${REDFISH_BASE_URI}AccountService  body=&{payload}
717    # Provide adequate time for LDAP daemon to restart after the update.
718    Sleep  15s
719
720
721Get LDAP Privilege
722    [Documentation]  Get LDAP privilege and return it.
723
724    ${ldap_config}=  Get LDAP Configuration  ${LDAP_TYPE}
725    ${num_list_entries}=  Get Length  ${ldap_config["RemoteRoleMapping"]}
726    Return From Keyword If  ${num_list_entries} == ${0}  @{EMPTY}
727
728    [Return]  ${ldap_config["RemoteRoleMapping"][0]["LocalRole"]}
729
730
731Restore LDAP Privilege
732    [Documentation]  Restore the LDAP privilege to its original value.
733
734    Redfish.Login
735    Return From Keyword If  '${old_ldap_privilege}' == '${EMPTY}' or '${old_ldap_privilege}' == '[]'
736    # Log back in to restore the original privilege.
737    Update LDAP Configuration with LDAP User Role And Group  ${LDAP_TYPE}
738    ...  ${old_ldap_privilege}  ${GROUP_NAME}
739
740    Sleep  18s
741
742Verify Host Power Status
743    [Documentation]  Verify the Host power status and do host power on/off respectively.
744    [Arguments]  ${expected_power_status}
745
746    # Description of argument(s):
747    # expected_power_status  State of Host e.g. Off or On.
748
749    ${power_status}=  Redfish.Get Attribute  /redfish/v1/Chassis/${CHASSIS_ID}  PowerState
750    Return From Keyword If  '${power_status}' == '${expected_power_status}'
751
752    Run Keyword If  '${power_status}' == 'Off'  Redfish Power On
753    ...  ELSE  Redfish Power Off
754
755Update LDAP User Role And Host Poweroff
756    [Documentation]  Update LDAP user role and do host poweroff.
757    [Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}
758    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
759
760    # Description of argument(s):
761    # ldap_type          The LDAP type ("ActiveDirectory" or "LDAP").
762    # group_privilege    The group privilege ("Administrator", "Operator" or "ReadOnly").
763    # group_name         The group name of user.
764    # valid_status_code  The expected valid status code.
765
766    # check Host state and do the power on/off if needed.
767    Verify Host Power Status  On
768
769    Update LDAP Configuration with LDAP User Role And Group  ${ldap_type}
770    ...  ${group_privilege}  ${group_name}
771
772    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
773
774    Redfish.Post  ${REDFISH_POWER_URI}
775    ...  body={'ResetType': 'ForceOff'}   valid_status_codes=[${valid_status_code}]
776
777    Return From Keyword If  ${valid_status_code} == ${HTTP_FORBIDDEN}
778    Wait Until Keyword Succeeds  1 min  10 sec  Verify Host Power State  Off
779
780
781Update LDAP User Role And Host Poweron
782    [Documentation]  Update LDAP user role and do host poweron.
783    [Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}
784    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
785
786    # Description of argument(s):
787    # ldap_type          The LDAP type ("ActiveDirectory" or "LDAP").
788    # group_privilege    The group privilege ("Administrator", "Operator" or "ReadOnly").
789    # group_name         The group name of user.
790    # valid_status_code  The expected valid status code.
791
792    # check Host state and do the power on/off if needed.
793    Verify Host Power Status  Off
794
795    Update LDAP Configuration with LDAP User Role And Group  ${ldap_type}
796    ...  ${group_privilege}  ${group_name}
797
798    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
799
800    Redfish.Post  ${REDFISH_POWER_URI}
801    ...  body={'ResetType': 'On'}   valid_status_codes=[${valid_status_code}]
802
803    Return From Keyword If  ${valid_status_code} == ${HTTP_FORBIDDEN}
804    Verify Host Is Up
805
806
807Update LDAP User Role And Configure IP Address
808    [Documentation]  Update LDAP user role and configure IP address.
809    [Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=${HTTP_OK}
810    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login  AND  Delete IP Address  ${test_ip}
811
812    # Description of argument(s):
813    # ldap_type          The LDAP type ("ActiveDirectory" or "LDAP").
814    # group_privilege    The group privilege ("Administrator", "Operator" or "ReadOnly").
815    # group_name         The group name of user.
816    # valid_status_code  The expected valid status code.
817
818    Update LDAP Configuration with LDAP User Role And Group  ${ldap_type}
819    ...  ${group_privilege}  ${group_name}
820
821    Redfish.Logout
822
823    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
824
825    ${test_gateway}=  Get BMC Default Gateway
826
827    Add IP Address  ${test_ip}  ${test_mask}  ${test_gateway}  ${valid_status_code}
828
829
830Update LDAP User Role And Delete IP Address
831    [Documentation]  Update LDAP user role and delete IP address.
832    [Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=${HTTP_OK}
833    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login  AND  Delete IP Address  ${test_ip}
834
835    # Description of argument(s):
836    # ldap_type          The LDAP type ("ActiveDirectory" or "LDAP").
837    # group_privilege    The group privilege ("Administrator", "Operator" or "ReadOnly").
838    # group_name         The group name of user.
839    # valid_status_code  The expected valid status code.
840
841    ${test_gateway}=  Get BMC Default Gateway
842
843    # Configure IP address before deleting via LDAP user roles.
844    Add IP Address  ${test_ip}  ${test_mask}  ${test_gateway}
845
846    Update LDAP Configuration with LDAP User Role And Group  ${ldap_type}
847    ...  ${group_privilege}  ${group_name}
848
849    Redfish.Logout
850
851    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
852
853    Delete IP Address  ${test_ip}  ${valid_status_code}
854
855
856Update LDAP User Role And Read Network Configuration
857    [Documentation]  Update LDAP user role and read network configuration.
858    [Arguments]  ${ldap_type}  ${group_privilege}  ${group_name}  ${valid_status_code}=${HTTP_OK}
859    [Teardown]  Run Keywords  Redfish.Logout  AND  Redfish.Login
860
861    # Description of argument(s):
862    # ldap_type          The LDAP type ("ActiveDirectory" or "LDAP").
863    # group_privilege    The group privilege ("Administrator", "Operator" or "ReadOnly").
864    # group_name         The group name of user.
865    # valid_status_code  The expected valid status code.
866
867    Update LDAP Configuration with LDAP User Role And Group  ${ldap_type}
868    ...  ${group_privilege}  ${group_name}
869
870    Redfish.Logout
871
872    Redfish.Login  ${LDAP_USER}  ${LDAP_USER_PASSWORD}
873    Redfish.Get  ${REDFISH_NW_ETH0_URI}  valid_status_codes=[${valid_status_code}]
874