diff --git a/openpower/ext_interfaces/test_savearea_management.robot b/openpower/ext_interfaces/test_savearea_management.robot
new file mode 100644
index 0000000..123b923
--- /dev/null
+++ b/openpower/ext_interfaces/test_savearea_management.robot
@@ -0,0 +1,245 @@
+*** 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/utils.robot
+
+Suite Setup    Suite Setup Execution
+Test Teardown  Test Teardown Execution
+
+
+*** Variables ***
+
+${MAX_SIZE_UPLOAD_MSG}  File size exceeds 200KB. Maximum allowed size is 200KB
+${FILE_UPLOADED_MSG}    File Created
+
+
+*** Test Cases ***
+
+Verify Small Partition File Upload And Delete
+    [Documentation]  Verify small partition file upload and delete.
+    [Tags]  Verify_Small_Partition_File_Upload_And_Delete
+    [Template]  Upload File To Create Partition Then Delete Partition
+
+    # file_name  size_kb  partition_name  expect_resp_code     expected_msg             delete_partition
+    201KB_file   201      201KB           ${HTTP_BAD_REQUEST}  ${MAX_SIZE_UPLOAD_MSG}   ${True}
+    15KB_file    15       15KB            ${HTTP_OK}           ${FILE_UPLOADED_MSG}     ${True}
+    200KB_file   200      200KB           ${HTTP_OK}           ${FILE_UPLOADED_MSG}     ${True}
+
+
+Verify Multiple Files Upload
+    [Documentation]  Verify multiple files upload.
+    [Tags]  Verify_Multiple_Files_Upload
+    [Template]  Upload File To Create Partition Then Delete Partition
+
+    # file_name  size_kb  partition_name  expect_resp_code     expected_msg             delete_partition
+    0KB_file     0        0KB             ${HTTP_OK}           ${FILE_UPLOADED_MSG}     ${False}
+    10KB_file    10       10KB            ${HTTP_OK}           ${FILE_UPLOADED_MSG}     ${False}
+    50KB_file    50       50KB            ${HTTP_OK}           ${FILE_UPLOADED_MSG}     ${False}
+    250KB_file   250      250KB           ${HTTP_BAD_REQUEST}  ${MAX_SIZE_UPLOAD_MSG}   ${False}
+    15KB_file    15       15KB            ${HTTP_OK}           ${FILE_UPLOADED_MSG}     ${False}
+    199KB_file   199      199KB           ${HTTP_OK}           ${FILE_UPLOADED_MSG}     ${False}
+
+
+Verify Read Partition
+    [Documentation]  Verify read partition.
+    [Tags]  Verify_Read_Partition
+
+    Set Test Variable  ${file_name}  testfile
+    Set Test Variable  ${partition_name}  part_read
+    Set Test Variable  ${content}  Sample Content to test partition file upload
+
+    Run  echo "${content}" > ${file_name}
+    OperatingSystem.File Should Exist  ${file_name}
+
+    Upload File To Create Partition Then Delete Partition  ${file_name}  1  ${partition_name}
+    ...  delete_partition=${False}
+
+    Read Partition And Verify Content  ${partition_name}  ${content}
+
+
+*** Keywords ***
+
+Create Partition File
+    [Documentation]  Create partition file.
+    [Arguments]  ${file_name}=dummyfile  ${size_kb}=15
+
+    # Description of argument(s):
+    # file_name           Name of the test file to be created. Examples:  p1.log, part1.txt etc.
+    # size_kb             Size of the test file to be created in KB, deafult is 15KB.
+    #                     Example : 15, 200 etc.
+
+    ${file_exist}=  Run Keyword And Return Status  OperatingSystem.File Should Exist  ${file_name}
+    Return From Keyword If  ${file_exist}  ${True}
+
+    # Create a partition file if it does not exist locally.
+    Run  dd if=/dev/zero of=${file_name} bs=1 count=0 seek=${size_kb}KB
+    OperatingSystem.File Should Exist  ${file_name}
+
+
+Upload File To Create Partition Then Delete Partition
+    [Documentation]  Upload file to create partition the delete partition.
+    [Arguments]  ${file_name}=dummyfile  ${size_kb}=15  ${partition_name}=p1  ${expect_resp_code}=${HTTP_OK}
+    ...  ${expected_msg}=File Created  ${delete_partition}=${True}
+
+    # Description of argument(s):
+    # file_name           Name of the test file to be created.
+    # partition_name      Name of the partition on BMC.
+    # expect_resp_code    Expected REST response code, default is ${HTTP_OK}.
+    # expected_msg        Expected message from file upload, default is 'File Created'.
+    # delete_partition    Partition will be deleted if this is True.
+
+    # Create a partition file.
+    Create Partition File  ${file_name}  ${size_kb}
+
+    # Get the content of the file and upload to BMC.
+    ${image_data}=  OperatingSystem.Get Binary File  ${file_name}
+    ${data}=  Create Dictionary  data  ${image_data}
+    ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}
+
+    Set To Dictionary  ${data}  headers  ${headers}
+    ${resp}=  Put Request  openbmc  /ibm/v1/Host/ConfigFiles/${partition_name}  &{data}
+    Should Be Equal As Strings  ${resp.status_code}  ${expect_resp_code}
+
+    # Upload Success will have a response body as :
+    #           {
+    #             "Description": "File Created"
+    #           }
+    ${message}=  evaluate  json.loads('''${resp.text}''')  json
+    Should Be Equal As Strings  ${message["Description"]}  ${expected_msg}
+
+    # Cleanup local space after upload attempt.
+    Run Keyword And Ignore Error  Delete Local File Created To Upload  ${file_name}
+
+    ${upload_success}=  Set Variable If   ${expect_resp_code} != ${HTTP_OK}  ${False}  ${True}
+    Verify Partition Available On BMC  ${partition_name}  ${upload_success}
+
+    # Delete partition and verify on BMC.
+    Return From Keyword If  ${delete_partition} == ${False}
+    ${del_resp_code}=  Set Variable If  ${expect_resp_code} != ${HTTP_OK}  ${HTTP_NOT_FOUND}  ${HTTP_OK}
+    Delete Partition  ${partition_name}  ${del_resp_code}
+    Verify Partition Available On BMC  ${partition_name}  ${False}
+
+
+Get List Of Partitions
+    [Documentation]  Get list of partitions.
+    [Arguments]  ${expect_resp_code}=${HTTP_OK}
+
+    # Description of argument(s):
+    # expect_resp_code    Expected REST response code, default is ${HTTP_OK}.
+
+    ${resp}=  Get Request  openbmc  /ibm/v1/Host/ConfigFiles
+    Should Be Equal As Strings  ${resp.status_code}  ${expect_resp_code}
+    Return From Keyword If  ${expect_resp_code} != ${HTTP_OK}
+
+    ${resp_json}=  To JSON  ${resp.content}
+    ${partitions_cnt}=  Get Length  ${resp_json['Members']}
+
+    [Return]  ${resp_json['Members']}  ${partitions_cnt}
+
+
+Verify Partition Available On BMC
+    [Documentation]  Verify partition available on BMC.
+    [Arguments]  ${partition_name}=${EMPTY}  ${operation_status}=${True}
+
+    # Description of argument(s):
+    # partition_name    Name of the partition on BMC.
+    # operation_success   Status of the previous operation like upload/delete success or failure.
+    #                     True if operation was a success else False.
+
+
+    ${partitions}  ${partitions_cnt}=  Get List Of Partitions
+    ${rest_response}=  Run Keyword And Return Status  List Should Contain Value  ${partitions}
+    ...  /ibm/v1/Host/ConfigFiles/${partition_name}
+
+    ${status}  ${stderr}  ${rc}=  BMC Execute Command
+    ...  ls -l /var/lib/obmc/bmc-console-mgmt/save-area/${partition_name} | wc -l
+    ${bmc_response}=  Run Keyword And Return Status  Should Be True  ${status} == ${1}
+
+    Run Keyword If  '${partition_name}' == '${EMPTY}'  Run Keywords
+    ...  Should Be Equal  ${rest_response}  ${False}  AND  Should Be Equal  ${bmc_response}  ${False}
+
+    Run Keyword And Return If  '${partition_name}' != '${EMPTY}'  Run Keywords
+    ...  Should Be True  ${rest_response} == ${operation_status}  AND
+    ...  Should Be True  ${bmc_response} == ${operation_status}
+
+
+Delete Partition
+    [Documentation]  Delete partition.
+    [Arguments]  ${partition_name}='${EMPTY}'  ${expect_resp_code}=${HTTP_OK}
+
+    # Description of argument(s):
+    # partition_name      Name of the partition on BMC.
+    # expect_resp_code    Expected REST response code, default is ${HTTP_OK}.
+
+    ${data}=  Create Dictionary
+    ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}
+    Set To Dictionary  ${data}  headers  ${headers}
+
+    ${resp}=  Delete Request  openbmc  /ibm/v1/Host/ConfigFiles/${partition_name}  &{data}
+    ${expect_resp_code}=  Set Variable If  '${partition_name}' == '${EMPTY}'
+    ...  ${HTTP_NOT_FOUND}  ${expect_resp_code}
+    Should Be Equal As Strings  ${resp.status_code}  ${expect_resp_code}
+
+
+Delete And Verify All Partitions on BMC
+    [Documentation]  Delete and verify all partitions on BMC.
+    [Arguments]  ${expect_resp_code}=${HTTP_OK}
+
+    # Description of argument(s):
+    # expect_resp_code    Expected REST response code, default is ${HTTP_OK}.
+
+    ${data}=  Create Dictionary
+    ${headers}=  Create Dictionary  X-Auth-Token=${XAUTH_TOKEN}
+    Set To Dictionary  ${data}  headers  ${headers}
+
+    ${resp}=  Post Request  openbmc  /ibm/v1/Host/ConfigFiles/Actions/FileCollection.DeleteAll  &{data}
+    Should Be Equal As Strings  ${resp.status_code}  ${expect_resp_code}
+
+    Return From Keyword If  ${expect_resp_code} != ${HTTP_OK}
+    Verify Partition Available On BMC  operation_status=${False}
+
+
+Read Partition And Verify Content
+    [Documentation]  Read partition and verify content.
+    [Arguments]  ${partition_name}=p1  ${content}=${EMPTY}  ${expect_resp_code}=${HTTP_OK}
+
+    # Description of argument(s):
+    # partition_name      Name of the partition on BMC.
+    # content             Content of the partition file uploaded.
+    # expect_resp_code    Expected REST response code, default is ${HTTP_OK}.
+
+    ${resp}=  Get Request  openbmc  /ibm/v1/Host/ConfigFiles/${partition_name}
+    Should Be Equal As Strings  ${resp.status_code}  ${expect_resp_code}
+
+    ${partition_data}=  Remove String  ${resp.text}  \\n
+    ${partition_data}=  Evaluate  json.loads('''${partition_data}''')  json
+    Should Be Equal As Strings  ${partition_data["Data"]}  ${content}
+
+
+Delete Local File Created To Upload
+    [Documentation]  Delete local file created to upload.
+    [Arguments]  ${file_name}
+
+    # Description of argument(s):
+    # file_name       Name of the local file to be deleted.
+
+    Run Keyword And Ignore Error  Run  rm -f ${file_name}
+
+
+Suite Setup Execution
+    [Documentation]  Suite setup execution.
+
+    # Get REST session to BMC.
+    Initialize OpenBMC
+
+
+Test Teardown Execution
+    [Documentation]  Test teardown execution.
+
+    Delete And Verify All Partitions on BMC
+#    FFDC On Test Case Fail
+
