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