xref: /openbmc/openbmc-test-automation/openpower/ext_interfaces/test_savearea_management.robot (revision 162c52ac0eaf066d38319c7a4bef14440a0938a6)
1*** Settings ***
2
3Documentation     Test Save Area feature of Management Console on BMC.
4
5Resource          ../../lib/rest_client.robot
6Resource          ../../lib/openbmc_ffdc.robot
7Resource          ../../lib/resource.robot
8Resource          ../../lib/bmc_redfish_utils.robot
9Resource          ../../lib/utils.robot
10Resource          ../../lib/bmc_redfish_resource.robot
11Resource          ../../lib/external_intf/management_console_utils.robot
12
13Suite Setup       Suite Setup Execution
14Test Teardown     Test Teardown Execution
15Suite Teardown    Suite Teardown Execution
16
17Test Tags        Savearea_Management
18
19*** Variables ***
20
21${MAXIMUM_FILE_SIZE_MESSAGE}        File size exceeds maximum allowed size[25MB]
22${MAXIMUM_DIR_SIZE_MESSAGE}
23...   File size does not fit in the savearea directory maximum allowed size[25MB]
24${FILE_UPLOAD_MESSAGE}              File Created
25${FILE_DELETED_MESSAGE}             File Deleted
26${FILE_UPDATED_MESSAGE}             File Updated
27${FORBIDDEN_MESSAGE}                Forbidden
28${ERROR_MESSAGE}                    Error while creating the file
29${RESOURCE_NOT_FOUND_MESSAGE}       Resource Not Found
30${MINIMUM_FILE_SIZE_MESSAGE}        File size is less than minimum allowed size[100B]
31${MAXIMUM_FILE_NAME_MESSAGE}        Filename must be maximum 20 characters
32${UNSUPPORTED_FILE_NAME_MESSAGE}    Unsupported character in filename
33
34${content-1}                        Sample Content to test partition file upload
35...  Sample Content to test partition file upload
36...  Sample Content to test partition file upload
37${content-2}                        Sample Content to test partition file upload after reboot
38...  Sample Content to test partition file upload after reboot
39...  Sample Content to test partition file upload after reboot
40
41${LOOP_COUNT}                       10
42
43*** Test Cases ***
44
45Redfish Upload Lower Limit Partition File To BMC
46    [Documentation]  Upload lower limit of allowed partition file to BMC using Redfish.
47    [Tags]  Redfish_Upload_Lower_Limit_Partition_File_To_BMC
48    [Template]  Redfish Upload Partition File
49
50    # file_name
51    100-file
52
53
54Redfish Upload Partition File To BMC
55    [Documentation]  Upload partition file to BMC using Redfish.
56    [Tags]  Redfish_Upload_Partition_File_To_BMC
57    [Template]  Redfish Upload Partition File
58
59    # file_name
60    500KB-file
61    2000KB-file
62    10000KB-file
63    25000KB-file
64
65
66Test Upload Lower Limit Partition File To BMC And Expect Failure
67    [Documentation]  Fail to upload partition file to BMC with file size
68    ...  below the lower limit of allowed partition file size using Redfish.
69    [Tags]  Test_Upload_Lower_Limit_Partition_File_To_BMC_And_Expect_Failure
70    [Template]  Redfish Fail To Upload Partition File
71
72    # file_name    status_code            partition_status    response_message
73    99-file        ${HTTP_BAD_REQUEST}    0                   ${MINIMUM_FILE_SIZE_MESSAGE}
74
75
76Test Upload Upper Limit Partition File To BMC And Expect Failure
77    [Documentation]  Fail to upload partition file to BMC with file size
78    ...  more than upper limit of allowed partition file size using Redfish.
79    [Tags]  Test_Upload_Upper_Limit_Partition_File_To_BMC_And_Expect_Failure
80    [Template]  Redfish Fail To Upload Partition File
81
82    # file_name     status_code            partition_status    response_message
83    25001KB-file    ${HTTP_BAD_REQUEST}    0                   ${MAXIMUM_FILE_SIZE_MESSAGE}
84
85
86Redfish Upload Multiple Partition File To BMC
87    [Documentation]  Upload multiple partition file to BMC using Redfish.
88    [Tags]  Redfish_Upload_Multiple_Partition_File_To_BMC
89    [Template]  Redfish Upload Partition File
90
91    # file_name
92    250KB-file,500KB-file
93
94
95Test Upload Partition File When BMC Space Reach Max And Expect Failure
96    [Documentation]  Fail to upload multiple partition file to BMC
97    ...  as BMC directory reach to upper limit using Redfish.
98    [Tags]  Test_Upload_Partition_File_When_BMC_Space_Reach_Max_And_Expect_Failure
99    [Template]  Redfish Fail To Upload Partition File
100
101    # file_name     status_code            partition_status    response_message
102    15000KB-file    ${HTTP_OK}             1                   ${FILE_UPLOAD_MESSAGE}
103    16000KB-file    ${HTTP_BAD_REQUEST}    0                   ${MAXIMUM_DIR_SIZE_MESSAGE}
104    25000KB-file    ${HTTP_OK}             1                   ${FILE_UPLOAD_MESSAGE}
105    100-file        ${HTTP_BAD_REQUEST}    0                   ${MAXIMUM_DIR_SIZE_MESSAGE}
106
107
108Redfish Upload Same Partition File To BMC In Loop
109    [Documentation]  Upload same partition file to BMC using Redfish in loop.
110    [Tags]  Redfish_Upload_Same_Partition_File_To_BMC_In_Loop
111    [Template]  Redfish Upload Partition File In Loop
112
113    # file_name
114    500KB-file
115
116
117Redfish Upload And Delete Same Partition File To BMC In Loop
118    [Documentation]  Upload same partition file to BMC using Redfish in loop.
119    [Tags]  Redfish_Upload_And_Delete_Same_Partition_File_To_BMC_In_Loop
120    [Template]  Redfish Upload And Delete Partition File In Loop
121
122    # file_name
123    500KB-file
124
125
126Redfish Partition File Upload Post BMC Reboot
127    [Documentation]  Upload partition file to BMC using Redfish, after the BMC reboot.
128    [Tags]  Redfish_Partition_File_Upload_Post_BMC_Reboot
129    [Template]  Verify Partition File Upload Post BMC Reboot
130
131    # file_name
132    500KB-file
133
134
135Redfish Partition File Persistency On BMC Reboot
136    [Documentation]  Upload partition file to BMC using Redfish and is same after reboot.
137    [Tags]  Redfish_Partition_File_Persistency_On_BMC_Reboot
138    [Template]  Redfish Partition File Persistency
139
140    # file_name
141    500KB-file
142
143
144Redfish Multiple Partition File Persistency On BMC Reboot
145    [Documentation]  Upload multiple partition file to BMC using Redfish and is same after reboot.
146    [Tags]  Redfish_Multiple_Partition_File_Persistency_On_BMC_Reboot
147    [Template]  Redfish Partition File Persistency
148
149    # file_name
150    250KB-file,500KB-file
151
152
153Redfish Read Partition File From BMC
154    [Documentation]  Upload partition file to BMC using Redfish and verify the content.
155    [Tags]  Redfish_Read_Partition_File_From_BMC
156    [Template]  Redfish Read Partition File
157
158    # file_name                      reboot_flag
159    testfile01-file                  False
160    testfile01-file,testfile02-file  False
161
162
163Redfish Read Partition File Post BMC Reboot
164    [Documentation]  Upload partition file to BMC using Redfish and verify the content after reboot.
165    [Tags]  Redfish_Read_Partition_File_Post_BMC_Reboot
166    [Template]  Redfish Read Partition File
167
168    # file_name                      reboot_flag
169    testfile01-file                  True
170    testfile01-file,testfile02-file  True
171
172
173Redfish Update Partition File On BMC
174    [Documentation]  Upload partition file to BMC using Redfish and verify the content.
175    [Tags]  Redfish_Update_Partition_File_On_BMC
176    [Template]  Redfish Update Partition File With Different Content
177
178    # file_name                 reboot_flag
179    testfile01-file             False
180
181
182Redfish Update Partition File On BMC Reboot
183    [Documentation]  Upload partition file to BMC using Redfish and verify the content after the reboot.
184    [Tags]  Redfish_Update_Partition_File_On_BMC_Reboot
185    [Template]  Redfish Update Partition File With Different Content
186
187    # file_name                 reboot_flag
188    testfile01-file             True
189
190
191Redfish Persistency Update Partition File On BMC
192    [Documentation]  Upload partition file to BMC using Redfish and verify the content.
193    [Tags]  Redfish_Persistency_Update_Partition_File_On_BMC
194    [Template]  Redfish Update Partition File With Same Content
195
196    # file_name                 reboot_flag
197    testfile01-file             False
198
199
200Redfish Delete Non Existence Of Partition File
201    [Documentation]  Delete the partition file if do not exists.
202    [Tags]  Redfish_Delete_Non_Existence_Of_Partition_File
203    [Template]  Redfish Delete Non Existence Partition File
204
205    # file_name
206    testfile01-file
207
208
209Verify One Thousand Partitions File Upload
210    [Documentation]  Upload 1000 partition file to BMC.
211    [Tags]  Verify_One_Thousand_Partitions_File_Upload
212    [Template]  Redfish Upload Partition File With Range
213
214    # range
215    1000
216
217
218Non Admin Users Fail To Upload Partition File
219    [Documentation]  Non admin user will fail to upload the partition file.
220    [Tags]  Non_Admin_Users_Fail_To_Upload_Partition_File
221    [Template]  Non Admin User To Upload Partition File
222
223    # file_name    username         password       role_id
224    500KB-file     operator_user    TestPwd123     Operator
225
226
227Non Admin User Delete Non Existence Of Partition File
228    [Documentation]  Delete the partition file if does not exists.
229    [Tags]  Non_Admin_User_Delete_Non_Existence_Of_Partition_File
230    [Template]  Non Admin Delete Non Existence Partition File
231
232    # file_name    username         password       role_id
233    500KB-file     operator_user    TestPwd123     Operator
234
235
236Redfish Update Wrong Partition File To BMC
237    [Documentation]  Upload partition file to BMC by wrong URI using Redfish.
238    [Tags]  Redfish_Update_Wrong_Partition_File_To_BMC
239    [Template]  Verify Update Wrong Partition File To BMC
240
241    # file_name
242    500KB-file
243
244
245Test Redfish Upload Partition File Name With Character Limit To BMC
246    [Documentation]  Upload partition file to BMC with file name character allowed limit
247    ...  and above allowed limit using Redfish.
248    [Tags]  Test_Redfish_Upload_Partition_File_Name_With_Character_Limit_To_BMC
249    [Template]  Check Redfish Upload Partition File Name With Character Limit To BMC
250
251    # file_name              status_code            message
252    50KB-testfilesavfile     ${HTTP_OK}             ${FILE_UPLOAD_MESSAGE}
253    50KB-testsaveareafile    ${HTTP_BAD_REQUEST}    ${MAXIMUM_FILE_NAME_MESSAGE}
254
255
256Test Redfish Fail To Upload Partition File Name With Special Character To BMC
257    [Documentation]  Upload partition file to BMC with special character file name and
258    ...  Redfish through an error.
259    [Tags]  Test_Redfish_Fail_To_Upload_Partition_File_Name_With_Special_Character_To_BMC
260    [Template]  Check Redfish Fail To Upload Partition File Name With Special Character To BMC
261
262    # file_name      status_code            message
263    1KB-*filename    ${HTTP_BAD_REQUEST}    ${UNSUPPORTED_FILE_NAME_MESSAGE}
264    1KB-!filename    ${HTTP_BAD_REQUEST}    ${UNSUPPORTED_FILE_NAME_MESSAGE}
265    1KB-@filename    ${HTTP_BAD_REQUEST}    ${UNSUPPORTED_FILE_NAME_MESSAGE}
266
267
268Redfish Persistency Update Partition File Post BMC Reboot
269    [Documentation]  Upload partition file to BMC using Redfish and verify the content after the reboot.
270    [Tags]  Redfish_Persistency_Update_Partition_File_Post_BMC_Reboot
271    [Template]  Redfish Update Partition File With Same Content
272
273    # file_name                 reboot_flag
274    testfile01-file             True
275
276
277Redfish Upload Validated Partition File From Path To BMC
278   [Documentation]  Upload valid partition file to BMC from file path define by user in loop.
279   ...  By default loop count values is 10 times.
280   [Tags]  Redfish_Upload_Validated_Partition_File_From_Path_To_BMC
281
282   Log To Console  ${EMPTY}
283   FOR  ${count}  IN RANGE  1  ${LOOP_COUNT} + 1
284     Log To Console  **************************************
285     Log To Console  * The Current Loop Count is ${count} of ${LOOP_COUNT} *
286     Log To Console  **************************************
287
288     Redfish Upload Partition File From Path  ${PARTITION_FILE_PATH}
289   END
290
291*** Keywords ***
292
293Suite Setup Execution
294    [Documentation]  Suite setup execution.
295
296    Redfish.Login
297
298
299Test Teardown Execution
300    [Documentation]  Test teardown execution.
301
302    Delete All BMC Partition File  ${HTTP_OK}
303    FFDC On Test Case Fail
304
305
306Suite Teardown Execution
307    [Documentation]  Suite teardown execution.
308
309    Delete All Sessions
310
311
312Delete Local Partition File
313    [Documentation]  Delete local partition file.
314    [Arguments]  ${file_name}
315
316    # Description of argument(s):
317    # file_name    Partition file name.
318
319    FOR  ${conf_file}  IN  @{file_name}
320      ${file_exist}=  Run Keyword And Return Status  OperatingSystem.File Should Exist  ${conf_file}
321      IF  'True' == '${file_exist}'  Remove File  ${conf_file}
322    END
323
324
325Delete Local Server Partition File
326    [Documentation]  Local partition files which is getting uploaded to BMC,
327    ...  will get deleted after the uploads. If partition file name consist
328    ...  of “-file” then partition file gets deleted.
329
330    @{conf_file_list} =  OperatingSystem.List Files In Directory  ${EXECDIR}
331    ${match_conf_file_list}=  Get Matches  ${conf_file_list}  regexp=.*-file  case_insensitive=${True}
332
333    ${num_records}=  Get Length  ${match_conf_file_list}
334    Return From Keyword If  ${num_records} == ${0}  ${EMPTY}
335
336    FOR  ${conf_file}  IN  @{match_conf_file_list}
337      ${file_exist}=  Run Keyword And Return Status  OperatingSystem.File Should Exist  ${conf_file}
338      IF  'True' == '${file_exist}'  Remove File  ${conf_file}
339    END
340
341
342Create Partition File
343    [Documentation]  Create Partition file.
344    [Arguments]  ${file_name}
345
346    # Description of argument(s):
347    # file_name    Partition file name.
348
349    Delete Local Partition File  ${file_name}
350
351    FOR  ${conf_file}  IN  @{file_name}
352      @{words}=  Split String  ${conf_file}  -
353      Run  dd if=/dev/zero of=${conf_file} bs=${words}[-0] count=1
354      OperatingSystem.File Should Exist  ${conf_file}
355    END
356
357
358Delete BMC Partition File
359    [Documentation]  Delete single partition file on BMC via Redfish.
360    [Arguments]  ${file_name}  ${status_code}  ${expected_message}
361
362    # Description of argument(s):
363    # file_name           Partition file name.
364    # status_code         HTTPS status code.
365    # expected_message    Expected message of URI.
366
367    FOR  ${conf_file}  IN  @{file_name}
368      ${data}=  Create Dictionary
369      ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}
370      Set To Dictionary  ${data}  headers  ${headers}
371
372      ${resp}=  DELETE On Session  openbmc  /ibm/v1/Host/ConfigFiles/${conf_file}  &{data}
373      ...  expected_status=any
374      Should Be Equal As Strings  ${resp.status_code}  ${status_code}
375
376      ${description}=  Return Description Of Response  ${resp.text}
377      Should Be Equal As Strings  ${description}  ${expected_message}
378    END
379
380
381Delete All BMC Partition File
382    [Documentation]  Delete multiple partition file on BMC via Redfish.
383    [Arguments]  ${status_code}
384
385    # Description of argument(s):
386    # status_code       HTTPS status code.
387
388    Initialize OpenBMC
389    ${data}=  Create Dictionary
390    ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}
391    Set To Dictionary  ${data}  headers  ${headers}
392
393    ${resp}=  POST On Session  openbmc  /ibm/v1/Host/ConfigFiles/Actions/IBMConfigFiles.DeleteAll  &{data}
394    ...  expected_status=any
395    Should Be Equal As Strings  ${resp.status_code}  ${status_code}
396
397
398Return Description Of Response
399    [Documentation]  Return description of REST response.
400    [Arguments]  ${resp_text}
401
402    # Description of argument(s):
403    # resp_text    REST response body.
404
405    # resp_text after successful partition file upload looks like:
406    # {
407    #    "Description": "File Created"
408    # }
409
410    ${status}=  Run Keyword And Return Status  Evaluate  isinstance(${resp_text}, dict)
411    Return From Keyword If  '${status}' == 'False'  ${resp_text}
412    ${message}=  Evaluate  json.loads('''${resp_text}''')  json
413
414    RETURN  ${message["Description"]}
415
416
417Upload Partition File To BMC
418    [Documentation]  Upload partition file to BMC.
419    [Arguments]  ${file_name}  ${status_code}  ${expected_message}  ${flag}=${True}  ${path}=${EMPTY}
420
421    # Description of argument(s):
422    # file_name           Partition file name.
423    # status_code         HTTPS status code.
424    # expected_message    Expected message of URI.
425    # flag                If True run part of program, else skip.
426    # path                Partition file path.
427
428    IF  '${flag}' == '${True}'  Initialize OpenBMC
429    FOR  ${conf_file}  IN  @{file_name}
430      # Get the content of the file and upload to BMC.
431      ${image_data}=  OperatingSystem.Get Binary File  ${path}${conf_file}
432      ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}  Content-Type=application/octet-stream
433
434      ${kwargs}=  Create Dictionary  data=${image_data}
435      Set To Dictionary  ${kwargs}  headers  ${headers}
436      ${resp}=  PUT On Session  openbmc  /ibm/v1/Host/ConfigFiles/${conf_file}  &{kwargs}  timeout=10
437      ...  expected_status=any
438      Should Be Equal As Strings  ${resp.status_code}  ${status_code}
439
440      ${description}=  Return Description Of Response  ${resp.text}
441      Should Be Equal As Strings  ${description}  ${expected_message}
442    END
443
444
445Verify Partition File On BMC
446    [Documentation]  Verify partition file on BMC.
447    [Arguments]  ${file_name}  ${Partition_status}
448
449    # Description of argument(s):
450    # file_name           Partition file name.
451    # Partition_status    Partition file status on BMC.
452
453    FOR  ${conf_file}  IN  @{file_name}
454      ${status}  ${stderr}  ${rc}=  BMC Execute Command
455      ...  ls -l /var/lib/bmcweb/ibm-management-console/configfiles/${conf_file} | wc -l
456      Valid Value  ${status}  [${Partition_status}]
457    END
458
459
460Redfish Upload Partition File
461    [Documentation]  Upload the partition file.
462    [Arguments]  ${file_name}  ${file_size}=${EMPTY}
463
464    # Description of argument(s):
465    # file_name    Partition file name.
466    # file_size    By Default is set to EMPTY,
467    #              if user pass small_file_size the create file with small
468    #              size keyword gets executed.
469
470    @{Partition_file_list} =  Split String  ${file_name}  ,
471    ${num_records}=  Get Length  ${Partition_file_list}
472
473    Create Partition File  ${Partition_file_list}
474
475    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
476    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
477    IF  ${num_records} == ${1}
478        Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
479    ELSE
480        Delete All BMC Partition File  ${HTTP_OK}
481    END
482    Delete Local Partition File  ${Partition_file_list}
483
484
485Redfish Fail To Upload Partition File
486    [Documentation]  Fail to upload the partition file.
487    [Arguments]  ${file_name}  ${status_code}  ${partition_status}  ${response_message}=${EMPTY}
488
489    # Description of argument(s):
490    # file_name           Partition file name.
491    # status_code         HTTPS status code.
492    # partition_status    Partition status.
493    # response_message    By default is set to EMPTY,
494    #                     else user provide the information when user upload the partition with file size
495    #                     below lower linit of allowed partition or more than of large allowed partition.
496
497    @{Partition_file_list} =  Split String  ${file_name}  ,
498
499    Create Partition File  ${Partition_file_list}
500    Upload Partition File To BMC  ${Partition_file_list}  ${status_code}  ${response_message}
501    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=${partition_status}
502
503    IF  ${partition_status} == 0
504        Delete BMC Partition File
505        ...  ${Partition_file_list}  ${HTTP_NOT_FOUND}  ${RESOURCE_NOT_FOUND_MESSAGE}
506        Delete All BMC Partition File  ${HTTP_OK}
507        Delete Local Server Partition File
508    END
509
510    Delete Local Partition File  ${Partition_file_list}
511
512
513Redfish Upload Partition File In Loop
514    [Documentation]  Upload the same partition file multiple times in loop to BMC.
515    [Arguments]  ${file_name}
516
517    # Description of argument(s):
518    # file_name    Partition file name.
519
520    @{Partition_file_list} =  Split String  ${file_name}  ,
521    Create Partition File  ${Partition_file_list}
522
523    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
524    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
525
526    FOR  ${count}  IN RANGE  1  11
527      Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPDATED_MESSAGE}
528      Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
529    END
530
531    Initialize OpenBMC
532    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
533    Delete Local Partition File  ${Partition_file_list}
534
535
536Redfish Upload And Delete Partition File In Loop
537    [Documentation]  Upload the same partition file multiple times in loop to BMC.
538    [Arguments]  ${file_name}
539
540    # Description of argument(s):
541    # file_name    Partition file name.
542
543    FOR  ${count}  IN RANGE  1  11
544      Redfish Upload Partition File  ${file_name}
545    END
546
547
548Verify Partition File Upload Post BMC Reboot
549    [Documentation]  Upload the partition file, after BMC reboot.
550    [Arguments]  ${file_name}
551
552    # Description of argument(s):
553    # file_name    Partition file name.
554
555    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
556    Redfish BMC Reset Operation
557    Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}
558
559    Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled
560    Is BMC Standby
561
562    Redfish Upload Partition File  ${file_name}
563
564
565Redfish Partition File Persistency
566    [Documentation]  Upload the partition file and check for persistency after reboot.
567    [Arguments]  ${file_name}
568
569    # Description of argument(s):
570    # file_name    Partition file name.
571
572    @{Partition_file_list} =  Split String  ${file_name}  ,
573    ${num_records}=  Get Length  ${Partition_file_list}
574    Create Partition File  ${Partition_file_list}
575    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
576    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
577
578    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
579    Redfish BMC Reset Operation
580    Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}
581
582    Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled
583    Is BMC Standby
584
585    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
586    Initialize OpenBMC
587    IF  ${num_records} == ${1}
588        Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
589    ELSE
590        Delete All BMC Partition File  ${HTTP_OK}
591    END
592
593    Delete Local Partition File  ${Partition_file_list}
594
595
596Verify Redfish Partition File Content
597    [Documentation]  Verify partition file content.
598    [Arguments]  ${file_name}  ${content_dict}  ${status_code}
599
600    # Description of argument(s):
601    # file_name       Partition file name.
602    # content_dict    Dict contain the content.
603    # status_code     HTTPS status code.
604
605    FOR  ${conf_file}  IN  @{file_name}
606      ${resp}=  GET On Session  openbmc  /ibm/v1/Host/ConfigFiles/${conf_file}
607      ...  expected_status=any
608      Should Be Equal As Strings  ${resp.status_code}  ${status_code}
609
610      ${Partition_file_data}=  Remove String  ${resp.text}  \\n
611      ${Partition_file_data}=  Evaluate  json.loads('''${Partition_file_data}''')  json
612      Should Be Equal As Strings  ${Partition_file_data["Data"]}  ${content_dict['${conf_file}']}
613    END
614
615
616Add Content To Files
617    [Documentation]  Add defined content in partition file.
618    [Arguments]  ${file_name}  ${index}=${0}
619
620    # Description of argument(s):
621    # file_name    Partition file name.
622    # index        Index
623
624    ${num_records}=  Get Length  ${file_name}
625    &{content_dict}=  Create Dictionary
626
627    FOR  ${conf_file}  IN  @{file_name}
628       ${index}=  Get Index From List  ${file_name}  ${conf_file}
629       ${index}=  Evaluate  ${index} + 1
630
631       Run  echo "${content-${index}}" > ${conf_file}
632       OperatingSystem.File Should Exist  ${conf_file}
633
634       Set To Dictionary  ${content_dict}  ${conf_file}  ${content-${index}}
635    END
636
637    RETURN  &{content_dict}
638
639
640Redfish Read Partition File
641    [Documentation]  Read partition file content.
642    [Arguments]  ${file_name}  ${reboot_flag}=False
643
644    # Description of argument(s):
645    # file_name      Partition file name.
646    # reboot_flag    Reboot flag.
647
648    @{Partition_file_list} =  Split String  ${file_name}  ,
649    ${content_dict}=  Add Content To Files  ${Partition_file_list}
650
651    ${num_records}=  Get Length  ${Partition_file_list}
652
653    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
654    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
655    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}
656
657    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
658
659    IF  ${True} == ${reboot_flag}
660        Redfish BMC Reset Operation
661        Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}
662        Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled
663        Is BMC Standby
664        Initialize OpenBMC
665        Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}
666    END
667
668    IF  ${num_records} == ${1}
669        Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
670    ELSE
671        Delete All BMC Partition File  ${HTTP_OK}
672    END
673
674    Delete Local Partition File  ${Partition_file_list}
675
676
677Redfish Update Partition File With Same Content
678    [Documentation]  Update partition file with same content.
679    [Arguments]  ${file_name}  ${reboot_flag}=False
680
681    # Description of argument(s):
682    # file_name      Partition file name.
683    # reboot_flag    Reboot flag.
684
685    @{Partition_file_list} =  Split String  ${file_name}  ,
686    ${content_dict}=  Add Content To Files  ${Partition_file_list}  ${0}
687
688    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
689    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
690    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}
691
692    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
693
694    IF  ${True} == ${reboot_flag}
695        Redfish BMC Reset Operation
696        Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}
697        Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled
698        Is BMC Standby
699        Initialize OpenBMC
700    END
701
702    ${content_dict}=  Add Content To Files  ${Partition_file_list}  ${0}
703    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPDATED_MESSAGE}
704    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
705    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}
706
707    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
708    Delete Local Partition File  ${Partition_file_list}
709
710
711Redfish Update Partition File With Different Content
712    [Documentation]  Update partition file with different content.
713    [Arguments]  ${file_name}  ${reboot_flag}=False
714
715    # Description of argument(s):
716    # file_name      Partition file name.
717    # reboot_flag    Reboot flag.
718
719    @{Partition_file_list} =  Split String  ${file_name}  ,
720    ${content_dict}=  Add Content To Files  ${Partition_file_list}  ${0}
721
722    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
723    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
724    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}
725
726    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
727
728    IF  ${True} == ${reboot_flag}
729        Redfish BMC Reset Operation
730        Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}
731        Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled
732        Is BMC Standby
733        Initialize OpenBMC
734    END
735
736    ${content_dict}=  Add Content To Files  ${Partition_file_list}  ${1}
737    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPDATED_MESSAGE}
738    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
739    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}
740
741    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
742    Delete Local Partition File  ${Partition_file_list}
743
744
745Create File Names
746    [Documentation]  Create partition file names.
747    [Arguments]  ${range}
748
749    # Description of argument(s):
750    # range    Range in numbers.
751
752    @{file_name_list}=  Create List
753    Set Test Variable  ${file_name}  rangefile
754    FOR  ${count}  IN RANGE  ${range}
755      Append To List  ${file_name_list}  1KB-file${count}
756    END
757    RETURN  ${file_name_list}
758
759
760Redfish Upload Partition File With Range
761    [Documentation]  Upload the partition file with the range of files.
762    [Arguments]  ${range}
763
764    # Description of argument(s):
765    # range    Range in numbers.
766
767    ${Partition_file_list}=  Create File Names  ${range}
768    Delete Local Partition File  ${Partition_file_list}
769    Create Partition File  ${Partition_file_list}
770    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
771    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
772    Delete All BMC Partition File  ${HTTP_OK}
773    Delete Local Partition File  ${Partition_file_list}
774
775
776Redfish Delete Non Existence Partition File
777    [Documentation]  Delete the partition file if do not exists.
778    [Arguments]  ${file_name}
779
780    # Description of argument(s):
781    # file_name    Partition file name.
782
783    @{Partition_file_list} =  Split String  ${file_name}  ,
784    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_NOT_FOUND}  ${RESOURCE_NOT_FOUND_MESSAGE}
785
786
787Non Admin User To Upload Partition File
788    [Documentation]  Non admin user to upload the partition file.
789    [Arguments]  ${file_name}  ${username}  ${password}  ${role}  ${enabled}=${True}
790
791    # Description of argument(s):
792    # file_name    Partition file name.
793    # username     Username.
794    # password     Password.
795    # role         Role of user.
796    # enabled      Value can be True or False.
797
798    Redfish Create User  ${username}  ${password}  ${role}  ${enabled}
799    Delete All Sessions
800    Initialize OpenBMC  rest_username=${username}  rest_password=${password}
801    @{Partition_file_list} =  Split String  ${file_name}  ,
802    Create Partition File  ${Partition_file_list}
803    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_FORBIDDEN}  ${FORBIDDEN_MESSAGE}  ${False}
804    Delete Local Partition File  ${Partition_file_list}
805    Redfish.Delete  /redfish/v1/AccountService/Accounts/${username}
806
807
808Non Admin Delete Non Existence Partition File
809    [Documentation]  Non admin user to upload the partition file.
810    [Arguments]  ${file_name}  ${username}  ${password}  ${role}  ${enabled}=${True}
811
812    # Description of argument(s):
813    # file_name    Partition file name.
814    # username     Username.
815    # password     Password.
816    # role         Role of user.
817    # enabled      Value can be True or False.
818
819    Redfish Create User  ${username}  ${password}  ${role}  ${enabled}
820    Delete All Sessions
821    Initialize OpenBMC  rest_username=${username}  rest_password=${password}
822    @{Partition_file_list} =  Split String  ${file_name}  ,
823    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_FORBIDDEN}  ${FORBIDDEN_MESSAGE}
824
825
826Verify Update Wrong Partition File To BMC
827    [Documentation]  Upload the wrong partition file to BMC.
828    [Arguments]  ${file_name}
829
830    # Description of argument(s):
831    # file_name    Partition file name.
832
833    Redfish.Login
834    ${resp}=  Run Keyword And Return Status
835    ...  Redfish.Put  /ibm/v1/Host/ConfigFiles/../../../../../etc/resolv.conf  body={"data": "test string"}
836    Should Be Equal As Strings  ${resp}  False
837
838
839Check Redfish Upload Partition File Name With Character Limit To BMC
840    [Documentation]  Upload the partition file to BMC with file name character limit.
841    [Arguments]  ${file_name}  ${status_code}  ${message}
842
843    # Description of argument(s):
844    # file_name       Partition file name.
845    # status_code     HTTPS status code.
846    # message         Expected message of from upload partition file URI.
847
848    @{Partition_file_list} =  Split String  ${file_name}  ,
849    ${num_records}=  Get Length  ${Partition_file_list}
850    Create Partition File  ${Partition_file_list}
851
852    ${file_name_length}=  Get Length  ${Partition_file_list}[0]
853
854    IF  ${file_name_length} == 20
855        Upload Partition File To BMC  ${Partition_file_list}  ${status_code}  ${message}
856        Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
857        Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
858    ELSE
859        Upload Partition File To BMC  ${Partition_file_list}  ${status_code}  ${message}
860    END
861
862    Delete Local Partition File  ${Partition_file_list}
863
864
865Check Redfish Fail To Upload Partition File Name With Special Character To BMC
866    [Documentation]  Upload the partition file to BMC with special character file name.
867    [Arguments]  ${file_name}  ${status_code}  ${message}
868
869    # Description of argument(s):
870    # file_name       Partition file name.
871    # status_code     HTTPS status code.
872    # message         Expected message from upload partition file URI.
873
874    @{Partition_file_list} =  Split String  ${file_name}  ,
875    ${num_records}=  Get Length  ${Partition_file_list}
876
877    Create Partition File  ${Partition_file_list}
878
879    Upload Partition File To BMC  ${Partition_file_list}  ${status_code}  ${message}
880
881    ${status}=  Run Keyword And Return Status
882    ...  Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
883    Should Be Equal As Strings  ${status}  False
884
885    Delete Local Partition File  ${Partition_file_list}
886
887
888Redfish Upload Partition File From Path
889    [Documentation]  Upload the partition file to BMC from file path.
890    [Arguments]  ${PARTITION_FILE_PATH}
891
892    # Description of argument(s):
893    # PARTITION_FILE_PATH    Partition file path.
894
895    ${file_list} =  OperatingSystem.List Files In Directory  ${PARTITION_FILE_PATH}
896
897    ${num_records}=  Get Length  ${file_list}
898    Should Not Be Equal As Integers  ${num_records}  0
899
900    FOR  ${file_name}  IN  @{file_list}
901      @{Partition_file_list} =  Split String  ${file_name}  ,
902      ${num_records}=  Get Length  ${Partition_file_list}
903      Upload Partition File To BMC  file_name=${Partition_file_list}
904      ...  status_code=${HTTP_OK}  expected_message=${FILE_UPLOAD_MESSAGE}  path=${PARTITION_FILE_PATH}
905      Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
906      Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
907    END
908
909