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