*** Settings ***

Documentation     Test Save Area feature of Management Console on BMC.

Resource          ../../lib/rest_client.robot
Resource          ../../lib/openbmc_ffdc.robot
Resource          ../../lib/resource.robot
Resource          ../../lib/bmc_redfish_utils.robot
Resource          ../../lib/utils.robot
Resource          ../../lib/bmc_redfish_resource.robot
Resource          ../../lib/external_intf/management_console_utils.robot

Suite Setup       Suite Setup Execution
Test Teardown     Test Teardown Execution
Suite Teardown    Suite Teardown Execution

*** Variables ***

${MAXIMUM_FILE_SIZE_MESSAGE}        File size exceeds maximum allowed size[25MB]
${MAXIMUM_DIR_SIZE_MESSAGE}
...   File size does not fit in the savearea directory maximum allowed size[25MB]
${FILE_UPLOAD_MESSAGE}              File Created
${FILE_DELETED_MESSAGE}             File Deleted
${FILE_UPDATED_MESSAGE}             File Updated
${FORBIDDEN_MESSAGE}                Forbidden
${ERROR_MESSAGE}                    Error while creating the file
${RESOURCE_NOT_FOUND_MESSAGE}       Resource Not Found
${MINIMUM_FILE_SIZE_MESSAGE}        File size is less than minimum allowed size[100B]
${MAXIMUM_FILE_NAME_MESSAGE}        Filename must be maximum 20 characters
${UNSUPPORTED_FILE_NAME_MESSAGE}    Unsupported character in filename

${content-1}                        Sample Content to test partition file upload
...  Sample Content to test partition file upload
...  Sample Content to test partition file upload
${content-2}                        Sample Content to test partition file upload after reboot
...  Sample Content to test partition file upload after reboot
...  Sample Content to test partition file upload after reboot

${LOOP_COUNT}                       10

*** Test Cases ***

Redfish Upload Lower Limit Partition File To BMC
    [Documentation]  Upload lower limit of allowed partition file to BMC using Redfish.
    [Tags]  Redfish_Upload_Lower_Limit_Partition_File_To_BMC
    [Template]  Redfish Upload Partition File

    # file_name
    100-file


Redfish Upload Partition File To BMC
    [Documentation]  Upload partition file to BMC using Redfish.
    [Tags]  Redfish_Upload_Partition_File_To_BMC
    [Template]  Redfish Upload Partition File

    # file_name
    500KB-file
    2000KB-file
    10000KB-file
    25000KB-file


Test Upload Lower Limit Partition File To BMC And Expect Failure
    [Documentation]  Fail to upload partition file to BMC with file size
    ...  below the lower limit of allowed partition file size using Redfish.
    [Tags]  Test_Upload_Lower_Limit_Partition_File_To_BMC_And_Expect_Failure
    [Template]  Redfish Fail To Upload Partition File

    # file_name    status_code            partition_status    response_message
    99-file        ${HTTP_BAD_REQUEST}    0                   ${MINIMUM_FILE_SIZE_MESSAGE}


Test Upload Upper Limit Partition File To BMC And Expect Failure
    [Documentation]  Fail to upload partition file to BMC with file size
    ...  more than upper limit of allowed partition file size using Redfish.
    [Tags]  Test_Upload_Upper_Limit_Partition_File_To_BMC_And_Expect_Failure
    [Template]  Redfish Fail To Upload Partition File

    # file_name     status_code            partition_status    response_message
    25001KB-file    ${HTTP_BAD_REQUEST}    0                   ${MAXIMUM_FILE_SIZE_MESSAGE}


Redfish Upload Multiple Partition File To BMC
    [Documentation]  Upload multiple partition file to BMC using Redfish.
    [Tags]  Redfish_Upload_Multiple_Partition_File_To_BMC
    [Template]  Redfish Upload Partition File

    # file_name
    250KB-file,500KB-file


Test Upload Partition File When BMC Space Reach Max And Expect Failure
    [Documentation]  Fail to upload multiple partition file to BMC
    ...  as BMC directory reach to upper limit using Redfish.
    [Tags]  Test_Upload_Partition_File_When_BMC_Space_Reach_Max_And_Expect_Failure
    [Template]  Redfish Fail To Upload Partition File

    # file_name     status_code            partition_status    response_message
    15000KB-file    ${HTTP_OK}             1                   ${FILE_UPLOAD_MESSAGE}
    16000KB-file    ${HTTP_BAD_REQUEST}    0                   ${MAXIMUM_DIR_SIZE_MESSAGE}
    25000KB-file    ${HTTP_OK}             1                   ${FILE_UPLOAD_MESSAGE}
    100-file        ${HTTP_BAD_REQUEST}    0                   ${MAXIMUM_DIR_SIZE_MESSAGE}


Redfish Upload Same Partition File To BMC In Loop
    [Documentation]  Upload same partition file to BMC using Redfish in loop.
    [Tags]  Redfish_Upload_Same_Partition_File_To_BMC_In_Loop
    [Template]  Redfish Upload Partition File In Loop

    # file_name
    500KB-file


Redfish Upload And Delete Same Partition File To BMC In Loop
    [Documentation]  Upload same partition file to BMC using Redfish in loop.
    [Tags]  Redfish_Upload_And_Delete_Same_Partition_File_To_BMC_In_Loop
    [Template]  Redfish Upload And Delete Partition File In Loop

    # file_name
    500KB-file


Redfish Partition File Upload Post BMC Reboot
    [Documentation]  Upload partition file to BMC using Redfish, after the BMC reboot.
    [Tags]  Redfish_Partition_File_Upload_Post_BMC_Reboot
    [Template]  Verify Partition File Upload Post BMC Reboot

    # file_name
    500KB-file


Redfish Partition File Persistency On BMC Reboot
    [Documentation]  Upload partition file to BMC using Redfish and is same after reboot.
    [Tags]  Redfish_Partition_File_Persistency_On_BMC_Reboot
    [Template]  Redfish Partition File Persistency

    # file_name
    500KB-file


Redfish Multiple Partition File Persistency On BMC Reboot
    [Documentation]  Upload multiple partition file to BMC using Redfish and is same after reboot.
    [Tags]  Redfish_Multiple_Partition_File_Persistency_On_BMC_Reboot
    [Template]  Redfish Partition File Persistency

    # file_name
    250KB-file,500KB-file


Redfish Read Partition File From BMC
    [Documentation]  Upload partition file to BMC using Redfish and verify the content.
    [Tags]  Redfish_Read_Partition_File_From_BMC
    [Template]  Redfish Read Partition File

    # file_name                      reboot_flag
    testfile01-file                  False
    testfile01-file,testfile02-file  False


Redfish Read Partition File Post BMC Reboot
    [Documentation]  Upload partition file to BMC using Redfish and verify the content after reboot.
    [Tags]  Redfish_Read_Partition_File_Post_BMC_Reboot
    [Template]  Redfish Read Partition File

    # file_name                      reboot_flag
    testfile01-file                  True
    testfile01-file,testfile02-file  True


Redfish Update Partition File On BMC
    [Documentation]  Upload partition file to BMC using Redfish and verify the content.
    [Tags]  Redfish_Update_Partition_File_On_BMC
    [Template]  Redfish Update Partition File With Different Content

    # file_name                 reboot_flag
    testfile01-file             False


Redfish Update Partition File On BMC Reboot
    [Documentation]  Upload partition file to BMC using Redfish and verify the content after the reboot.
    [Tags]  Redfish_Update_Partition_File_On_BMC_Reboot
    [Template]  Redfish Update Partition File With Different Content

    # file_name                 reboot_flag
    testfile01-file             True


Redfish Persistency Update Partition File On BMC
    [Documentation]  Upload partition file to BMC using Redfish and verify the content.
    [Tags]  Redfish_Persistency_Update_Partition_File_On_BMC
    [Template]  Redfish Update Partition File With Same Content

    # file_name                 reboot_flag
    testfile01-file             False


Redfish Delete Non Existence Of Partition File
    [Documentation]  Delete the partition file if do not exists.
    [Tags]  Redfish_Delete_Non_Existence_Of_Partition_File
    [Template]  Redfish Delete Non Existence Partition File

    # file_name
    testfile01-file


Verify One Thousand Partitions File Upload
    [Documentation]  Upload 1000 partition file to BMC.
    [Tags]  Verify_One_Thousand_Partitions_File_Upload
    [Template]  Redfish Upload Partition File With Range

    # range
    1000


Non Admin Users Fail To Upload Partition File
    [Documentation]  Non admin user will fail to upload the partition file.
    [Tags]  Non_Admin_Users_Fail_To_Upload_Partition_File
    [Template]  Non Admin User To Upload Partition File

    # file_name    username         password       role_id
    500KB-file     operator_user    TestPwd123     Operator


Non Admin User Delete Non Existence Of Partition File
    [Documentation]  Delete the partition file if does not exists.
    [Tags]  Non_Admin_User_Delete_Non_Existence_Of_Partition_File
    [Template]  Non Admin Delete Non Existence Partition File

    # file_name    username         password       role_id
    500KB-file     operator_user    TestPwd123     Operator


Redfish Update Wrong Partition File To BMC
    [Documentation]  Upload partition file to BMC by wrong URI using Redfish.
    [Tags]  Redfish_Update_Wrong_Partition_File_To_BMC
    [Template]  Verify Update Wrong Partition File To BMC

    # file_name
    500KB-file


Test Redfish Upload Partition File Name With Character Limit To BMC
    [Documentation]  Upload partition file to BMC with file name character allowed limit
    ...  and above allowed limit using Redfish.
    [Tags]  Test_Redfish_Upload_Partition_File_Name_With_Character_Limit_To_BMC
    [Template]  Check Redfish Upload Partition File Name With Character Limit To BMC

    # file_name              status_code            message
    50KB-testfilesavfile     ${HTTP_OK}             ${FILE_UPLOAD_MESSAGE}
    50KB-testsaveareafile    ${HTTP_BAD_REQUEST}    ${MAXIMUM_FILE_NAME_MESSAGE}


Test Redfish Fail To Upload Partition File Name With Special Character To BMC
    [Documentation]  Upload partition file to BMC with special character file name and
    ...  Redfish through an error.
    [Tags]  Test_Redfish_Fail_To_Upload_Partition_File_Name_With_Special_Character_To_BMC
    [Template]  Check Redfish Fail To Upload Partition File Name With Special Character To BMC

    # file_name      status_code            message
    1KB-*filename    ${HTTP_BAD_REQUEST}    ${UNSUPPORTED_FILE_NAME_MESSAGE}
    1KB-!filename    ${HTTP_BAD_REQUEST}    ${UNSUPPORTED_FILE_NAME_MESSAGE}
    1KB-@filename    ${HTTP_BAD_REQUEST}    ${UNSUPPORTED_FILE_NAME_MESSAGE}


Redfish Persistency Update Partition File Post BMC Reboot
    [Documentation]  Upload partition file to BMC using Redfish and verify the content after the reboot.
    [Tags]  Redfish_Persistency_Update_Partition_File_Post_BMC_Reboot
    [Template]  Redfish Update Partition File With Same Content

    # file_name                 reboot_flag
    testfile01-file             True


Redfish Upload Validated Partition File From Path To BMC
   [Documentation]  Upload valid partition file to BMC from file path define by user in loop.
   ...  By default loop count values is 10 times.
   [Tags]  Redfish_Upload_Validated_Partition_File_From_Path_To_BMC

   Log To Console  ${EMPTY}
   FOR  ${count}  IN RANGE  1  ${LOOP_COUNT} + 1
     Log To Console  **************************************
     Log To Console  * The Current Loop Count is ${count} of ${LOOP_COUNT} *
     Log To Console  **************************************

     Redfish Upload Partition File From Path  ${PARTITION_FILE_PATH}
   END

*** Keywords ***

Suite Setup Execution
    [Documentation]  Suite setup execution.

    Redfish.Login


Test Teardown Execution
    [Documentation]  Test teardown execution.

    Delete All BMC Partition File  ${HTTP_OK}
    FFDC On Test Case Fail


Suite Teardown Execution
    [Documentation]  Suite teardown execution.

    Delete All Sessions


Delete Local Partition File
    [Documentation]  Delete local partition file.
    [Arguments]  ${file_name}

    # Description of argument(s):
    # file_name    Partition file name.

    FOR  ${conf_file}  IN  @{file_name}
      ${file_exist}=  Run Keyword And Return Status  OperatingSystem.File Should Exist  ${conf_file}
      Run Keyword If  'True' == '${file_exist}'  Remove File  ${conf_file}
    END


Delete Local Server Partition File
    [Documentation]  Local partition files which is getting uploaded to BMC,
    ...  will get deleted after the uploads. If partition file name consist
    ...  of “-file” then partition file gets deleted.

    @{conf_file_list} =  OperatingSystem.List Files In Directory  ${EXECDIR}
    ${match_conf_file_list}=  Get Matches  ${conf_file_list}  regexp=.*-file  case_insensitive=${True}

    ${num_records}=  Get Length  ${match_conf_file_list}
    Return From Keyword If  ${num_records} == ${0}  ${EMPTY}

    FOR  ${conf_file}  IN  @{match_conf_file_list}
      ${file_exist}=  Run Keyword And Return Status  OperatingSystem.File Should Exist  ${conf_file}
      Run Keyword If  'True' == '${file_exist}'  Remove File  ${conf_file}
    END


Create Partition File
    [Documentation]  Create Partition file.
    [Arguments]  ${file_name}

    # Description of argument(s):
    # file_name    Partition file name.

    Delete Local Partition File  ${file_name}

    FOR  ${conf_file}  IN  @{file_name}
      @{words}=  Split String  ${conf_file}  -
      Run  dd if=/dev/zero of=${conf_file} bs=${words}[-0] count=1
      OperatingSystem.File Should Exist  ${conf_file}
    END


Delete BMC Partition File
    [Documentation]  Delete single partition file on BMC via Redfish.
    [Arguments]  ${file_name}  ${status_code}  ${expected_message}

    # Description of argument(s):
    # file_name           Partition file name.
    # status_code         HTTPS status code.
    # expected_message    Expected message of URI.

    FOR  ${conf_file}  IN  @{file_name}
      ${data}=  Create Dictionary
      ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}
      Set To Dictionary  ${data}  headers  ${headers}

      ${resp}=  DELETE On Session  openbmc  /ibm/v1/Host/ConfigFiles/${conf_file}  &{data}
      ...  expected_status=any
      Should Be Equal As Strings  ${resp.status_code}  ${status_code}

      ${description}=  Return Description Of Response  ${resp.text}
      Should Be Equal As Strings  ${description}  ${expected_message}
    END


Delete All BMC Partition File
    [Documentation]  Delete multiple partition file on BMC via Redfish.
    [Arguments]  ${status_code}

    # Description of argument(s):
    # status_code       HTTPS status code.

    Initialize OpenBMC
    ${data}=  Create Dictionary
    ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}
    Set To Dictionary  ${data}  headers  ${headers}

    ${resp}=  POST On Session  openbmc  /ibm/v1/Host/ConfigFiles/Actions/IBMConfigFiles.DeleteAll  &{data}
    ...  expected_status=any
    Should Be Equal As Strings  ${resp.status_code}  ${status_code}


Return Description Of Response
    [Documentation]  Return description of REST response.
    [Arguments]  ${resp_text}

    # Description of argument(s):
    # resp_text    REST response body.

    # resp_text after successful partition file upload looks like:
    # {
    #    "Description": "File Created"
    # }

    ${status}=  Run Keyword And Return Status  Evaluate  isinstance(${resp_text}, dict)
    Return From Keyword If  '${status}' == 'False'  ${resp_text}
    ${message}=  Evaluate  json.loads('''${resp_text}''')  json

    [Return]  ${message["Description"]}


Upload Partition File To BMC
    [Documentation]  Upload partition file to BMC.
    [Arguments]  ${file_name}  ${status_code}  ${expected_message}  ${flag}=${True}  ${path}=${EMPTY}

    # Description of argument(s):
    # file_name           Partition file name.
    # status_code         HTTPS status code.
    # expected_message    Expected message of URI.
    # flag                If True run part of program, else skip.
    # path                Partition file path.

    Run Keyword If  '${flag}' == '${True}'  Initialize OpenBMC
    FOR  ${conf_file}  IN  @{file_name}
      # Get the content of the file and upload to BMC.
      ${image_data}=  OperatingSystem.Get Binary File  ${path}${conf_file}
      ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}  Content-Type=application/octet-stream

      ${kwargs}=  Create Dictionary  data=${image_data}
      Set To Dictionary  ${kwargs}  headers  ${headers}
      ${resp}=  PUT On Session  openbmc  /ibm/v1/Host/ConfigFiles/${conf_file}  &{kwargs}  timeout=10
      ...  expected_status=any
      Should Be Equal As Strings  ${resp.status_code}  ${status_code}

      ${description}=  Return Description Of Response  ${resp.text}
      Should Be Equal As Strings  ${description}  ${expected_message}
    END


Verify Partition File On BMC
    [Documentation]  Verify partition file on BMC.
    [Arguments]  ${file_name}  ${Partition_status}

    # Description of argument(s):
    # file_name           Partition file name.
    # Partition_status    Partition file status on BMC.

    FOR  ${conf_file}  IN  @{file_name}
      ${status}  ${stderr}  ${rc}=  BMC Execute Command
      ...  ls -l /var/lib/bmcweb/ibm-management-console/configfiles/${conf_file} | wc -l
      Valid Value  ${status}  [${Partition_status}]
    END


Redfish Upload Partition File
    [Documentation]  Upload the partition file.
    [Arguments]  ${file_name}  ${file_size}=${EMPTY}

    # Description of argument(s):
    # file_name    Partition file name.
    # file_size    By Default is set to EMPTY,
    #              if user pass small_file_size the create file with small
    #              size keyword gets executed.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    ${num_records}=  Get Length  ${Partition_file_list}

    Create Partition File  ${Partition_file_list}

    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Run Keyword If  ${num_records} == ${1}
    ...    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
    ...  ELSE
    ...    Delete All BMC Partition File  ${HTTP_OK}
    Delete Local Partition File  ${Partition_file_list}


Redfish Fail To Upload Partition File
    [Documentation]  Fail to upload the partition file.
    [Arguments]  ${file_name}  ${status_code}  ${partition_status}  ${response_message}=${EMPTY}

    # Description of argument(s):
    # file_name           Partition file name.
    # status_code         HTTPS status code.
    # partition_status    Partition status.
    # response_message    By default is set to EMPTY,
    #                     else user provide the information when user upload the partition with file size
    #                     below lower linit of allowed partition or more than of large allowed partition.

    @{Partition_file_list} =  Split String  ${file_name}  ,

    Create Partition File  ${Partition_file_list}
    Upload Partition File To BMC  ${Partition_file_list}  ${status_code}  ${response_message}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=${partition_status}

    Run Keyword If  ${partition_status} == 0
    ...  Run Keywords
    ...  Delete BMC Partition File
    ...  ${Partition_file_list}  ${HTTP_NOT_FOUND}  ${RESOURCE_NOT_FOUND_MESSAGE}  AND
    ...  Delete All BMC Partition File  ${HTTP_OK}  AND
    ...  Delete Local Server Partition File

    Delete Local Partition File  ${Partition_file_list}


Redfish Upload Partition File In Loop
    [Documentation]  Upload the same partition file multiple times in loop to BMC.
    [Arguments]  ${file_name}

    # Description of argument(s):
    # file_name    Partition file name.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    Create Partition File  ${Partition_file_list}

    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1

    FOR  ${count}  IN RANGE  1  11
      Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPDATED_MESSAGE}
      Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    END

    Initialize OpenBMC
    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
    Delete Local Partition File  ${Partition_file_list}


Redfish Upload And Delete Partition File In Loop
    [Documentation]  Upload the same partition file multiple times in loop to BMC.
    [Arguments]  ${file_name}

    # Description of argument(s):
    # file_name    Partition file name.

    FOR  ${count}  IN RANGE  1  11
      Redfish Upload Partition File  ${file_name}
    END


Verify Partition File Upload Post BMC Reboot
    [Documentation]  Upload the partition file, after BMC reboot.
    [Arguments]  ${file_name}

    # Description of argument(s):
    # file_name    Partition file name.

    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
    Redfish BMC Reset Operation
    Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}

    Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled
    Is BMC Standby

    Redfish Upload Partition File  ${file_name}


Redfish Partition File Persistency
    [Documentation]  Upload the partition file and check for persistency after reboot.
    [Arguments]  ${file_name}

    # Description of argument(s):
    # file_name    Partition file name.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    ${num_records}=  Get Length  ${Partition_file_list}
    Create Partition File  ${Partition_file_list}
    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1

    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}
    Redfish BMC Reset Operation
    Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}

    Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled
    Is BMC Standby

    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Initialize OpenBMC
    Run Keyword If  ${num_records} == ${1}
    ...    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
    ...  ELSE
    ...    Delete All BMC Partition File  ${HTTP_OK}
    Delete Local Partition File  ${Partition_file_list}


Verify Redfish Partition File Content
    [Documentation]  Verify partition file content.
    [Arguments]  ${file_name}  ${content_dict}  ${status_code}

    # Description of argument(s):
    # file_name       Partition file name.
    # content_dict    Dict contain the content.
    # status_code     HTTPS status code.

    FOR  ${conf_file}  IN  @{file_name}
      ${resp}=  GET On Session  openbmc  /ibm/v1/Host/ConfigFiles/${conf_file}
      ...  expected_status=any
      Should Be Equal As Strings  ${resp.status_code}  ${status_code}

      ${Partition_file_data}=  Remove String  ${resp.text}  \\n
      ${Partition_file_data}=  Evaluate  json.loads('''${Partition_file_data}''')  json
      Should Be Equal As Strings  ${Partition_file_data["Data"]}  ${content_dict['${conf_file}']}
    END


Add Content To Files
    [Documentation]  Add defined content in partition file.
    [Arguments]  ${file_name}  ${index}=${0}

    # Description of argument(s):
    # file_name    Partition file name.
    # index        Index

    ${num_records}=  Get Length  ${file_name}
    &{content_dict}=  Create Dictionary

    FOR  ${conf_file}  IN  @{file_name}
       ${index}=  Get Index From List  ${file_name}  ${conf_file}
       ${index}=  Evaluate  ${index} + 1

       Run  echo "${content-${index}}" > ${conf_file}
       OperatingSystem.File Should Exist  ${conf_file}

       Set To Dictionary  ${content_dict}  ${conf_file}  ${content-${index}}
    END

    [Return]  &{content_dict}


Redfish Read Partition File
    [Documentation]  Read partition file content.
    [Arguments]  ${file_name}  ${reboot_flag}=False

    # Description of argument(s):
    # file_name      Partition file name.
    # reboot_flag    Reboot flag.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    ${content_dict}=  Add Content To Files  ${Partition_file_list}

    ${num_records}=  Get Length  ${Partition_file_list}

    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}

    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}

    Run Keyword If  ${True} == ${reboot_flag}
    ...  Run Keywords  Redfish BMC Reset Operation  AND
    ...  Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}  AND
    ...  Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled  AND
    ...  Is BMC Standby  AND
    ...  Initialize OpenBMC  AND
    ...  Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}

    Run Keyword If  ${num_records} == ${1}
    ...    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
    ...  ELSE
    ...    Delete All BMC Partition File  ${HTTP_OK}

    Delete Local Partition File  ${Partition_file_list}


Redfish Update Partition File With Same Content
    [Documentation]  Update partition file with same content.
    [Arguments]  ${file_name}  ${reboot_flag}=False

    # Description of argument(s):
    # file_name      Partition file name.
    # reboot_flag    Reboot flag.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    ${content_dict}=  Add Content To Files  ${Partition_file_list}  ${0}

    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}

    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}

    Run Keyword If  ${True} == ${reboot_flag}
    ...  Run Keywords  Redfish BMC Reset Operation  AND
    ...  Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}  AND
    ...  Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled  AND
    ...  Is BMC Standby  AND
    ...  Initialize OpenBMC

    ${content_dict}=  Add Content To Files  ${Partition_file_list}  ${0}
    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPDATED_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}

    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
    Delete Local Partition File  ${Partition_file_list}


Redfish Update Partition File With Different Content
    [Documentation]  Update partition file with different content.
    [Arguments]  ${file_name}  ${reboot_flag}=False

    # Description of argument(s):
    # file_name      Partition file name.
    # reboot_flag    Reboot flag.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    ${content_dict}=  Add Content To Files  ${Partition_file_list}  ${0}

    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}

    ${before_reboot_xauth_token}=  Set Variable  ${XAUTH_TOKEN}

    Run Keyword If  ${True} == ${reboot_flag}
    ...  Run Keywords  Redfish BMC Reset Operation  AND
    ...  Set Global Variable  ${XAUTH_TOKEN}  ${before_reboot_xauth_token}  AND
    ...  Wait Until Keyword Succeeds  3 min  10 sec  Redfish BMC Match States  match_state=Enabled  AND
    ...  Is BMC Standby  AND
    ...  Initialize OpenBMC

    ${content_dict}=  Add Content To Files  ${Partition_file_list}  ${1}
    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPDATED_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Verify Redfish Partition File Content  ${Partition_file_list}  ${content_dict}  ${HTTP_OK}

    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
    Delete Local Partition File  ${Partition_file_list}


Create File Names
    [Documentation]  Create partition file names.
    [Arguments]  ${range}

    # Description of argument(s):
    # range    Range in numbers.

    @{file_name_list}=  Create List
    Set Test Variable  ${file_name}  rangefile
    FOR  ${count}  IN RANGE  ${range}
      Append To List  ${file_name_list}  1KB-file${count}
    END
    [Return]  ${file_name_list}


Redfish Upload Partition File With Range
    [Documentation]  Upload the partition file with the range of files.
    [Arguments]  ${range}

    # Description of argument(s):
    # range    Range in numbers.

    ${Partition_file_list}=  Create File Names  ${range}
    Delete Local Partition File  ${Partition_file_list}
    Create Partition File  ${Partition_file_list}
    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_OK}  ${FILE_UPLOAD_MESSAGE}
    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Delete All BMC Partition File  ${HTTP_OK}
    Delete Local Partition File  ${Partition_file_list}


Redfish Delete Non Existence Partition File
    [Documentation]  Delete the partition file if do not exists.
    [Arguments]  ${file_name}

    # Description of argument(s):
    # file_name    Partition file name.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_NOT_FOUND}  ${RESOURCE_NOT_FOUND_MESSAGE}


Non Admin User To Upload Partition File
    [Documentation]  Non admin user to upload the partition file.
    [Arguments]  ${file_name}  ${username}  ${password}  ${role}  ${enabled}=${True}

    # Description of argument(s):
    # file_name    Partition file name.
    # username     Username.
    # password     Password.
    # role         Role of user.
    # enabled      Value can be True or False.

    Redfish Create User  ${username}  ${password}  ${role}  ${enabled}
    Delete All Sessions
    Initialize OpenBMC  rest_username=${username}  rest_password=${password}
    @{Partition_file_list} =  Split String  ${file_name}  ,
    Create Partition File  ${Partition_file_list}
    Upload Partition File To BMC  ${Partition_file_list}  ${HTTP_FORBIDDEN}  ${FORBIDDEN_MESSAGE}  ${False}
    Delete Local Partition File  ${Partition_file_list}
    Redfish.Delete  /redfish/v1/AccountService/Accounts/${username}


Non Admin Delete Non Existence Partition File
    [Documentation]  Non admin user to upload the partition file.
    [Arguments]  ${file_name}  ${username}  ${password}  ${role}  ${enabled}=${True}

    # Description of argument(s):
    # file_name    Partition file name.
    # username     Username.
    # password     Password.
    # role         Role of user.
    # enabled      Value can be True or False.

    Redfish Create User  ${username}  ${password}  ${role}  ${enabled}
    Delete All Sessions
    Initialize OpenBMC  rest_username=${username}  rest_password=${password}
    @{Partition_file_list} =  Split String  ${file_name}  ,
    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_FORBIDDEN}  ${FORBIDDEN_MESSAGE}


Verify Update Wrong Partition File To BMC
    [Documentation]  Upload the wrong partition file to BMC.
    [Arguments]  ${file_name}

    # Description of argument(s):
    # file_name    Partition file name.

    Redfish.Login
    ${resp}=  Run Keyword And Return Status
    ...  Redfish.Put  /ibm/v1/Host/ConfigFiles/../../../../../etc/resolv.conf  body={"data": "test string"}
    Should Be Equal As Strings  ${resp}  False


Check Redfish Upload Partition File Name With Character Limit To BMC
    [Documentation]  Upload the partition file to BMC with file name character limit.
    [Arguments]  ${file_name}  ${status_code}  ${message}

    # Description of argument(s):
    # file_name       Partition file name.
    # status_code     HTTPS status code.
    # message         Expected message of from upload partition file URI.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    ${num_records}=  Get Length  ${Partition_file_list}
    Create Partition File  ${Partition_file_list}

    ${file_name_length}=  Get Length  ${Partition_file_list}[0]

    Run Keyword If  ${file_name_length} == 20
    ...  Run Keywords
    ...    Upload Partition File To BMC  ${Partition_file_list}  ${status_code}  ${message}  AND
    ...    Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1  AND
    ...    Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
    ...  ELSE
    ...    Upload Partition File To BMC  ${Partition_file_list}  ${status_code}  ${message}

    Delete Local Partition File  ${Partition_file_list}


Check Redfish Fail To Upload Partition File Name With Special Character To BMC
    [Documentation]  Upload the partition file to BMC with special character file name.
    [Arguments]  ${file_name}  ${status_code}  ${message}

    # Description of argument(s):
    # file_name       Partition file name.
    # status_code     HTTPS status code.
    # message         Expected message from upload partition file URI.

    @{Partition_file_list} =  Split String  ${file_name}  ,
    ${num_records}=  Get Length  ${Partition_file_list}

    Create Partition File  ${Partition_file_list}

    Upload Partition File To BMC  ${Partition_file_list}  ${status_code}  ${message}

    ${status}=  Run Keyword And Return Status
    ...  Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
    Should Be Equal As Strings  ${status}  False

    Delete Local Partition File  ${Partition_file_list}


Redfish Upload Partition File From Path
    [Documentation]  Upload the partition file to BMC from file path.
    [Arguments]  ${PARTITION_FILE_PATH}

    # Description of argument(s):
    # PARTITION_FILE_PATH    Partition file path.

    ${file_list} =  OperatingSystem.List Files In Directory  ${PARTITION_FILE_PATH}

    ${num_records}=  Get Length  ${file_list}
    Should Not Be Equal As Integers  ${num_records}  0

    FOR  ${file_name}  IN  @{file_list}
      @{Partition_file_list} =  Split String  ${file_name}  ,
      ${num_records}=  Get Length  ${Partition_file_list}
      Upload Partition File To BMC  file_name=${Partition_file_list}
      ...  status_code=${HTTP_OK}  expected_message=${FILE_UPLOAD_MESSAGE}  path=${PARTITION_FILE_PATH}
      Verify Partition File On BMC  ${Partition_file_list}  Partition_status=1
      Delete BMC Partition File  ${Partition_file_list}  ${HTTP_OK}  ${FILE_DELETED_MESSAGE}
    END

