diff --git a/extended/full_suite_regression.robot b/extended/full_suite_regression.robot
deleted file mode 100755
index a4a62a7..0000000
--- a/extended/full_suite_regression.robot
+++ /dev/null
@@ -1,86 +0,0 @@
-*** Settings ***
-Documentation      This suite is for testing Open BMC full test suite.
-...                Maintains log.html output.xml  for each iteration and
-...                generate combined report
-
-Resource  ../lib/utils.robot
-Resource  ../lib/connection_client.robot
-Library  OperatingSystem
-Library  DateTime
-
-Suite Setup         Open Connection And Log In
-Suite Teardown      Close All Connections
-
-Force Tags  Full_Suite_Regression
-
-*** Variables ***
-${ITERATION}          10
-${RESULT_DIR_NAME}    logsdir
-${LOOP_TEST_COMMAND}  tests
-
-*** Test Cases ***
-Validate BMC Model
-   [Documentation]  Check that OPENBMC_MODEL is correct.
-   [Tags]  Validate_BMC_Model
-   ${bmc_model}=  Get BMC System Model
-   ${status}=  Verify BMC System Model  ${bmc_model}
-   Run Keyword If  '${status}'=='False'  Fatal Error  Wrong System
-
-Run Entire Test Suite Multiple Time
-   [Documentation]  Multiple iterations of Full Suite
-
-   Should Be True  0<${ITERATION}
-
-   ${timestamp}=  Get Current Date  result_format=%Y%m%d%H%M%S
-   ${tmp_result_dir_path}=  Catenate  ${RESULT_DIR_NAME}${timestamp}
-   Set Suite Variable  ${RESULT_DIR_PATH}  ${tmp_result_dir_path}
-   Log To Console  ${RESULT_DIR_PATH}
-   Create Directory  ${RESULT_DIR_PATH}
-
-   FOR    ${INDEX}    IN RANGE    0    ${ITERATION}
-     Log To Console  \n Iteration:   no_newline=True
-     Log To Console  ${INDEX}
-     Run  OPENBMC_HOST=${OPENBMC_HOST} tox -e ${OPENBMC_SYSTEMMODEL} -- ${LOOP_TEST_COMMAND}
-     Run  sed -i 's/'${OPENBMC_HOST}'/DUMMYIP/g' output.xml
-     Copy File  output.xml   ${RESULT_DIR_PATH}/output${INDEX}.xml
-     Copy File  log.html   ${RESULT_DIR_PATH}/log${INDEX}.html
-   END
-
-
-Create Combined Report
-   [Documentation]  Using output[?].xml and create combined log.html
-   [Tags]  Create_Combined_Report
-
-   Run  rebot --name ${OPENBMC_SYSTEMMODEL}CombinedReport ${RESULT_DIR_PATH}/output*.xml
-
-   ${current_time}=  Get Current Date  result_format=%Y%m%d%H%M%S
-   ${combined_report_file}=  Catenate  SEPARATOR=  ${EXECDIR}
-   ...  /logs/CombinedLogReport${current_time}.html
-
-   Copy File  log.html  ${combined_report_file}
-
-   Run Keyword And Ignore Error  Convert HTML To PDF  ${combined_report_file}
-
-*** Keywords ***
-
-Convert HTML To PDF
-   [Documentation]  Convert HTML to PDF in order to support GitHub
-   ...  attachment.
-   [Arguments]  ${combined_report_html_file_path}
-   # Description of arguments:
-   # combined_report_html_file_path  Combined report file in HTML format.
-
-   Log To Console  \n ${combined_report_html_file_path}
-   ${combined_report_pdf_file_path}=
-   ...  Fetch From Left  ${combined_report_html_file_path}  .
-   # Compose combined_report_pdf_file_path.
-   ${combined_report_pdf_file_path}=  Catenate  SEPARATOR=
-   ...  ${combined_report_pdf_file_path}  .pdf
-   # wkhtmltopdf tool is to convert HTML to PDF
-   ${output}=  Run  which wkhtmltopdf
-   Should Not Be Empty  ${output}
-   ...  msg=wkhtmltopdf not installed, Install from http://wkhtmltopdf.org
-   ${output}=
-   ...  Run  wkhtmltopdf ./${combined_report_html_file_path} ./${combined_report_pdf_file_path}
-   Should Not Be Empty  ${output}
-   OperatingSystem.File Should Exist  ${combined_report_pdf_file_path}
diff --git a/extended/test_host_auto_reboot.robot b/extended/test_host_auto_reboot.robot
deleted file mode 100644
index 15e0534..0000000
--- a/extended/test_host_auto_reboot.robot
+++ /dev/null
@@ -1,80 +0,0 @@
-*** Settings ***
-
-Documentation       Test auto reboot functionality of host.
-
-Resource            ../lib/openbmc_ffdc.robot
-Resource            ../lib/rest_client.robot
-Resource            ../lib/state_manager.robot
-Resource            ../lib/boot_utils.robot
-
-Test Teardown       Test Teardown Execution
-Suite Teardown      Suite Teardown Execution
-
-*** Variables ***
-
-
-*** Test Cases ***
-
-Verify Host Quiesce State Without Auto Reboot During Boot
-    [Documentation]  Validate "Quiesce" state during boot.
-    [Tags]  Verify_Host_Quiesce_State_Without_Auto_Reboot_During_Boot
-    [Template]  Verify Host Quiesce State
-
-    # Auto Reboot   Initial Host State     Expected Host Action
-    ${0}               Booting                No Reboot
-
-
-Verify Host Quiesce State With Auto Reboot During Boot
-    [Documentation]  Validate "Quiesce" state during boot.
-    [Tags]  Verify_Host_Quiesce_State_With_Auto_Reboot_During_Boot
-    [Template]  Verify Host Quiesce State
-
-    # Auto Reboot   Initial Host State     Expected Host Action
-    ${1}               Booting                Reboot
-
-
-*** Keywords ***
-
-Verify Host Quiesce State
-    [Documentation]  Inject watchdog error on host to reach "Quiesce" state.
-    ...  Later recover host from this state.
-    [Arguments]  ${auto_reboot}  ${initial_host_state}  ${action}
-    # Description of argument(s):
-    # auto_reboot          Auto reboot setting
-    #                      i.e 1 for enabling and 0 for disabling.
-    # initial_host_state   State of host before injecting error.
-    # action               Action of host due to error ("No Reboot" or
-    #                      "Reboot").
-
-    Set Auto Reboot  ${auto_reboot}
-
-    Run Keyword If  '${initial_host_state}' == 'Booting'
-    # Booting refers to host OS starting in progress.
-    ...  Run Keywords  Get Boot Progress To OS Starting State
-
-    Trigger Host Watchdog Error
-    ${resp}=  Run Keyword And Return Status  Is Host Rebooted
-
-    Run Keyword If  '${action}' == 'No Reboot'
-    ...  Run Keywords  Should Be Equal  ${resp}  ${False}  AND
-    ...  Wait Until Keyword Succeeds  3 min  5 sec  Is Host Quiesced  AND
-    ...  Recover Quiesced Host
-    ...  ELSE IF  '${action}' == 'Reboot'
-    ...  Wait Until Keyword Succeeds  3 min  5 sec  Is Host Rebooted
-
-
-Test Teardown Execution
-    [Documentation]  Do the post test teardown.
-    ...  1. Capture FFDC on test failure.
-    ...  2. Set default value for auto reboot.
-    ...  3. Close all open SSH connections.
-
-    FFDC On Test Case Fail
-    Set Auto Reboot  ${1}
-    Close All Connections
-
-Suite Teardown Execution
-    [Documentation]  Do the suite test teardown.
-
-    ${status}=  Is Host Quiesced
-    Run Keyword If  ${status} == ${True}  Smart Power Off
diff --git a/extended/test_rest_user_management.robot b/extended/test_rest_user_management.robot
deleted file mode 100644
index 479f9b4..0000000
--- a/extended/test_rest_user_management.robot
+++ /dev/null
@@ -1,71 +0,0 @@
-*** Settings ***
-Documentation   OpenBMC user management test.
-
-Resource         ../lib/rest_client.robot
-Resource         ../lib/openbmc_ffdc.robot
-Resource         ../lib/utils.robot
-Library          SSHLibrary
-
-Test Teardown    Test Teardown Execution
-
-*** Variables ****
-
-${test_password}   0penBmc123
-
-*** Test Cases ***
-
-
-Verify At Least One User In List
-    [Documentation]  Verify user list API list minimum one user.
-    [Tags]  Verify_At_Least_One_User_In_List
-    [Teardown]  FFDC On Test Case Fail
-
-    ${bmc_user_uris}=  Read Properties  ${BMC_USER_URI}list
-    Valid Value  bmc_user_uris
-
-
-Verify Root Password Update
-    [Documentation]  Update system "root" user password and verify.
-    [Tags]  Verify_Root_Password_Update
-
-    Delete All Sessions
-
-    Initialize OpenBMC
-    Update Root Password  ${test_password}
-
-    # Time for user manager to sync.
-    Sleep  5 s
-
-    Delete All Sessions
-
-    # SSH Login to BMC with new "root" password.
-    SSHLibrary.Open Connection  ${OPENBMC_HOST}
-    SSHLibrary.Login  ${OPENBMC_USERNAME}  ${test_password}
-
-    # REST Login to BMC with new "root" password.
-    Initialize OpenBMC  rest_password=${test_password}
-
-    ${resp}=  GET On Session  openbmc  ${BMC_USER_URI}enumerate
-    Valid Value  resp.status_code  [${HTTP_OK}]
-
-
-*** Keywords ***
-
-Test Teardown Execution
-    [Documentation]  Do test teardown task.
-
-    # REST Login to BMC with new "root" password.
-    Initialize OpenBMC  rest_password=${test_password}
-    Update Root Password
-    Sleep  5 s
-    Delete All Sessions
-
-    # SSH Login to BMC with user default "root" password.
-    SSHLibrary.Open Connection  ${OPENBMC_HOST}
-    SSHLibrary.Login  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
-
-    # REST Login to BMC with user default "root" password.
-    Initialize OpenBMC
-
-    FFDC On Test Case Fail
-    Close All Connections
diff --git a/extended/test_sbe_side_switch.robot b/extended/test_sbe_side_switch.robot
deleted file mode 100644
index 7e2bdfd..0000000
--- a/extended/test_sbe_side_switch.robot
+++ /dev/null
@@ -1,105 +0,0 @@
-*** Settings ***
-Documentation       Test SBE side switching with watchdog errors.
-
-Library             ../lib/state.py
-Library             ../lib/utils.py
-Variables           ../data/variables.py
-Resource            ../lib/boot_utils.robot
-Resource            ../lib/state_manager.robot
-
-Test Setup          Test Setup Execution
-Test Teardown       Test Teardown Execution
-
-*** Variables ***
-
-${sbe_side_bit_mask}  ${0x00004000}
-
-*** Test Cases ***
-
-Test SBE Side Switch
-    [Documentation]  Trigger watchdog errors on the host until it side
-    ...  switches.
-    [Tags]  Test_SBE_Side_Switch
-
-    REST Power On
-
-    ${attempts_left}=  Read Attribute  /xyz/openbmc_project/state/host0
-    ...  AttemptsLeft
-    Should Be Equal As Strings  ${attempts_left}  3
-    ...  msg=Expects boot attempts left 3, but got ${attempts_left}.
-
-    # Get which side the SBE is booted with. By default 0.
-    ${sbe_val}=  Get SBE
-    ${sbe_cur_side}=  Evaluate  ${sbe_side_bit_mask} & ${sbe_val}
-
-    Trigger Watchdog Error To Switch SBE Boot Side
-
-    # Next Power on check if host booting is in progress.
-    Wait Until Keyword Succeeds  2 min  30 sec  Watchdog Object Should Exist
-
-    # Verify that the side has switched.
-    ${sbe_val}=  Get SBE
-    ${sbe_orig_side}=  Evaluate  ${sbe_side_bit_mask} & ${sbe_val}
-
-    Run Keyword If  ${sbe_orig_side} == ${0}
-    ...      Should Be True  ${sbe_cur_side} == ${sbe_side_bit_mask}
-    ...      msg=SBE seeprom side is 1.
-    ...  ELSE
-    ...      Should Be True  ${sbe_cur_side} == ${0}
-    ...      msg=SBE seeprom side is 0.
-
-    # Verify that host booted on the current SBE side.
-    Wait Until Keyword Succeeds  10 min  10 sec  Is Host Running
-
-
-*** Keywords ***
-
-Test Setup Execution
-    [Documentation]  Do the test setup execution.
-
-    Delete All Error Logs
-    Set Auto Reboot  ${1}
-    Smart Power Off
-
-
-Test Teardown Execution
-    [Documentation]  Do the test teardown execution.
-    FFDC On Test Case Fail
-    Smart Power Off
-
-
-Watchdog Object Should Exist
-    [Documentation]  Watchdog object should exist.
-
-    ${resp}=  OpenBMC Get Request  ${WATCHDOG_URI}  quiet=${1}
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
-    ...  msg=Failed to get ${WATCHDOG_URI}, response = ${resp.status_code}.
-
-
-Trigger Watchdog Error To Switch SBE Boot Side
-    [Documentation]  Trigger watchdog error to force SBE boot side switch.
-
-    # 20 second wait is introduced to ensure host boot progress at least
-    # crossed the initial istep booting sequence.
-
-    Trigger Host Watchdog Error
-    ${attempts_left}=  Read Attribute  /xyz/openbmc_project/state/host0
-    ...  AttemptsLeft
-    Should Be Equal As Strings  ${attempts_left}  2
-    ...  msg=Expects boot attempts left 2, but got ${attempts_left}.
-
-    Wait Until Keyword Succeeds  2 min  30 sec  Watchdog Object Should Exist
-    Sleep  20 s
-    Trigger Host Watchdog Error
-    ${attempts_left}=  Read Attribute  /xyz/openbmc_project/state/host0
-    ...  AttemptsLeft
-    Should Be Equal As Strings  ${attempts_left}  1
-    ...  msg=Expects boot attempts left 1, but got ${attempts_left}.
-
-    Wait Until Keyword Succeeds  2 min  30 sec  Watchdog Object Should Exist
-    Sleep  20 s
-    Trigger Host Watchdog Error
-    ${attempts_left}=  Read Attribute  /xyz/openbmc_project/state/host0
-    ...  AttemptsLeft
-    Should Be Equal As Strings  ${attempts_left}  0
-    ...  msg=Expects boot attempts left 0, but got ${attempts_left}.
diff --git a/extended/test_watchdog.robot b/extended/test_watchdog.robot
deleted file mode 100644
index c15f7f1..0000000
--- a/extended/test_watchdog.robot
+++ /dev/null
@@ -1,148 +0,0 @@
-*** Settings ***
-Documentation          This suite tests HOST watchdog timer in Open BMC.
-
-Resource               ../lib/rest_client.robot
-Resource               ../lib/openbmc_ffdc.robot
-Resource               ../lib/utils.robot
-Resource               ../lib/resource.robot
-Resource               ../lib/boot_utils.robot
-Resource               ../lib/state_manager.robot
-
-Suite Setup            Suite Setup Execution
-Suite Teardown         Suite Teardown Execution
-Test Teardown          FFDC On Test Case Fail
-
-*** Variables ***
-# "skip" boots that aren't needed to get to desired state.
-${stack_mode}  skip
-
-*** Test Cases ***
-
-Verify Watchdog Setting With Watchdog Disabled
-    [Documentation]  Disable watchdog timer and verify watchdog settings
-    ...              i.e Enabled, Interval, TimeRemaining.
-    [Tags]  Verify_Watchdog_Setting_With_Watchdog_Disabled
-
-    ${initial_interval}=  Read Attribute  ${HOST_WATCH_DOG_URI}  Interval
-    Set Watchdog Setting Using REST  Enabled  ${False}
-
-    # Check if watchdog has default settings.
-    ${properties}=  Read Properties  /xyz/openbmc_project/watchdog/host0
-    Should Be Equal As Strings  ${properties["Enabled"]}  ${False}
-    Should Be Equal As Strings  ${properties["Interval"]}  ${initial_interval}
-    Should Be Equal As Strings  ${properties["TimeRemaining"]}  0
-
-
-Verify Watchdog Setting With Watchdog Enabled
-    [Documentation]  Enable watchdog timer and check if host OS is rebooted
-    ...              and verify hostdog settings are reset to default when
-    ...              host OS is up.
-    [Tags]  Verify_Watchdog_Setting_With_Watchdog_Enabled
-
-    ${initial_interval}=  Read Attribute  ${HOST_WATCHDOG_URI}  Interval
-
-    Trigger Host Watchdog Error  2000  30
-
-    Wait Until Keyword Succeeds  3 min  10 sec  Watchdog Object Should Exist
-
-    # Verify if watchdog settings are enabled and timeremaining is reduced.
-    Wait Until Keyword Succeeds  3 min  10 sec  Verify Watchdog Enabled
-
-    Wait Until Keyword Succeeds  300 sec  20 sec  Is Host Rebooted
-    Wait For Host To Ping  ${OS_HOST}  5min  10
-    Wait for OS
-
-    # Check if watchdog settings are reset when host OS is up.
-    ${properties}=  Read Properties  /xyz/openbmc_project/watchdog/host0
-    Should Be Equal As Strings  ${properties["Enabled"]}  ${False}
-    Should Be Equal As Strings  ${properties["Interval"]}  ${initial_interval}
-    Should Be Equal As Strings  ${properties["TimeRemaining"]}  0
-
-
-Modify And Verify Watchdog Timer Interval
-    [Documentation]  Modify and verify watchdog timer interval.
-    [Tags]  Modify_And_Verify_Watchdog_Timer_Interval
-    [Teardown]  Set Watchdog Setting Using REST  Interval  ${initial_interval}
-
-    ${initial_interval}=  Read Attribute  ${HOST_WATCHDOG_URI}  Interval
-    ${random_int}=  Evaluate  random.randint(10000, 20000)  modules=random
-    Set Watchdog Setting Using REST  Interval  ${random_int}
-    ${modified_time_interval}=  Read Attribute  ${HOST_WATCHDOG_URI}  Interval
-    Should Be Equal As Strings  ${modified_time_interval}  ${random_int}
-
-
-Modify And Verify Watchdog TimeRemaining
-    [Documentation]  Modify and verify watchdog 'TimeRemaining'.
-    [Tags]  Modify_And_Verify_Watchdog_TimeRemaining
-
-    ${random_int}=  Evaluate  random.randint(10000, 20000)  modules=random
-    Set Watchdog Setting Using REST  TimeRemaining  ${random_int}
-    ${modified_timeremain}=
-    ...  Read Attribute  ${HOST_WATCHDOG_URI}  TimeRemaining
-    Should Not Be Equal As Strings  ${random_int}  ${modified_timeremain}
-
-
-Verify Watchdog URL When Host Is On And Off
-    [Documentation]  Verify watchdog URL when host is running
-    ...              and when host is off.
-    [Tags]           Verify_Watchdog_URL_When_Host_Is_On_And_Off
-
-    ${resp}=  OpenBMC Get Request  ${HOST_WATCHDOG_URI}
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
-
-    REST Power Off
-    ${resp}=  OpenBMC Get Request  ${HOST_WATCHDOG_URI}
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND}
-
-
-*** Keywords ***
-
-Suite Setup Execution
-    [Documentation]   Do test initialization setup.
-    # Check input parameters & check if host OS is up.
-
-    Should Not Be Empty
-    ...   ${OS_HOST}  msg=You must provide the host name/host IP address.
-    Should Not Be Empty
-    ...   ${OS_USERNAME}  msg=You must provide OS host user name.
-    Should Not Be Empty
-    ...   ${OS_PASSWORD}  msg=You must provide OS host user password.
-
-    # Boot to OS.
-    REST Power On
-
-    # Enable auto reboot
-    Set Auto Reboot  ${1}
-
-Suite Teardown Execution
-    [Documentation]  Restore watchdog Default setting.
-
-    # Boot to OS.
-    REST Power On
-    Set Watchdog Setting Using REST  Enabled  ${False}
-
-    Close All Connections
-
-Set Watchdog Setting Using REST
-    [Documentation]  Set watchdog setting using REST with a given input
-    ...              attribute values.
-    [Arguments]  ${setting_name}  ${value}
-
-    # Description of argument(s):
-    # setting_name  The name of the watchdog setting
-    #               (e.g. "Enabled", "Interval", etc.).
-    # value         Watchdog setting value(e.g. "Enabled":boolean,
-    #               "Interval":Integer, "TimeRemaining":Integer)
-
-    ${valueDict}=  Create Dictionary  data=${value}
-    ${resp}=  OpenBMC Put Request  ${HOST_WATCHDOG_URI}attr/${setting_name}
-    ...       data=${valueDict}
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
-
-
-Watchdog Object Should Exist
-    [Documentation]  Check if watchdog object exist.
-
-    ${resp}=  OpenBMC Get Request  ${WATCHDOG_URI}host0
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
-
