diff --git a/redfish/systems/eventlog/test_event_association.robot b/redfish/systems/eventlog/test_event_association.robot
deleted file mode 100755
index cfdfd66..0000000
--- a/redfish/systems/eventlog/test_event_association.robot
+++ /dev/null
@@ -1,307 +0,0 @@
-*** Settings ***
-Documentation       REST test Error callout association.
-
-Resource            ../../../lib/bmc_redfish_resource.robot
-Resource            ../../../lib/bmc_redfish_utils.robot
-Resource            ../../../lib/connection_client.robot
-Resource            ../../../lib/openbmc_ffdc.robot
-Resource            ../../../lib/utils.robot
-Resource            ../../../lib/state_manager.robot
-Resource            ../../../lib/boot_utils.robot
-
-
-Suite Setup         Suite Setup Execution
-Suite Teardown      Suite Teardown Execution
-Test Setup          Test Setup Execution
-Test Teardown       FFDC On Test Case Fail
-
-Test Tags          Event_Association
-
-***Variables***
-${target_device_path}  /sys/devices/platform/gpio-fsi/fsi0/slave@00:00/raw
-
-${stack_mode}          skip
-
-*** Test Cases ***
-
-Create Test Error Callout And Verify
-    [Documentation]  Create error log callout and verify via REST.
-    [Tags]  Create_Test_Error_Callout_And_Verify
-
-    Create Test Error With Callout
-    Verify Test Error Log And Callout
-
-
-Create Test Error Callout And Verify AdditionalData
-    [Documentation]  Create Test Error Callout And Verify AdditionalData.
-    [Tags]  Create_Test_Error_Callout_And_Verify_AdditionalData
-
-    # Test error log entry example:
-    #  "/xyz/openbmc_project/logging/entry/1": {
-    #  "AdditionalData": [
-    #      "CALLOUT_DEVICE_PATH_TEST=/sys/devices/platform/fsi-master/slave@00:00",
-    #      "CALLOUT_ERRNO_TEST=0",
-    #      "DEV_ADDR=0x0DEADEAD"
-    #    ]
-
-    Create Test Error With Callout
-    ${elog_entry}=  Get Elog URL List
-    ${resp}=  OpenBMC Get Request  ${elog_entry[0]}
-    List Should Contain Value
-    ...  ${resp.json()["data"]["AdditionalData"]}  CALLOUT_DEVICE_PATH_TEST=${target_device_path}
-    List Should Contain Value  ${resp.json()["data"]["AdditionalData"]}  DEV_ADDR=0x0DEADEAD
-
-
-Create Test Error Callout And Verify Associations
-    [Documentation]  Create test error callout and verify Associations.
-    [Tags]  Create_Test_Error_Callout_And_Verify_Associations
-
-    # Test error log association entry example:
-    # "Associations": [
-    #   [
-    #        "callout",
-    #        "fault",
-    #        "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #   ]
-    # ]
-
-    Create Test Error With Callout
-    ${elog_entry}=  Get Elog URL List
-    ${resp}=  OpenBMC Get Request  ${elog_entry[0]}
-    List Should Contain Value  ${resp.json()["data"]["Associations"][0]}  callout
-    List Should Contain Value  ${resp.json()["data"]["Associations"][0]}  fault
-    List Should Contain Value
-    ...  ${resp.json()["data"]["Associations"][0]}
-    ...  /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
-
-
-Create Test Error Callout And Delete
-    [Documentation]  Create Test Error Callout And Delete.
-    [Tags]  Create_Test_Error_Callout_And_Delete
-
-    # Test error log entry example:
-    #  "/xyz/openbmc_project/logging/entry/1": {
-    #  "AdditionalData": [
-    #      "CALLOUT_DEVICE_PATH_TEST=/sys/devices/platform/fsi-master/slave@00:00",
-    #      "CALLOUT_ERRNO_TEST=0",
-    #      "DEV_ADDR=0x0DEADEAD"
-    #    ],
-    #    "Id": 1,
-    #    "Message": "example.xyz.openbmc_project.Example.Elog.TestCallout",
-    #    "Resolved": 0,
-    #    "Severity": "xyz.openbmc_project.Logging.Entry.Level.Error",
-    #    "Timestamp": 1487747332528,
-    #    "Associations": [
-    #        [
-    #          "callout",
-    #          "fault",
-    #          "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #        ]
-    #    ]
-    # },
-    # "/xyz/openbmc_project/logging/entry/1/callout": {
-    #    "endpoints": [
-    #        "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #    ]
-    # },
-
-    Create Test Error With Callout
-    ${elog_entry}=  Get Elog URL List
-    Delete Error Log Entry  ${elog_entry[0]}
-    ${resp}=  OpenBMC Get Request  ${elog_entry[0]}/callout
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND}
-
-
-Create Two Test Error Callout And Delete
-    [Documentation]  Create Two Test Error Callout And Delete.
-    [Tags]  Create_Two_Test_Error_Callout_And_Delete
-
-    # Test error log entry example:
-    #  "/xyz/openbmc_project/logging/entry/1": {
-    #  "AdditionalData": [
-    #      "CALLOUT_DEVICE_PATH_TEST=/sys/devices/platform/fsi-master/slave@00:00",
-    #      "CALLOUT_ERRNO_TEST=0",
-    #      "DEV_ADDR=0x0DEADEAD"
-    #    ],
-    #    "Id": 1,
-    #    "Message": "example.xyz.openbmc_project.Example.Elog.TestCallout",
-    #    "Resolved": 0,
-    #    "Severity": "xyz.openbmc_project.Logging.Entry.Level.Error",
-    #    "Timestamp": 1487747332528,
-    #    "Associations": [
-    #        [
-    #          "callout",
-    #          "fault",
-    #          "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #        ]
-    #    ]
-    # },
-    # "/xyz/openbmc_project/logging/entry/1/callout": {
-    #    "endpoints": [
-    #        "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #    ]
-    # },
-    # "/xyz/openbmc_project/logging/entry/2": {
-    #  "AdditionalData": [
-    #      "CALLOUT_DEVICE_PATH_TEST=/sys/devices/platform/fsi-master/slave@00:00",
-    #      "CALLOUT_ERRNO_TEST=0",
-    #      "DEV_ADDR=0x0DEADEAD"
-    #    ],
-    #    "Id": 2,
-    #    "Message": "example.xyz.openbmc_project.Example.Elog.TestCallout",
-    #    "Resolved": 0,
-    #    "Severity": "xyz.openbmc_project.Logging.Entry.Level.Error",
-    #    "Timestamp": 1487747332528,
-    #    "Associations": [
-    #        [
-    #          "callout",
-    #          "fault",
-    #          "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #        ]
-    #    ]
-    # },
-    # "/xyz/openbmc_project/logging/entry/2/callout": {
-    #    "endpoints": [
-    #        "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #    ]
-    # },
-
-    # Create two error logs.
-    Create Test Error With Callout
-    Create Test Error With Callout
-
-    # Delete entry/2 elog entry.
-    ${elog_entry}=  Get Elog URL List
-    Delete Error Log Entry  ${elog_entry[1]}
-
-    # Verify if entry/1 exist and entry/2 is deleted.
-    ${resp}=  OpenBMC Get Request  ${elog_entry[0]}
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
-    ${resp}=  OpenBMC Get Request  ${elog_entry[1]}
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND}
-
-
-Create Test Error Callout And Verify LED
-    [Documentation]  Create an error log callout and verify respective
-    ...  LED state.
-    [Tags]  Create_Test_Error_Callout_And_Verify_LED
-
-    Create Test Error With Callout
-
-    ${resp}=  Get LED State XYZ  cpu0_fault
-    Should Be Equal  ${resp}  ${1}
-
-
-Set Resolved Field And Verify Callout Deletion
-    [Documentation]  Set the "Resolved" error log and verify callout is deleted
-    [Tags]  Set_Resolved_Field_And_Verify_Callout_Deletion
-
-    Delete All Error Logs
-    Create Test Error With Callout
-    ${elog_entry}=  Get URL List  ${BMC_LOGGING_ENTRY}
-    ${resp}=  OpenBMC Get Request  ${elog_entry[0]}
-    Should Contain  ${resp.json()["data"]["Associations"][0]}  callout
-
-    # Set the error log field "Resolved".
-    # By doing so, the callout object should get deleted automatically.
-    ${valueDict}=  Create Dictionary  data=${1}
-    OpenBMC Put Request  ${elog_entry[0]}/attr/Resolved  data=${valueDict}
-
-    # Verify if the callout entry is deleted.
-    ${resp}=  OpenBMC Get Request  ${elog_entry[0]}/callout
-    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_NOT_FOUND}
-
-*** Keywords ***
-
-Callout Test Binary Exist
-    [Documentation]  Verify existence of prerequisite callout-test.
-
-    Open Connection And Log In
-    ${out}  ${stderr}=  Execute Command
-    ...  which /tmp/tarball/bin/callout-test  return_stderr=True
-    Should Be Empty  ${stderr}
-    Should Contain  ${out}  callout-test
-
-
-Create Test Error With Callout
-    [Documentation]  Generate test error log with callout for CPU0.
-
-    # Test error log entry example:
-    #  "/xyz/openbmc_project/logging/entry/4": {
-    #  "AdditionalData": [
-    #      "CALLOUT_DEVICE_PATH_TEST=/sys/devices/platform/fsi-master/slave@00:00",
-    #      "CALLOUT_ERRNO_TEST=0",
-    #      "DEV_ADDR=0x0DEADEAD"
-    #    ],
-    #    "Id": 4,
-    #    "Message": "example.xyz.openbmc_project.Example.Elog.TestCallout",
-    #    "Resolved": 0,
-    #    "Severity": "xyz.openbmc_project.Logging.Entry.Level.Error",
-    #    "Timestamp": 1487747332528,
-    #    "Associations": [
-    #        [
-    #          "callout",
-    #          "fault",
-    #          "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #        ]
-    #    ]
-    # },
-    # "/xyz/openbmc_project/logging/entry/4/callout": {
-    #    "endpoints": [
-    #        "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0"
-    #    ]
-    # },
-
-    BMC Execute Command
-    ...  /tmp/tarball/bin/callout-test ${target_device_path}
-
-Verify Test Error Log And Callout
-    [Documentation]  Verify test error log entries.
-    ${elog_entry}=  Get Elog URL List
-    ${resp}=  OpenBMC Get Request  ${elog_entry[0]}
-
-    Should Be Equal  ${resp.json()["data"]["Message"]}
-    ...  example.xyz.openbmc_project.Example.Elog.TestCallout
-
-    Should Be Equal  ${resp.json()["data"]["Severity"]}
-    ...  xyz.openbmc_project.Logging.Entry.Level.Error
-
-    ${content}=  Read Attribute  ${elog_entry[0]}/callout  endpoints
-
-    Should Be Equal  ${content[0]}
-    ...  /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
-
-
-Test Setup Execution
-    [Documentation]  Do test case setup tasks.
-
-    ${status}=  Run Keyword And Return Status  Callout Test Binary Exist
-    Run Keyword If  ${status} == ${False}  Install Tarball
-    Delete All Error Logs
-
-
-Install Tarball
-    [Documentation]  Install tarball on BMC.
-
-    Run Keyword If  '${DEBUG_TARBALL_PATH}' == '${EMPTY}'  Return from Keyword
-    BMC Execute Command  rm -rf /tmp/tarball
-    Install Debug Tarball On BMC  ${DEBUG_TARBALL_PATH}
-
-
-Suite Setup Execution
-   [Documentation]  Do test case setup tasks.
-
-    Redfish.Login
-
-    Redfish Purge Event Log
-
-    Redfish Power On  stack_mode=skip  quiet=1
-
-    ${status}=  Run Keyword And Return Status  Logging Test Binary Exist
-    Run Keyword If  ${status} == ${False}  Install Tarball
-
-
-Suite Teardown Execution
-    [Documentation]  Do the post suite teardown.
-
-    Redfish.Logout
