diff --git a/Makefile b/Makefile
index 5195311..c0b918c 100644
--- a/Makefile
+++ b/Makefile
@@ -65,6 +65,8 @@
 ROBOT_SANITY_TIM_SINGLE_PON_MULTI_ONU_FILE    ?= $(ROOT_DIR)/tests/data/bbsim-kind-tim-OLTxPONx2ONU.yaml
 ROBOT_SANITY_TIM_MULTI_PON_MULTI_ONU_FILE    ?= $(ROOT_DIR)/tests/data/bbsim-kind-tim-OLTx2PONx2ONU.yaml
 ROBOT_SANITY_TIM_MULTI_OLT_MULTI_PON_MULTI_ONU_FILE    ?= $(ROOT_DIR)/tests/data/bbsim-kind-tim-2OLTx2PONx2ONU.yaml
+ROBOT_SANITY_BBF_ADPATER_SINGLE_PON_FILE    ?= $(ROOT_DIR)/tests/data/bbsim-bbf-adapter.yaml
+ROBOT_SANITY_BBF_ADPATER_ADD_DELETE_FILE    ?= $(ROOT_DIR)/tests/data/bbsim-bbf-adapter_addDelete_tests.yaml
 
 
 # for backwards compatibility
@@ -200,6 +202,22 @@
 openonu-go-adapter-test: ROBOT_FILE := Voltha_ONUStateTests.robot
 openonu-go-adapter-test: openonu-go-adapter-tests
 
+# target to invoke bbf adapter
+bbf-adapter: ROBOT_MISC_ARGS += -i sanityBbfAdapter $(ROBOT_DEBUG_LOG_OPT)
+bbf-adapter: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_BBF_ADPATER_SINGLE_PON_FILE)
+bbf-adapter: ROBOT_FILE := Voltha_BBF_Adapter_Tests.robot
+bbf-adapter: voltha-bbf-adapter-test
+
+bbf-adapter-functionality: ROBOT_MISC_ARGS += -i bbfAdapterFunctionality $(ROBOT_DEBUG_LOG_OPT)
+bbf-adapter-functionality: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_BBF_ADPATER_ADD_DELETE_FILE)
+bbf-adapter-functionality: ROBOT_FILE := Voltha_BBF_Adapter_Tests.robot
+bbf-adapter-functionality: voltha-bbf-adapter-test
+
+bbf-adapter-functionality-single: ROBOT_MISC_ARGS += -i bbfAdapterFunctionalitySingleTest $(ROBOT_DEBUG_LOG_OPT)
+bbf-adapter-functionality-single: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_BBF_ADPATER_ADD_DELETE_FILE)
+bbf-adapter-functionality-single: ROBOT_FILE := Voltha_BBF_Adapter_Tests.robot
+bbf-adapter-functionality-single: voltha-bbf-adapter-test
+
 # target to invoke test with openonu go adapter applying MIB-Upload-Templating
 mib-upload-templating-openonu-go-adapter-test: ROBOT_MISC_ARGS += -i functionalOnuGo
 mib-upload-templating-openonu-go-adapter-test: ROBOT_MISC_ARGS += -e notreadyOnuGo $(ROBOT_DEBUG_LOG_OPT)
@@ -729,6 +747,12 @@
 	cd tests/openonu-go-adapter ;\
 	robot -V $(ROBOT_CONFIG_FILE) $(ROBOT_MISC_ARGS) $(ROBOT_FILE)
 
+voltha-bbf-adapter-test: ROBOT_MISC_ARGS += -e notready  --noncritical non-critical
+voltha-bbf-adapter-test: vst_venv
+	source ./$</bin/activate ; set -u ;\
+	cd tests/bbf-adapter ;\
+	robot -V $(ROBOT_CONFIG_FILE) $(ROBOT_MISC_ARGS) $(ROBOT_FILE)
+
 voltha-memory-leak-test: vst_venv
 	source ./$</bin/activate ; set -u ;\
 	cd tests/memory-leak ;\
diff --git a/VERSION b/VERSION
index 03b7bd6..34728b5 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.11.6
+2.11.7
diff --git a/libraries/bbf_adapter_utilities.robot b/libraries/bbf_adapter_utilities.robot
new file mode 100644
index 0000000..94b71bf
--- /dev/null
+++ b/libraries/bbf_adapter_utilities.robot
@@ -0,0 +1,547 @@
+# Copyright 2022-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# common functions
+
+*** Settings ***
+Documentation     Library for various utilities
+Library           SSHLibrary
+Library           String
+Library           DateTime
+Library           Process
+Library           Collections
+Library           RequestsLibrary
+Library           OperatingSystem
+Library           XML
+Resource          ./k8s.robot
+
+*** Variables ***
+
+*** Keywords ***
+
+Get BBF Device Aggregation
+    [Documentation]     Extract, running an except script, the XML that
+    ...     represent all the Network viewed by the BBF-Adapter and
+    ...     copy it to the ${XMLDestPath}.
+    [Arguments]     ${namespace}    ${XMLDestPath}      ${pathToScript}
+
+    #Remove the previus XML (extract by previus tests)
+    ${rc}    ${exec_pod_name}=    Run and Return Rc and Output
+    ...    rm ${XMLDestPath}
+    #Retrive the Name of the BBF-Adapter Pod
+    ${rc}    ${exec_pod_name}=    Run and Return Rc and Output
+    ...    kubectl get pods -n ${namespace} -l app=bbf-adapter --no-headers | awk 'NR==1{print $1}'
+    #Execute the script that access with SSH to the BBF-Adapter Pod
+    #Run the netopeer2-cli, set up it, and ask to the device-aggregation XML
+    ${rc}   ${output}=      Run and Return Rc and Output
+    ...     expect ${pathToScript}/bbf_device_aggregation.exp ${exec_pod_name}
+    Log     ${output}
+    #Verify if there are some error of connectivity with the Adapter Pod
+    ${expect}=      Get Length      ${output}
+    Run Keyword If    ${expect} <= 100
+    ...    Fail    Impossible to Reach the BBF-Adapter Pod (port-forward/key-exchange?)
+    #Copy From the Pod to the ${XMLDestPath} the XML file
+    Copy File From Pod      ${namespace}    app=bbf-adapter     home/voltha/output.xml     ${XMLDestPath}
+
+OLT XML update From BBF
+    [Documentation]     Extract, running an except script, the XML that
+    ...     represent all the Network viewed by the BBF-Adapter and
+    ...     copy it to the ${XMLDestPath}.
+    [Arguments]    ${dirXML}      ${pathToScript}
+    Get BBF Device Aggregation  ${NAMESPACE}  ${dirXML}  ${pathToScript}
+    ${oltes_bbf}=   Get Olts From XML    ${dirXML}
+    Set Global Variable     ${oltes_bbf}
+
+ONU XML update From BBF
+    [Documentation]     Extract, running an except script, the XML that
+    ...     represent all the Network viewed by the BBF-Adapter and
+    ...     copy it to the ${XMLDestPath}.
+    [Arguments]    ${dirXML}      ${pathToScript}
+    Get BBF Device Aggregation  ${NAMESPACE}  ${dirXML}  ${pathToScript}
+    ${onus_bbf}=   Get Onus From XML   ${dirXML}
+    Set Global Variable     ${onus_bbf}
+
+ALL DEVICES XML update From BBF
+    [Documentation]     Extract, running an except script, the XML that
+    ...     represent all the Network viewed by the BBF-Adapter and
+    ...     copy it to the ${XMLDestPath}.
+    [Arguments]    ${dirXML}      ${pathToScript}
+    Get BBF Device Aggregation  ${NAMESPACE}  ${dirXML}  ${pathToScript}
+    ${all_devices_bbf}=     Get All Devices  ${dirXML}
+    Set Global Variable     ${all_devices_bbf}
+
+Get Devices By Type
+    [Documentation]     Extract ALL the Devices viewed by the BBF-Adapter
+    ...     that there are the type defined: OLT(bbf-dvct:olt), ONU(bbf-dvct:onu)
+    ...     ${XML} is the path to XML file OR the XML itself.
+    ...     Return a List of Defined Devices information
+    [Arguments]     ${XML}      ${typeAsk}
+    #Take the XML file o the XML itself
+    Log     ${XML}
+    ${root}=        Parse XML       ${XML}
+    #Define a list of all the OLTs
+    @{bbf_olts_xml}=    Create List
+    #Navigate in the XML to enter in the Devices and get all Devices in XML
+    @{device} =	Get Elements	${root}	    devices/device
+    ${number_of_devices}=   Get Length  ${device}
+    #Run on all the devices
+    FOR    ${I}    IN RANGE    0    ${number_of_devices}
+        #Verify the correct Type of device that is declared
+        ${type}=    Get Element Text     ${device}[${I}]     type
+        Continue For Loop If    "${type}" != "${typeAsk}"
+        #Append the device with che correct type in the list
+        Append To List    ${bbf_olts_xml}    ${device}[${I}]
+    END
+    Log     ${bbf_olts_xml}
+    [Return]    ${bbf_olts_xml}
+
+Get Olts From XML
+    [Documentation]     Extract ALL the OLTs viewed by the BBF-Adapter
+    ...     ${XML} is the path to XML file OR the XML itself.
+    ...     Return a List of OLTs information.
+    [Arguments]     ${XML}
+    #Get from the XML all OLT
+    ${bbf_olts}=    Get Devices By Type     ${XML}      bbf-dvct:olt
+    #Create a List of OLTs
+    @{bbf_olts_Info}=    Create List
+    ${number_of_olts}=   Get Length  ${bbf_olts}
+    FOR    ${I}    IN RANGE    0    ${number_of_olts}
+        #Enter in the component where there are the information of the OLT
+        ${component}=   Get Element     ${bbf_olts}[${I}]     data/hardware/component
+        #Get from the XML the data
+        ${name}=    Get Element Text     ${component}     name
+        ${hardware_rev}=    Get Element Text     ${component}     hardware-rev
+        ${firmware_rev}=    Get Element Text     ${component}     firmware-rev
+        ${serial_number}=    Get Element Text     ${component}     serial-num
+        ${mfg_name}=    Get Element Text     ${component}     mfg-name
+        ${model_name}=    Get Element Text     ${component}     model-name
+        ${admin_state}=    Get Element Text     ${component}     state/admin-state
+        ${oper_state}=    Get Element Text     ${component}     state/oper-state
+
+        #Define a Dictionary that containe all the information about the OLT
+        #Need to modify when there are add in the XML the connect-state
+        ${bbf_olt}    Create Dictionary
+        ...     name    ${name}
+        ...     hardware_rev    ${hardware_rev}
+        ...     firmware_rev    ${firmware_rev}
+        ...     serial-num    ${serial_number}
+        ...     mfg-name    ${mfg_name}
+        ...     model-name    ${model_name}
+        ...     admin-state   ${admin_state}
+        ...     oper-state    ${oper_state}
+        ...     connect-state   unknown
+
+        Append To List    ${bbf_olts_Info}    ${bbf_olt}
+    END
+    Log     ${bbf_olts_Info}
+    [Return]    ${bbf_olts_Info}
+
+Get Onus From XML
+    [Documentation]     Extract ALL the ONUs viewed by the BBF-Adapter
+    ...     Return a List of ONUs information.
+    [Arguments]     ${XML}
+    #Get all the devices of the specific type
+    ${bbf_onus}=    Get Devices By Type     ${XML}      bbf-dvct:onu
+    #Create a list that will contain all the information of the ONUs
+    @{bbf_onus_Info}=    Create List
+    #Run on the XML compose be ONUs information
+    ${number_of_onus}=   Get Length  ${bbf_onus}
+    FOR    ${I}    IN RANGE    0    ${number_of_onus}
+        #Enter in the component where there are the information of the ONU
+        ${component}=   Get Element     ${bbf_onus}[${I}]     data/hardware/component
+        #Get from the XML the data
+        ${name}=    Get Element Text     ${component}     name
+        ${parent}=    Get Element Text     ${component}     parent
+        ${parent_rel_pos}=    Get Element Text     ${component}     parent-rel-pos
+        ${hardware_rev}=    Get Element Text     ${component}     hardware-rev
+        ${firmware_rev}=    Get Element Text     ${component}     firmware-rev
+        ${serial_number}=    Get Element Text     ${component}     serial-num
+        ${mfg_name}=    Get Element Text     ${component}     mfg-name
+        ${model_name}=    Get Element Text     ${component}     model-name
+        ${admin_state}=    Get Element Text     ${component}     state/admin-state
+        ${oper_state}=    Get Element Text     ${component}     state/oper-state
+        #Enter in the interfaces part
+        ${interfaces}=   Get Element     ${bbf_onus}[${I}]     data/interfaces
+        #Retrive all the information about all the interface of the consider ONU
+        @{onu_interfaces}=      Get Interfaces From Onu XML Interfaces      ${interfaces}
+
+        #Define a Dictionary that containe all the information about the OLT
+        #Need to modify when there are add in the XML the connect-state
+        #Need to modify when there are add in the XML the Onu-Reason
+        ${bbf_onu}    Create Dictionary
+        ...     name    ${name}
+        ...     parent-id      ${parent}
+        ...     parent-rel-pos      ${parent_rel_pos}
+        ...     hardware_rev    ${hardware_rev}
+        ...     firmware_rev    ${firmware_rev}
+        ...     serial-num    ${serial_number}
+        ...     mfg-name    ${mfg_name}
+        ...     model-name    ${model_name}
+        ...     admin-state   ${admin_state}
+        ...     oper-state    ${oper_state}
+        ...     connect-state    unknown
+        ...     onu-reason    omci-flows-pushed
+        ...     interfaces    ${onu_interfaces}
+
+        Append To List    ${bbf_onus_Info}    ${bbf_onu}
+    END
+    Log     ${bbf_onus_Info}
+    [Return]    ${bbf_onus_Info}
+
+Get Interfaces From Onu XML Interfaces
+    [Documentation]     Extract ALL the Interfaces of a ONU viewed by the BBF-Adapter
+    ...     Return a List of ONU Interfaces information
+    [Arguments]     ${interfaces_bbf}
+    #Intereate on the Interfaces
+    @{interface}=	Get Elements	${interfaces_bbf}	    interface
+    #Create a list of interface for each ONU
+    @{interfaces_Info}=     Create List
+    ${number_of_interfaces}=   Get Length  ${interface}
+    FOR    ${I}    IN RANGE    0    ${number_of_interfaces}
+        #Get from the XML information about the interface
+        ${name}=    Get Element Text     ${interface}[${I}]     name
+        ${type}=    Get Element Text     ${interface}[${I}]     type
+        ${oper_status}=    Get Element Text     ${interface}[${I}]     oper-status
+        #Define a Dictionary that contain all the information of single interface
+        ${onu_interface}    Create Dictionary
+        ...     name    ${name}
+        ...     type    ${type}
+        ...     oper_status    ${oper_status}
+        #Appen interface
+        Append To List    ${interfaces_Info}    ${onu_interface}
+    END
+    Log     ${interfaces_Info}
+    [Return]    ${interfaces_Info}
+
+Get All Devices
+    [Documentation]     Extract all the Device (OLTs and ONUS) in a unique List of Devices
+    [Arguments]     ${XML}
+    ${onus_bbf}=    Get Onus From XML  ${XML}
+    ${olts_bbf}=    Get Olts From XML   ${XML}
+    ${all_devices_bbf}=     Combine Lists     ${onus_bbf}      ${olts_bbf}
+    [Return]    ${all_devices_bbf}
+
+Admin State Translation From IETF to VOLTHA
+    [Documentation]     Allow to translate the IETF of a Admin-State to VOLTHA
+    [Arguments]     ${ietf_admin_state}
+    #Remeber that exist in VOLTHA also Admini State with: Downloading_Image
+    #PREPROVISIONED is consider inside the DISABLED state
+    ${voltha_admin_state}=    Run Keyword IF    "${ietf_admin_state}"=="locked"
+    ...    Set Variable     DISABLED
+    ...    ELSE
+    ...    Run Keyword IF    "${ietf_admin_state}"=="unlocked"
+    ...    Set Variable     ENABLED
+    ...    ELSE
+    ...    Set Variable     UNKNOWN
+    Log     ${voltha_admin_state}
+    [Return]    ${voltha_admin_state}
+
+Create Device in BBF
+    [Arguments]    ${device_id}
+    [Documentation]    PlaceHolder Method to future Create Device from the BBF Adapter
+    Should Be True  True
+
+Delete Device in BBF
+    [Arguments]    ${device_id}
+    [Documentation]    PlaceHolder Method to future Delete Device from the BBF Adapter
+    Should Be True  True
+
+Enable Device in BBF
+    [Arguments]    ${device_id}
+    [Documentation]    PlaceHolder Method to future Enable Device from the BBF Adapter
+    Should Be True  True
+
+Disable Device in BBF
+    [Arguments]    ${device_id}
+    [Documentation]    PlaceHolder Method to future Disable Device from the BBF Adapter
+    Should Be True  True
+
+Admin State Translation From VOLTHA to IETF
+    [Documentation]     Allow to translate the VOLTHA of a Admin-State to IETF Standard
+    [Arguments]     ${voltha_admin_state}
+    #Remeber that exist in VOLTHA also Admini State with: Downloading_Image
+    ${ietf_admin_state}=    Run Keyword IF    "${voltha_admin_state}"=="DISABLED"
+    ...    Set Variable     locked
+    ...    ELSE
+    ...    Run Keyword IF    "${voltha_admin_state}"=="PREPROVISIONED"
+    ...    Set Variable     locked
+    ...    ELSE
+    ...    Run Keyword IF    "${voltha_admin_state}"=="ENABLED"
+    ...    Set Variable     unlocked
+    ...    ELSE
+    ...    Set Variable     unknown
+    [Return]    ${ietf_admin_state}
+
+Oper State Translation From IETF to VOLTHA
+    [Documentation]     Allow to translate the IETF of a Oper-State to VOLTHA
+    [Arguments]     ${ietf_oper_state}
+    #Remeber that exist in VOLTHA also Admini State with: Discovered and Activating and Failed
+    ${voltha_oper_state}=    Run Keyword IF    "${ietf_oper_state}"=="disable"
+    ...    Set Variable     RECONCILING_FAILED
+    ...    ELSE
+    ...    Run Keyword IF    "${ietf_oper_state}"=="enabled"
+    ...    Set Variable     ACTIVE
+    ...    ELSE
+    ...    Run Keyword IF    "${ietf_oper_state}"=="testing"
+    ...    Set Variable     TESTING
+    ...    ELSE
+    ...    Set Variable     UNKNOWN
+    Log     ${voltha_oper_state}
+    [Return]    ${voltha_oper_state}
+
+Oper State Translation From VOLTHA to IETF
+    [Documentation]     Allow to translate the VOLTHA of a Oper-State to IETF Standard
+    [Arguments]     ${voltha_oper_state}
+    #Remeber that exist in VOLTHA also Admini State with: Discovered and Activating and Failed
+    ${ietf_oper_state}=   Run Keyword IF    "${voltha_oper_state}"=="RECONCILING_FAILED"
+    ...    Set Variable     disable
+    ...    ELSE
+    ...    Run Keyword IF    "${voltha_oper_state}"=="ACTIVE"
+    ...    Set Variable     enabled
+    ...    ELSE
+    ...    Run Keyword IF    "${voltha_oper_state}"=="TESTING"
+    ...    Set Variable     testing
+    ...    ELSE
+    ...    Set Variable     unknown
+    Log     ${ietf_oper_state}
+    [Return]    ${ietf_oper_state}
+
+Connect State Translation From IETF to VOLTHA
+    [Documentation]     Allow to translate the IETF of a Connect-State to VOLTHA
+    [Arguments]     ${bbf_connect_state}
+    #Only REACHABLE because we don't know the IETF status
+    ${voltha_connect_state}=   Set Variable     REACHABLE
+    [Return]    ${voltha_connect_state}
+
+Connect State Translation From VOLTHA to IETF
+    [Documentation]     Allow to translate the VOLTHA of a Connect-State to IETF Standard
+    [Arguments]     ${voltha_connect_state}
+    ${bbf_connect_state}=   Set Variable     unknown
+    [Return]    ${bbf_connect_state}
+
+Validate Onu in BBF
+    [Documentation]    Validate an ONU in BBF and its states
+    [Arguments]    ${admin_state_voltha}    ${oper_status_voltha}    ${connect_status_voltha}
+    ...     ${onu_serial_number}    ${onu_reasons}
+    #Translate some states from VOLTHA to IETF to verify it in the BBF
+    ${admin_state}=  Admin State Translation From VOLTHA to IETF  ${admin_state_voltha}
+    ${oper_status}=  Oper State Translation From VOLTHA to IETF  ${oper_status_voltha}
+    #${connect_status_voltha}=   Connect State Translation From VOLTHA to IETF  ${connect_status_voltha}
+    #Define passed to understand if there are or not the consider ONU
+    ${passed}=      Set Variable    False
+    ${number_of_onus}=   Get Length  ${onus_bbf}
+    FOR    ${I}    IN RANGE    0    ${number_of_onus}
+        Continue For Loop If    "${onu_serial_number}"!="${onus_bbf}[${I}][serial-num]"
+        #The ONU is in the BBF
+        ${passed}=      Set Variable    True
+        #Get all the information of the ONU
+        ${sn}=      Set Variable    ${onus_bbf}[${I}][serial-num]
+        ${astate}=      Set Variable    ${onus_bbf}[${I}][admin-state]
+        ${ostate}=      Set Variable    ${onus_bbf}[${I}][oper-state]
+        #To modify when will add
+        #${cstate}=      ${onus_bbf}[${I}][connect-state]
+        ${oreason}=      Set Variable    ${onus_bbf}[${I}][onu-reason]
+        #Check if status is correct to consider the ONU in a correct setup state
+        Should Be True    ${passed}    No match found for ${sn} to validate device
+        Log    ${passed}
+        Should Be Equal    '${admin_state}'    '${astate}'    Device ${sn} admin_state != ${admin_state}
+        ...    passed=False
+        Should Be Equal    '${oper_status}'    '${ostate}'    Device ${sn} oper_status != ${oper_status}
+        ...    passed=False
+        #To modify when will add
+        #Should Be Equal    '${connect_status}'    '${cstate}'    Device ${sn} conn_status != ${connect_status}
+        #...    passed=False
+        #Should Be Equal    '${onu_reasons}'    '${oreason}'    Device ${sn} reason != ${onu_reasons}
+        #...    passed=False
+        #Run Keyword If    '${onu}' == 'True'    Should Contain    '${onu_reason}'   '${mib_state}'
+        #...    Device ${sn} mib_state incorrect (${mib_state}) passed=False
+        Log     ${sn}
+        Log     ${astate}
+        Log     ${ostate}
+        #Log     ${cstate}
+        #Log     ${oreason}
+    END
+    #If false can not are the ONU or there are problem with the states status
+    Should Be True    ${passed}    BBF Problem with this ONU SN: ${onu_serial_number}
+
+Validate Olt in BBF
+    [Documentation]    Verify if the Olts are present inside the XML of the BBF adapter
+    ...     and if the states are correct.
+    [Arguments]    ${admin_state_voltha}    ${oper_status_voltha}    ${connect_status_voltha}
+    ...     ${olt_serial_number}    ${olt_device_id}
+    #Translate some states from VOLTHA to IETF to verify it in the BBF
+    ${admin_state}=  Admin State Translation From VOLTHA to IETF  ${admin_state_voltha}
+    ${oper_status}=  Oper State Translation From VOLTHA to IETF  ${oper_status_voltha}
+    #${connect_status_voltha}=   Connect State Translation From VOLTHA to IETF  ${connect_status_voltha}
+    #Define passed to understand if there are or not the consider OLT
+    ${passed}=      Set Variable    False
+    ${number_of_oltes}=   Get Length  ${oltes_bbf}
+    FOR    ${I}    IN RANGE    0    ${number_of_oltes}
+        Continue For Loop If    "${olt_serial_number}"!="${oltes_bbf}[${I}][serial-num]"
+        #The OLT is in the BBF
+        ${passed}=      Set Variable    True
+        #Get information of the OLT
+        ${sn}=      Set Variable    ${oltes_bbf}[${I}][serial-num]
+        ${astate}=      Set Variable    ${oltes_bbf}[${I}][admin-state]
+        ${ostate}=      Set Variable    ${oltes_bbf}[${I}][oper-state]
+        #To modify when will add
+        #${cstate}=      ${oltes_bbf}[${I}][connect-state]
+        #Check all the state status
+        Should Be True    ${passed}    No match found for ${sn} to validate device
+        Log    ${passed}
+        Should Be Equal    '${admin_state}'    '${astate}'    Device ${sn} admin_state != ${admin_state}
+        ...    passed=False
+        Should Be Equal    '${oper_status}'    '${ostate}'    Device ${sn} oper_status != ${oper_status}
+        ...    passed=False
+        #To modify when will add
+        #Should Be Equal    '${connect_status}'    '${cstate}'    Device ${sn} conn_status != ${connect_status}
+        #...    passed=False
+    END
+    #If false can not are the OLT or there are problem with the states status
+    Should Be True    ${passed}    BBF Problem with this ONU SN: ${olt_serial_number}
+
+Validate Device in BBF
+    [Documentation]    Verify if the Device (Olt or Onu) are present inside the XML of the BBF adapter
+    ...     and if the states are correct.
+    [Arguments]    ${admin_state_voltha}    ${oper_status_voltha}    ${connect_status_voltha}
+    ...     ${serial_number}    ${device_id}    ${isONU}
+    Run Keyword If  ${isONU}
+    ...     Wait Until Keyword Succeeds    ${timeout}    5s
+    ...     Validate Onu in BBF     ${admin_state_voltha}    ${oper_status_voltha}    ${connect_status_voltha}
+    ...     ${serial_number}    ${device_id}
+    ...     ELSE
+    ...     Wait Until Keyword Succeeds    ${timeout}    5s
+    ...     Validate Olt in BBF     ${admin_state_voltha}    ${oper_status_voltha}    ${connect_status_voltha}
+    ...     ${serial_number}    ${device_id}
+
+Validate ONUs After OLT Disable in BBF
+    [Documentation]    Validates the ONUs state in BBF, ONUs port state in ONOS
+    ...    and that pings do not succeed After corresponding OLT is Disabled
+    [Arguments]     ${olt_serial_number}
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        ${dst}=    Set Variable    ${hosts.dst[${I}]}
+        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${of_id}=    Get ofID From OLT List    ${src['olt']}
+        ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}    ${src['uni_id']}
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        Wait Until Keyword Succeeds   ${timeout}    2s
+        ...    Verify UNI Port Is Disabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
+        Run Keyword If    ${has_dataplane}    Run Keyword And Continue On Failure
+        ...    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Check Ping    False    ${dst['dp_iface_ip_qinq']}    ${src['dp_iface_name']}
+        ...    ${src['ip']}    ${src['user']}    ${src['pass']}    ${src['container_type']}    ${src['container_name']}
+        ${onu_reasons}=  Create List     omci-flows-deleted
+        Run Keyword If    ${supress_add_subscriber}    Append To List    ${onu_reasons}    stopping-openomci
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Onu in BBF     ENABLED     DISCOVERED
+        ...    UNREACHABLE    ${src['onu']}   ${onu_reasons}
+    END
+
+Validate Olt Disabled in BBF
+    [Documentation]    Validates the ONUs state in BBF, ONUs port state in ONOS
+    ...    and that pings do not succeed After corresponding OLT is Disabled
+    [Arguments]     ${olt_serial_number}    ${olt_device_id}
+    Validate Olt in BBF  admin_state_voltha=DISABLED  oper_status_voltha=UNKNOWN
+    ...     connect_status_voltha=REACHABLE     olt_serial_number=${olt_serial_number}
+    ...     olt_device_id=${olt_device_id}
+
+Validate Device Removed in BBF
+    [Documentation]    Verify if the device with that ${serial_number}, has been removed
+    [Arguments]    ${device_serial_number}
+    ${eliminated}=      Set Variable    True
+    ${number_of_devices}=   Get Length  ${all_devices_bbf}
+    FOR    ${I}    IN RANGE    0    ${number_of_devices}
+        Continue For Loop If    "${device_serial_number}"!="${all_devices_bbf}[${I}][serial-num]"
+        ${eliminated}=      Set Variable    False
+    END
+    Should Be True    ${eliminated}    Device with ${device_serial_number} not eliminated
+
+Validate all ONUS for OLT Removed in BBF
+    [Arguments]    ${olt_serial_number}
+    [Documentation]    Verifys that all the ONUS for OLT ${serial_number}, has been removed
+    @{removed_onu_list}=    Create List
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${removed_onu_seria_number}=     Set Variable    ${src['onu']}
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...     Validate Device Removed in BBF   ${removed_onu_seria_number}
+        Append To List    ${removed_onu_list}    ${removed_onu_seria_number}
+    END
+    Log     ${removed_onu_list}
+
+Get Device ID From SN in BBF
+    [Documentation]     Retrive from the XML the Device Id of a Device
+    ...     using the Serial Number
+    [Arguments]      ${device_serial_number}
+    ${Device_ID}=   Set Variable    0
+    ${number_of_devices}=   Get Length  ${all_devices_bbf}
+    FOR    ${I}    IN RANGE    0    ${number_of_devices}
+        Continue For Loop If    "${device_serial_number}"!="${all_devices_bbf}[${I}][serial-num]"
+        ${Device_ID}=   Set Variable    ${all_devices_bbf}[${I}][name]
+        Log     ${Device_ID}
+    END
+    [Return]    ${Device_ID}
+
+Correct representation check VOLTHA-IETF
+    [Documentation]     Check if all the information the VOLTHA have about a device
+    ...     is a correct representation of the device in BBF-Adapter
+    ...     Do to Ambiguity from Stats in IETF and VOLTHA is not possible to do
+    ...     the reverse test.
+    [Arguments]      ${device_serial_number}    ${isONU}
+    ${cmd}=     Catenate    voltctl -c ${VOLTCTL_CONFIG} device list | grep ${device_serial_number}
+    ${rc}    ${rest}=    Run and Return Rc and Output    ${cmd}
+    Should Not Be Empty    ${rest}
+    Run Keyword If   ${isONU}
+    ...     Correct Representation check ONU Voltha-IETF    ${rest}
+    ...     ELSE
+    ...     Correct Representation check OLT Voltha-IETF    ${rest}
+
+Correct Representation check ONU Voltha-IETF
+    [Documentation]     Check if all the information the VOLTHA have about a device
+    ...     is a correct representation of the device in BBF-Adapter
+    ...     Do to Ambiguity from Stats in IETF and VOLTHA is not possible to do
+    ...     the reverse test.
+    [Arguments]      ${rest}
+    ${rest}    ${onu_reason} =      Split String From Right	${rest} ${SPACE}	max_split=1
+    ${rest}    ${connect_state} =   Split String From Right	${rest} ${SPACE}	max_split=1
+    ${rest}    ${oper_state} =      Split String From Right	${rest} ${SPACE}	max_split=1
+    ${rest}    ${admin_state} =     Split String From Right	${rest} ${SPACE}    max_split=1
+    ${rest}    ${serial_number} =   Split String From Right	${rest} ${SPACE}    max_split=1
+    ${rest}    ${parent_id} =   Split String From Right	${rest} ${SPACE}	max_split=1
+    ${rest}    ${root} =   Split String From Right	${rest} ${SPACE}	max_split=1
+    ${id}    ${type} =   Split String From Right	${rest} ${SPACE}	max_split=1
+
+    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+    ...    Validate Onu in BBF     ${admin_state}      ${oper_state}       ${connect_state}
+    ...    ${serial_number}    ${onu_reason}
+
+Correct Representation check OLT Voltha-IETF
+    [Documentation]     Check if all the information the VOLTHA have about a device
+    ...     is a correct representation of the device in BBF-Adapter
+    ...     Do to Ambiguity from Stats in IETF and VOLTHA is not possible to do
+    ...     the reverse test.
+    [Arguments]      ${rest}
+    ${rest}    ${connect_state} =   Split String From Right	${rest} ${SPACE}	max_split=1
+    ${rest}    ${oper_state} =      Split String From Right	${rest} ${SPACE}	max_split=1
+    ${rest}    ${admin_state} =     Split String From Right	${rest} ${SPACE}    max_split=1
+    ${rest}    ${serial_number} =   Split String From Right	${rest} ${SPACE}    max_split=1
+    ${rest}    ${parent_id} =   Split String From Right	${rest} ${SPACE}	max_split=1
+    ${rest}    ${root} =   Split String From Right	${rest} ${SPACE}	max_split=1
+    ${id}    ${type} =   Split String From Right	${rest} ${SPACE}	max_split=1
+
+    Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+    ...    Validate Olt in BBF     ${admin_state}      ${oper_state}       ${connect_state}
+    ...    ${serial_number}    ${id}
\ No newline at end of file
diff --git a/libraries/k8s.robot b/libraries/k8s.robot
index 876a5f6..15822c2 100755
--- a/libraries/k8s.robot
+++ b/libraries/k8s.robot
@@ -121,6 +121,18 @@
     Log    ${output}
     [return]    ${output}
 
+Copy File From Pod
+    [Arguments]    ${namespace}    ${label}    ${src}    ${dest}
+    [Documentation]    Uses kubectl to copy a file from a pod
+    ${rc}    ${exec_pod_name}=    Run and Return Rc and Output
+    ...    kubectl get pods -n ${namespace} -l ${label} --no-headers | awk 'NR==1{print $1}'
+    Log    ${exec_pod_name}
+    Should Not Be Empty    ${exec_pod_name}    Unable to parse pod name
+    ${rc}    ${output}=     Run and Return Rc and Output
+    ...     kubectl cp -n ${namespace} ${exec_pod_name}:${src} ${dest}
+    Log    ${output}
+    [return]    ${output}
+
 Apply Kubernetes Resources
     [Arguments]    ${resource_yaml}    ${namespace}
     [Documentation]    Use kubectl to create resources given a yaml file
diff --git a/libraries/utils.robot b/libraries/utils.robot
index dad5fc9..a045a46 100755
--- a/libraries/utils.robot
+++ b/libraries/utils.robot
@@ -217,9 +217,9 @@
         ${src}=    Set Variable    ${hosts.src[${I}]}
         ${dst}=    Set Variable    ${hosts.dst[${I}]}
         Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
         ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}    ${src['uni_id']}
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         # Check ONU port is Enabled in ONOS
         Wait Until Keyword Succeeds   120s   2s
         ...    Verify UNI Port Is Enabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
@@ -324,9 +324,9 @@
         ${src}=    Set Variable    ${hosts.src[${I}]}
         ${dst}=    Set Variable    ${hosts.dst[${I}]}
         Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
         ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}    ${src['uni_id']}
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         # Check ONU port is Enabled in ONOS
         Wait Until Keyword Succeeds   120s   2s
         ...    Verify UNI Port Is Enabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
@@ -381,9 +381,9 @@
         ${src}=    Set Variable    ${hosts.src[${I}]}
         ${dst}=    Set Variable    ${hosts.dst[${I}]}
         Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
         ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}    ${src['uni_id']}
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         # Check ONU port is Enabled in ONOS
         Wait Until Keyword Succeeds   120s   2s
         ...    Verify UNI Port Is Enabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
@@ -543,9 +543,9 @@
     ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS    ${src['olt']}
     Set Global Variable    ${of_id}
     ${nni_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get NNI Port in ONOS    ${of_id}
+    ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
     ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
     ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}    ${src['uni_id']}
-    ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
     # Check ONU port is Enabled in ONOS
     Wait Until Keyword Succeeds    ${timeout}    2s
     ...    Verify UNI Port Is Enabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
@@ -646,9 +646,9 @@
     ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS    ${src['olt']}
     Set Global Variable    ${of_id}
     ${nni_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get NNI Port in ONOS    ${of_id}
+    ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
     ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
     ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}    ${src['uni_id']}
-    ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
     # Check ONU port is Enabled in ONOS
     Wait Until Keyword Succeeds    ${timeout}    2s
     ...    Verify UNI Port Is Enabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
@@ -783,9 +783,9 @@
         ${dst}=    Set Variable    ${hosts.dst[${I}]}
         Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
         ${of_id}=    Get ofID From OLT List    ${src['olt']}
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}
         ...    ${of_id}
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${valid_onu_states}=    Create List    stopping-openomci    omci-flows-deleted
         Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
         ...    Validate Device    ENABLED    DISCOVERED
@@ -926,10 +926,10 @@
         ${src}=    Set Variable    ${hosts.src[${I}]}
         ${dst}=    Set Variable    ${hosts.dst[${I}]}
         Continue For Loop If    "${olt_sn}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS    ${src['olt']}
         ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}
         ...    ${of_id}    ${src['uni_id']}
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${matched}=    Match ONU in PON OLT Peer List    ${olt_peer_list}    ${onu_device_id}
         Run Keyword If    ${matched}
         ...    Run Keywords
@@ -964,11 +964,11 @@
         ${src}=    Set Variable    ${hosts.src[${I}]}
         ${dst}=    Set Variable    ${hosts.dst[${I}]}
         Continue For Loop If    "${olt_sn}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS    ${src['olt']}
         ${nni_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get NNI Port in ONOS    ${of_id}
         ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}
         ...    ${of_id}    ${src['uni_id']}
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${matched}=    Match ONU in PON OLT Peer List    ${olt_peer_list}    ${onu_device_id}
         ${wpa_log}=    Run Keyword If    ${has_dataplane} and ${matched}    Catenate    SEPARATOR=.
         ...    /tmp/wpa    ${src['dp_iface_name']}    log
@@ -1062,10 +1062,10 @@
         ${src}=    Set Variable    ${hosts.src[${I}]}
         ${dst}=    Set Variable    ${hosts.dst[${I}]}
         Continue For Loop If    "${olt_sn}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS    ${src['olt']}
         ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}
         ...    ${of_id}    ${src['uni_id']}
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${matched}=    Match ONU in PON OLT Peer List    ${olt_peer_list}    ${onu_device_id}
         ${valid_onu_states}=    Create List    stopping-openomci    omci-flows-deleted
         Run Keyword If    ${matched}
@@ -1103,11 +1103,11 @@
         ${src}=    Set Variable    ${hosts.src[${I}]}
         ${dst}=    Set Variable    ${hosts.dst[${I}]}
         Continue For Loop If    "${olt_sn}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS    ${src['olt']}
         ${nni_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get NNI Port in ONOS    ${of_id}
         ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}
         ...    ${of_id}    ${src['uni_id']}
-        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
         ${matched}=    Match ONU in PON OLT Peer List    ${olt_peer_list}    ${onu_device_id}
         Run Keyword If    ${matched}
         ...    Run Keywords
@@ -1823,3 +1823,89 @@
         #Wait Until Keyword Succeeds    ${timeout}    5s
         #...    Verify Meters in ONOS Ietf    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}    ${onu_port}
     END
+
+Perform Sanity Test of BBFadapter Aggregation
+    [Documentation]    This test verfy if each OLT and ONU viewed by the BBF-Adapter
+    ...     represent the device in Voltha
+    ...     (with the correct translation to and from ietf standard)
+    [Arguments]    ${XML}       ${supress_add_subscriber}=False
+    Log     ${supress_add_subscriber}
+    #Extract from the XML of the Device Aggregation different tipe of data structure
+    #One for only OLTs, one for only ONUs and one for Both
+    Set Global Variable     ${XML}
+
+    ALL DEVICES XML update From BBF     ${XML}  ${scripts}
+
+    OLT XML update From BBF     ${XML}  ${scripts}
+
+    #Do the verification for each OLT and its ONUs
+    FOR    ${J}    IN RANGE    0    ${num_olts}
+        ${olt_serial_number}=    Set Variable    ${list_olts}[${J}][sn]
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        ${num_onus}=    Set Variable    ${list_olts}[${J}][onucount]
+        ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS
+        ...    ${olt_serial_number}
+        Set Global Variable    ${of_id}     ${olt_device_id}
+        #Validate in VOLTHA if the OLT exist have the correct states
+        Wait Until Keyword Succeeds    ${timeout}    5s    Validate Device
+        ...    ENABLED    ACTIVE    REACHABLE
+        ...    ${olt_serial_number}
+        #Validate in BBF if the OLT exist and have the correct states
+        #State are defined in VOLTHA but internal translate in IETF standard
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  ENABLED    ACTIVE    REACHABLE
+        ...     ${olt_serial_number}    ${olt_device_id}
+        #Verify if the OLT in BBF have all the features present in VOLTHA
+        #Is like a Viceversa Check
+        Correct representation check VOLTHA-IETF     ${olt_serial_number}    False
+
+        #NNI_port is a place_holder for future tests on services
+        #Do a Test for the OLT configuration and its ONUS
+        ${nni_port}=    Set Variable    0
+        Perform Sanity BBF Per OLT    ${of_id}    ${nni_port}    ${olt_serial_number}    ${num_onus}
+        ...    ${supress_add_subscriber}
+
+    END
+
+Perform Sanity BBF Per OLT
+    [Arguments]    ${of_id}     ${nni_port}    ${olt_serial_number}    ${num_onus}    ${supress_add_subscriber}
+    [Documentation]    This keyword performs Sanity Test Procedure for BBF on Multiple Workflow
+    ...    This keyword can be used to call in any other tests where sanity check is required
+    ...    and avoids duplication of code.
+    ...    For repeating sanity test without subscriber changes set flag supress_add_subscriber=True.
+    ...    In all other (common) cases flag has to be set False (default).
+    # Test all the ONUs of the consider OLT
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        ${dst}=    Set Variable    ${hosts.dst[${I}]}
+        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${onu_device_id}=    Get Device ID From SN in BBF    ${src['onu']}
+        ${of_id}=    Get ofID From OLT List    ${src['olt']}
+        ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}
+        ...    ${of_id}    ${src['uni_id']}
+        # Subscribe the ONU if not on repete sanity check
+        Run Keyword If    '${supress_add_subscriber}' == 'False'    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...     Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}
+        ...     ${ONOS_SSH_PORT}    volt-add-subscriber-access ${of_id} ${onu_port}
+        # Verify ONU state in BBF
+        ${onu_reasons}=  Create List     omci-flows-pushed
+        #Run Keyword If  ${supress_add_subscriber}   Append To List    ${onu_reasons}    initial-mib-downloaded
+        Log   ${onu_reasons}
+        Log   ${supress_add_subscriber}
+
+        ONU XML update From BBF     ${XML}  ${scripts}
+
+        #Validate in VOLTHA if the ONU exist and have the correct states
+        Wait Until Keyword Succeeds    ${timeout}    5s    Validate Device
+        ...    ENABLED    ACTIVE    REACHABLE
+        ...    ${src['onu']}    onu=True    onu_reason=${onu_reasons}
+        #Validate in BBF if the ONU exist have the correct states
+        #State are defined in VOLTHA but internal translate in IETF standard
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Onu in BBF  ENABLED    ACTIVE    REACHABLE
+        ...     ${src['onu']}  ${onu_reasons}
+        #Verify if the ONU in BBF have all the features present in VOLTHA
+        #Is like a Viceversa Check
+        Correct representation check VOLTHA-IETF    ${src['onu']}   True
+    END
+
diff --git a/scripts/bbf_device_aggregation.exp b/scripts/bbf_device_aggregation.exp
new file mode 100644
index 0000000..a5c926b
--- /dev/null
+++ b/scripts/bbf_device_aggregation.exp
@@ -0,0 +1,126 @@
+# Copyright 2021-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#!/usr/bin/expect -f
+#
+# This Expect script was generated by autoexpect on Wed Aug 17 22:24:22 2022
+# Expect and autoexpect were both written by Don Libes, NIST.
+#
+# Note that autoexpect does not guarantee a working script.  It
+# necessarily has to guess about certain things.  Two reasons a script
+# might fail are:
+#
+# 1) timing - A surprising number of programs (rn, ksh, zsh, telnet,
+# etc.) and devices discard or ignore keystrokes that arrive "too
+# quickly" after prompts.  If you find your new script hanging up at
+# one spot, try adding a short sleep just before the previous send.
+# Setting "force_conservative" to 1 (see below) makes Expect do this
+# automatically - pausing briefly before sending each character.  This
+# pacifies every program I know of.  The -c flag makes the script do
+# this in the first place.  The -C flag allows you to define a
+# character to toggle this mode off and on.
+
+set force_conservative 0  ;# set to 1 to force conservative mode even if
+			  ;# script wasn't run conservatively originally
+if {$force_conservative} {
+	set send_slow {1 .1}
+	proc send {ignore arg} {
+		sleep .1
+		exp_send -s -- $arg
+	}
+}
+
+#
+# 2) differing output - Some programs produce different output each time
+# they run.  The "date" command is an obvious example.  Another is
+# ftp, if it produces throughput statistics at the end of a file
+# transfer.  If this causes a problem, delete these patterns or replace
+# them with wildcards.  An alternative is to use the -p flag (for
+# "prompt") which makes Expect only look for the last line of output
+# (i.e., the prompt).  The -P flag allows you to define a character to
+# toggle this mode off and on.
+#
+# Read the man page for more info.
+#
+# -Don
+
+set bbfPodName [lindex $argv 0]
+
+set timeout 5
+spawn ssh -p 50022 voltha@localhost
+match_max 100000
+
+expect {
+	{Are you sure you want to continue connecting (yes/no/\[fingerprint\])? }
+	{ send -- "yes\r"
+	expect "voltha@localhost's password: "
+	send -- "onf\r"
+	expect -exact "$bbfPodName:~\$"
+	send -- "netopeer2-cli\r"
+	expect -exact "> "
+	send -- "searchpath /etc/sysrepo/yang\r"
+	expect -exact "> "
+	send -- "ext-data /schema-mount.xml\r"
+	expect -exact "> "
+	send -- "connect --login voltha\r"
+	expect -exact "Are you sure you want to continue connecting (yes/no)? "
+	send -- "yes\r"
+	expect -exact "Password: "
+	send -- "onf\r"
+	expect -exact "> "
+	send -- "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+	expect -exact "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+	send -- "\r"
+	expect -exact "> "
+	send -- ""
+	expect -exact "$bbfPodName:~\$ \[6n"
+	expect eof ; exp_continue}
+
+	"voltha@localhost's password: " {
+	send -- "onf\r"
+	expect -exact "$bbfPodName:~\$"
+	send -- "netopeer2-cli\r"
+	expect -exact "> "
+	send -- "searchpath /etc/sysrepo/yang\r"
+	expect -exact "> "
+	send -- "ext-data /schema-mount.xml\r"
+	expect -exact "> "
+	send -- "connect --login voltha\r"
+	expect {
+		"Are you sure you want to continue connecting (yes/no)? "	{
+		send -- "yes\r"
+		expect -exact "Password: "
+		send -- "onf\r"
+		expect -exact "> "
+		send -- "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+		expect -exact "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+		send -- "\r"
+		expect -exact "> "
+		send -- ""
+		expect -exact "$bbfPodName:~\$ \[6n"
+		expect eof ; exp_continue}
+
+		"Password: " {
+		send -- "onf\r"
+		expect -exact "> "
+		send -- "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+		expect -exact "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+		send -- "\r"
+		expect -exact "> "
+		send -- ""
+		expect -exact "$bbfPodName:~\$ \[6n"
+		expect eof ; exp_continue}
+	}
+	}
+}
+exit 0
\ No newline at end of file
diff --git a/tests/bbf-adapter/Voltha_BBF_Adapter_Tests.robot b/tests/bbf-adapter/Voltha_BBF_Adapter_Tests.robot
new file mode 100644
index 0000000..260d0ab
--- /dev/null
+++ b/tests/bbf-adapter/Voltha_BBF_Adapter_Tests.robot
@@ -0,0 +1,595 @@
+# Copyright 2022 - present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# FIXME Can we use the same test against BBSim and Hardware?
+
+*** Settings ***
+Suite Setup      Setup Suite
+Test Setup        Setup
+Test Teardown    Teardown
+Suite Teardown    Teardown Suite
+Library           XML
+Library           String
+Library           DateTime
+Library           Process
+Library           Collections
+Library           RequestsLibrary
+Library           OperatingSystem
+Resource          ../../libraries/bbf_adapter_utilities.robot
+Library           ../../libraries/DependencyLibrary.py
+Resource          ../../libraries/onos.robot
+Resource          ../../libraries/voltctl.robot
+Resource          ../../libraries/voltha.robot
+Resource          ../../libraries/utils.robot
+Resource          ../../libraries/k8s.robot
+Resource          ../../variables/variables.robot
+Resource          ../../libraries/power_switch.robot
+
+*** Variables ***
+${POD_NAME}       flex-ocp-cord
+${KUBERNETES_CONF}    ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
+${KUBERNETES_CONFIGS_DIR}    ~/pod-configs/kubernetes-configs
+${KUBERNETES_YAML}    ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.yml
+${HELM_CHARTS_DIR}    ~/helm-charts
+${VOLTHA_POD_NUM}    8
+${NAMESPACE}      voltha
+${INFRA_NAMESPACE}      default
+${timeout}        60s
+${of_id}          0
+${logical_id}     0
+${has_dataplane}    False
+${teardown_device}    True
+${scripts}        ../../scripts
+
+# Per-test logging on failure is turned off by default; set this variable to enable
+${container_log_dir}    ${None}
+
+# logging flag to enable Collect Logs, can be passed via the command line too
+# example: -v logging:False
+${logging}    True
+
+# Flag specific to Soak Jobs
+${SOAK_TEST}    False
+${bbsim_port}    50060
+
+#Suppress the subscribe phase
+${supress_add_subscriber}     False
+
+#Enable or Disable the MacLearning verifier for MacLearning ONOS APP
+${maclearningenabled}   False   #Not yet used but it is a placeholder
+
+*** Test Cases ***
+BBF Adapter Aggregation Test
+    [Documentation]     Do a runtime test enabling all the device
+    ...     and verify if VOLTHA and BBF have the same view,
+    ...     with the correct translation, of the network
+    [Tags]    sanityBbfAdapter
+    [Setup]    Start Logging    sanityBbfAdapter
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND             Stop Logging    sanityBbfAdapter
+    Run Keyword     Setup    ${SOAK_TEST}
+    Run Keyword If    ${has_dataplane}    Clean Up Linux
+    Get BBF Device Aggregation  ${NAMESPACE}  ${CURDIR}/data.xml  ${scripts}
+    Log     ${supress_add_subscriber}
+    Perform Sanity Test of BBFadapter Aggregation       ./data.xml      ${supress_add_subscriber}
+    Teardown Suite
+
+Test Disable and Enable ONU for BBF
+    [Documentation]    Disable ONUs from the BBF Adapter (PlaceHolder with VOLTHA)
+    ...     Verify all the states in voltha and in the BBF Adapter (like a compare).
+    ...     Enable the ONUs from the BBF adapter, verify the enable states in voltha
+    ...     and in BBF Adapter (like a compare).
+    ...     It is also possible to verify a connectivity, with a no block test.
+    [Tags]    bbfAdapterFunctionality   disableEnableONUBBF
+    [Setup]    Start Logging    disableEnableONUBBF
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND             Stop Logging    disableEnableONUBBF
+    # Create a single Setup for Multiple Test Case
+    Run Keyword     Setup    ${SOAK_TEST}
+    Run Keyword If    ${has_dataplane}    Clean Up Linux
+    # Disable, verify state, Enable and verify stato for each ONU
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        ${dst}=    Set Variable    ${hosts.dst[${I}]}
+        ${of_id}=    Get ofID From OLT List    ${src['olt']}
+        ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}
+        ...    ${of_id}    ${src['uni_id']}
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        # Subscribe the ONU if requested for the tests
+        Run Keyword If    '${supress_add_subscriber}' == 'False'    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...     Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}
+        ...     ${ONOS_SSH_PORT}    volt-add-subscriber-access ${of_id} ${onu_port}
+        # Disbale the device (actually with voltha in future with BBF Adapter)
+        Disable Device    ${onu_device_id}
+        Disable Device in BBF    ${onu_device_id}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        ONU XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Define some states that the ONU reason can be
+        ${onu_reasons}=  Create List     omci-flows-deleted
+        Run Keyword If    ${supress_add_subscriber}    Append To List    ${onu_reasons}    omci-admin-lock
+        Log     ${onu_reasons}
+        # Verify in Voltha the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Device    DISABLED    UNKNOWN
+        ...    REACHABLE    ${src['onu']}    onu=True    onu_reason=${onu_reasons}
+        # Verify in the BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Onu in BBF     DISABLED     UNKNOWN
+        ...    REACHABLE    ${src['onu']}   ${onu_reasons}
+        # Verify if the disabling of the ONU desable also the UNI port
+        Wait Until Keyword Succeeds   ${timeout}    2s
+        ...    Verify UNI Port Is Disabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
+        # Verify if there are not connectivity to the ONU
+        Run Keyword If    ${has_dataplane}    Run Keyword And Continue On Failure
+        ...    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Check Ping    False    ${dst['dp_iface_ip_qinq']}    ${src['dp_iface_name']}
+        ...    ${src['ip']}    ${src['user']}    ${src['pass']}    ${src['container_type']}    ${src['container_name']}
+        # Enable the device (actually with voltha in future with BBF Adapter)
+        Enable Device    ${onu_device_id}
+        Enable Device in BBF    ${onu_device_id}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        ONU XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Define some states that the ONU reason can be
+        ${onu_reasons}=  Create List     omci-flows-pushed
+        Run Keyword If    ${supress_add_subscriber}    Append To List    ${onu_reasons}    onu-reenabled
+        Log     ${onu_reasons}
+        # Verify in the Voltha the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Device    ENABLED    ACTIVE
+        ...    REACHABLE    ${src['onu']}    onu=True    onu_reason=${onu_reasons}
+        # Verify in the BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Onu in BBF     ENABLED     ACTIVE
+        ...    REACHABLE    ${src['onu']}   ${onu_reasons}
+        # Verify if the disabling of the ONU desable also the UNI port
+        Wait Until Keyword Succeeds   ${timeout}    2s
+        ...    Verify UNI Port Is Enabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
+        # Verify if there are not connectivity to the ONU
+        Run Keyword If    ${has_dataplane}    Run Keyword And Continue On Failure
+        ...    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Check Ping    True    ${dst['dp_iface_ip_qinq']}    ${src['dp_iface_name']}
+        ...    ${src['ip']}    ${src['user']}    ${src['pass']}    ${src['container_type']}    ${src['container_name']}
+    END
+
+Test Disable and Enable OLT for BBF
+    [Documentation]    Disable OLTs from the BBF Adapter (Placeholder with Voltha).
+    ...     Verify the disable states of OLTs in Voltha and in the BBF Adapter (like a compare).
+    ...     Enable the OLTs from the BBF adapter, verify the states in voltha
+    ...     and in BBF Adapter (like a compare).
+    ...     It is also possible to verify a connectivity, with a no block test.
+    [Tags]    bbfAdapterFunctionality   disableEnableOLTBBF
+    [Setup]    Start Logging    disableEnableOLTBBF
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND             Stop Logging    disableEnableOLTBBF
+    # Disable each OLT and Validate it state
+    FOR   ${I}    IN RANGE    0    ${olt_count}
+        ${olt_serial_number}=    Get From Dictionary    ${olt_ids}[${I}]    sn
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        ${of_id}=    Get ofID From OLT List     ${olt_serial_number}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in Voltha the State of the OLT
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate OLT Device    ENABLED    ACTIVE    REACHABLE
+        ...    ${olt_serial_number}
+        # Verify in BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  ENABLED  ACTIVE  REACHABLE
+        ...    ${olt_serial_number}  ${olt_device_id}
+        # Disbale the device (actually with voltha in future with BBF Adapter)
+        Disable Device      ${olt_device_id}
+        Disable Device in BBF    ${olt_device_id}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in Voltha the State of the OLT
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate OLT Device    DISABLED    UNKNOWN    REACHABLE
+        ...    ${olt_serial_number}
+        # Verify in BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  DISABLED  UNKNOWN  REACHABLE
+        ...    ${olt_serial_number}  ${olt_device_id}
+    END
+    # Enable the OLT back and check OLT operstatus are back to "ACTIVE"
+    FOR   ${I}    IN RANGE    0    ${olt_count}
+        ${olt_serial_number}=    Get From Dictionary    ${olt_ids}[${I}]    sn
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        ${of_id}=    Get ofID From OLT List    ${olt_serial_number}
+        # Enable the device (actually with voltha in future with BBF Adapter)
+        Enable Device    ${olt_device_id}
+        Enable Device in BBF  ${olt_device_id}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in Voltha the State of the OLT
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate OLT Device    ENABLED    ACTIVE    REACHABLE
+        ...    ${olt_serial_number}
+        # Verify in BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  ENABLED  ACTIVE  REACHABLE
+        ...    ${olt_serial_number}  ${olt_device_id}
+    END
+
+Test Disable and Delete OLT for BBF
+    [Documentation]    Disable OLTs from the BBF Adapter (PlaceHolder with Voltha)
+    ...     Verify the disable state of the OLT in voltha and in the BBF Adapter,
+    ...     Delete the OLTs from the BBF adapter, verify if it was done correctly in voltha
+    ...     and in BBF Adapter.
+    [Tags]    bbfAdapterFunctionality    disableEnableOLTBBF
+    [Setup]    Start Logging    disableEnableOLTBBF
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND             Stop Logging    disableEnableOLTBBF
+    # Disable and Validate OLT Device
+    FOR   ${I}    IN RANGE    0    ${olt_count}
+        ${olt_serial_number}=    Get From Dictionary    ${olt_ids}[${I}]    sn
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        Disable Device    ${olt_device_id}
+        Disable Device in BBF    ${olt_device_id}
+        ${of_id}=    Get ofID From OLT List    ${olt_serial_number}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        ONU XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Retrive from BBF Adapter an Update XML that contain all the devices
+        ALL DEVICES XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in Voltha the State of the OLT
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate OLT Device    DISABLED    UNKNOWN    REACHABLE
+        ...    ${olt_serial_number}
+        Validate Olt Disabled in BBF  ${olt_serial_number}  ${olt_device_id}
+
+        ${num_onus}=    Set Variable    ${list_olts}[${I}][onucount]
+        # Validate ONUs
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate ONUs After OLT Disable
+        ...    ${num_onus}    ${olt_serial_number}
+        Validate ONUs After OLT Disable in BBF      ${olt_serial_number}
+        # Delete the device (actually with voltha in future with BBF Adapter)
+        Delete Device    ${olt_device_id}
+        Delete Device in BBF    ${olt_device_id}
+        # Retrive from BBF Adapter an Update XML that contain all the devices
+        ALL DEVICES XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Check that the OLT are actually removed from the system
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s    Validate Device Removed
+        ...    ${olt_serial_number}
+        # Check if the OLT has been removed from the system
+        Validate Device Removed in BBF  ${olt_serial_number}
+        # Validate if all the ONUS connected at the OLT revomed are also been removed in VOLTHA
+        Run Keyword and Continue On Failure    Validate all ONUS for OLT Removed    ${num_all_onus}    ${hosts}
+        ...    ${olt_serial_number}    ${timeout}
+        # Validate if all the ONUS connected at the OLT revomed are also been removed in BBF Adapter
+        Validate All Onus for OLT Removed in BBF  ${olt_serial_number}
+        #Wait Until Keyword Succeeds    ${timeout}    5s
+        #...    Verify Device Flows Removed    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}
+    END
+    Teardown Suite
+
+Test Delete and ReAdd OLT for BBF
+    [Documentation]    Delete OLTs from the BBF Adapter (PlaceHolder with Voltha)
+    ...     Verify if the OLT and ONUs connected was really delete in voltha and in the BBF Adapter.
+    ...     Readd all the OLTs from the BBF adapter, verify the enable state in voltha
+    ...     and in BBF Adapter and check the correct status after the readd.
+    [Tags]    bbfAdapterFunctionality    DeleteReAddOLTBBF
+    [Setup]    Start Logging    DeleteReAddOLTBBF
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND             Stop Logging    DeleteReAddOLTBBF
+    Run Keyword     Setup    ${SOAK_TEST}
+    Run Keyword If    ${has_dataplane}    Clean Up Linux
+    FOR    ${I}    IN RANGE    0    ${olt_count}
+        ${olt_serial_number}=    Get From Dictionary    ${olt_ids}[${I}]    sn
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        # Delete the device (actually with voltha in future with BBF Adapter)
+        Delete Device    ${olt_device_id}
+        Delete Device in BBF    ${olt_device_id}
+        # Retrive from BBF Adapter an Update XML that contain all the devices
+        ALL DEVICES XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Check if the OLT has been removed from the system
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Device Removed      ${olt_serial_number}
+        # Check if the OLT has been removed from the BBF Adapter
+        Validate Device Removed in BBF  ${olt_serial_number}
+        # Validate if all the ONUS connected at the OLT revomed are also been removed in VOLTHA
+        Run Keyword and Continue On Failure    Validate all ONUS for OLT Removed    ${num_all_onus}    ${hosts}
+        ...    ${olt_serial_number}    ${timeout}
+        # Validate if all the ONUS connected at the OLT revomed are also been removed in BBF Adapter
+        Validate all ONUS for OLT Removed in BBF  ${olt_serial_number}
+        #Wait Until Keyword Succeeds    ${timeout}    5s
+        #...    Verify Device Flows Removed    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}
+    END
+    # Recreate the OLTs
+    Run Keyword     Setup    ${SOAK_TEST}
+    # Retrive from BBF Adapter an Update XML that contain the ONUs
+    OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+    FOR   ${I}    IN RANGE    0    ${olt_count}
+        ${olt_serial_number}=    Get From Dictionary    ${olt_ids}[${I}]    sn
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        # Verify in Voltha the State of the OLT
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate OLT Device    ENABLED    ACTIVE    REACHABLE
+        ...    ${olt_serial_number}
+        # Verify in BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  ENABLED  ACTIVE  REACHABLE
+        ...    ${olt_serial_number}  ${olt_device_id}
+    END
+    Teardown Suite
+
+Test Disable ONUs and OLT for BBF
+    [Documentation]     Disable ONUs and OLTs, verify if the OLT and ONUs connected
+    ...     was really disable in voltha and in the BBF Adapter.
+    ...     Delete ONUs and OLTs, verify if the ONUs and OLT was really deleted
+    ...     in voltha and BBF Adapter.
+    [Tags]    bbfAdapterFunctionality    DisableONUOLTBBF
+    [Setup]    Start Logging    DisableONUOLTBBF
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND             Stop Logging    DisableONUOLTBBF
+    Run Keyword     Setup    ${SOAK_TEST}
+    Run Keyword If    ${has_dataplane}    Clean Up Linux
+    # Define some states that the ONU reason can be
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        ${dst}=    Set Variable    ${hosts.dst[${I}]}
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        ${of_id}=    Get ofID From OLT List    ${src['olt']}
+        ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}    ${src['uni_id']}
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${src['olt']}
+        # Subscribe the ONU if requested for the tests
+        Run Keyword If    '${supress_add_subscriber}' == 'False'    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...     Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}
+        ...     ${ONOS_SSH_PORT}    volt-add-subscriber-access ${of_id} ${onu_port}
+        # Onu reasons selection
+        @{onu_reasons}=  Create List     omci-flows-pushed
+        Run Keyword If    ${supress_add_subscriber}    Append To List    ${onu_reasons}    initial-mib-downloaded
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        ONU XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in the Voltha the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Device    ENABLED    ACTIVE
+        ...    REACHABLE    ${src['onu']}    onu=True    onu_reason=${onu_reasons}
+        # Verify in the BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Onu in BBF     ENABLED     ACTIVE
+        ...    REACHABLE    ${src['onu']}   ${onu_reasons}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in Voltha the State of the OLT
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate OLT Device    ENABLED    ACTIVE
+        ...    REACHABLE    ${src['olt']}
+        # Verify in BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  ENABLED  ACTIVE  REACHABLE
+        ...    ${src['olt']}  ${olt_device_id}
+        # Disbale the device (actually with voltha in future with BBF Adapter)
+        Disable Device    ${onu_device_id}
+        Disable Device in BBF  ${onu_device_id}
+        # Onu reasons selection
+        ${onu_reasons}=  Create List     omci-flows-deleted
+        Run Keyword If    ${supress_add_subscriber}    Append To List    ${onu_reasons}    omci-admin-lock
+        Log     ${onu_reasons}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        ONU XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in the Voltha the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Device    DISABLED    UNKNOWN
+        ...    REACHABLE    ${src['onu']}   ${onu_reasons}  onu=True
+        # Verify in the BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Onu in BBF     DISABLED     UNKNOWN
+        ...    REACHABLE    ${src['onu']}   ${onu_reasons}
+        # Check if the OLT where the ONU is connected have the correct state
+        # after the disbaling one ONU connected
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in Voltha the State of the OLT
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate OLT Device    ENABLED    ACTIVE
+        ...    REACHABLE    ${src['olt']}
+        # Verify in BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  ENABLED  ACTIVE  REACHABLE
+        ...    ${src['olt']}  ${olt_device_id}
+    END
+    # Disable all OLTs and check if the state after disable are correct
+    FOR   ${I}    IN RANGE    0    ${olt_count}
+        ${olt_serial_number}=    Get From Dictionary    ${olt_ids}[${I}]    sn
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        Disable Device    ${olt_device_id}
+        Disable Device in BBF    ${olt_device_id}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in Voltha the State of the OLT
+        Wait Until Keyword Succeeds    ${timeout}    5s    Validate OLT Device    DISABLED    UNKNOWN    REACHABLE
+        ...    ${olt_serial_number}
+        # Verify in BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  DISABLED  UNKNOWN  REACHABLE
+        ...     ${olt_serial_number}  ${olt_device_id}
+    END
+
+Delete Disabled ONUs and OLT for BBF
+    [Documentation]   Continue of the before test.
+    ...     Validate the Disble state of ONUs and Oltes,
+    ...     Delete Disabled Onus and Disabled Olts and verify the correct
+    ...     elimination of all devices from Voltha and BBF Adapter.
+    [Tags]    bbfAdapterFunctionality    DeleteONUOLTBBF
+    [Setup]    Start Logging    DeleteONUOLTBBF
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND             Stop Logging    DeleteONUOLTBBF
+    # Validate ONUs states after OLT disable
+    ${onu_reasons}=  Create List     stopping-openomci
+    Run Keyword If    ${supress_add_subscriber}    Append To List    ${onu_reasons}    stopping-openomci
+    Log     ${onu_reasons}
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        ${dst}=    Set Variable    ${hosts.dst[${I}]}
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${src['olt']}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        ONU XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in the Voltha the State of the ONU
+        Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Device    DISABLED    DISCOVERED
+        ...    UNREACHABLE    ${src['onu']}    ${onu_reasons}   onu=True
+        # Verify in the BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Onu in BBF     DISABLED     DISCOVERED
+        ...    UNREACHABLE    ${src['onu']}   ${onu_reasons}
+        # Delete the device (actually with voltha in future with BBF Adapter)
+        Delete Device    ${onu_device_id}
+        Delete Device in BBF    ${onu_device_id}
+        # Retrive from BBF Adapter an Update XML that contain all the devices
+        ALL DEVICES XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        Validate Device Removed in BBF  ${src['onu']}
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        OLT XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify in Voltha the State of the OLT
+        Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate OLT Device    DISABLED    UNKNOWN
+        ...    REACHABLE    ${src['olt']}
+        # Verify in BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s
+        ...    Validate Olt in BBF  DISABLED  UNKNOWN  REACHABLE
+        ...    ${src['olt']}  ${olt_device_id}
+    END
+    # Delete all OLTs
+    # Delete All Devices and Verify
+    FOR    ${I}    IN RANGE    0    ${olt_count}
+        ${olt_serial_number}=    Get From Dictionary    ${olt_ids}[${I}]    sn
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        # Delete the device (actually with voltha in future with BBF Adapter)
+        Delete Device    ${olt_device_id}
+        Delete Device in BBF    ${olt_device_id}
+        # Retrive from BBF Adapter an Update XML that contain all the devices
+        ALL DEVICES XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Check that the OLT and the ONUs are actually removed from the system
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    5s    Validate Device Removed
+        ...    ${olt_serial_number}
+        # Check if the OLT has been removed from the system
+        Validate Device Removed in BBF  ${olt_serial_number}
+        # Validate if all the ONUS connected at the OLT revomed are also been removed in VOLTHA
+        Run Keyword and Continue On Failure    Validate all ONUS for OLT Removed    ${num_all_onus}    ${hosts}
+        ...    ${olt_serial_number}    ${timeout}
+        # Validate if all the ONUS connected at the OLT revomed are also been removed in BBF Adapter
+        Validate all ONUS for OLT Removed in BBF   ${olt_serial_number}
+        #Wait Until Keyword Succeeds    ${timeout}    5s
+        #...    Verify Device Flows Removed    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}
+    END
+    Teardown Suite
+
+Test ONU Delete and Auto-Discovery for BBF
+    [Documentation]    Validate the Autodiscory of an ONUs in case of Delete.
+    ...     Delete the device and verify if them was really deleted.
+    ...     Verify if all the Onus are re discovered in the correct way.
+    ...     Verify the state after and before a subscription if needed.
+    ...     Verify the connectivity if needed.
+    [Tags]    bbfAdapterFunctionality    ONUAutoDiscoveryBBF
+    [Setup]    Start Logging    ONUAutoDiscoveryBBF
+    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
+    ...           AND             Stop Logging    ONUAutoDiscoveryBBF
+    Clear All Devices Then Create New Device
+    # Performing Sanity Test to make sure subscribers are all AUTH+DHCP and pingable
+    Run Keyword If    ${has_dataplane}    Clean Up Linux
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        ${dst}=    Set Variable    ${hosts.dst[${I}]}
+        ${of_id}=    Get ofID From OLT List    ${src['olt']}
+        ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        ${nni_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get NNI Port in ONOS    ${of_id}
+        # Subscribe the ONU if requested for the tests
+        Run Keyword If    '${supress_add_subscriber}' == 'False'    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...     Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}
+        ...     ${ONOS_SSH_PORT}    volt-add-subscriber-access ${of_id} ${onu_port}
+        # Verify ONU state in voltha
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        ONU XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        @{onu_reasons}=  Create List     omci-flows-pushed
+        Run Keyword If    ${supress_add_subscriber}    Append To List    ${onu_reasons}    initial-mib-downloaded
+        # Verify in the Voltha the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Validate Device    ENABLED    ACTIVE    REACHABLE
+        ...    ${src['onu']}    onu=True    onu_reason=${onu_reasons}
+        # Verify in the BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Validate Onu in BBF     ENABLED     ACTIVE
+        ...    REACHABLE    ${src['onu']}   ${onu_reasons}
+        # Delete ONU and Verify Ping Fails
+        # Delete the device (actually with voltha in future with BBF Adapter)
+        Delete Device    ${onu_device_id}
+        Delete Device in BBF    ${onu_device_id}
+        # Retrive from BBF Adapter an Update XML that contain all the devices
+        ALL DEVICES XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        # Verify if the ONU has been removed from the system
+        Validate Device Removed in BBF  ${src['onu']}
+        Run Keyword If    ${has_dataplane}    Verify ping is successful except for given device
+        ...    ${num_all_onus}    ${src['onu']}
+        # Verify that no pending flows exist for the ONU port
+        Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Verify No Pending Flows For ONU    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${onu_port}
+        # ONU Auto-Discovery
+        ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Get ONU Port in ONOS    ${src['onu']}    ${of_id}    ${src['uni_id']}
+        # Check ONU port is Enabled in ONOS
+        Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Verify UNI Port Is Enabled   ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${src['onu']}    ${src['uni_id']}
+        ${onu_device_id}=    Get Device ID From SN    ${src['onu']}
+        Run Keyword If    ${has_dataplane}    Clean Up Linux    ${onu_device_id}
+        # Re-Add Subscriber
+        Run Keyword If    '${supress_add_subscriber}' == 'False'    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...     Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
+        ...    volt-add-subscriber-access ${of_id} ${onu_port}
+        # Verify that no pending flows exist for the ONU port
+        Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Verify No Pending Flows For ONU    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${onu_port}
+        # Verify ONU state in voltha
+        # Retrive from BBF Adapter an Update XML that contain the ONUs
+        ONU XML update From BBF     ${CURDIR}/data.xml  ${scripts}
+        @{onu_reasons}=  Create List     omci-flows-pushed
+        Run Keyword If    ${supress_add_subscriber}    Append To List    ${onu_reasons}    initial-mib-downloaded
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Validate Device    ENABLED    ACTIVE    REACHABLE
+        ...    ${src['onu']}    onu=True    onu_reason=${onu_reasons}
+        # Verify in the BBF Adapter the State of the ONU
+        Run Keyword And Continue On Failure    Wait Until Keyword Succeeds    ${timeout}    2s
+        ...    Validate Onu in BBF     ENABLED     ACTIVE
+        ...    REACHABLE    ${src['onu']}   ${onu_reasons}
+        # Verify Meters in ONOS
+        #Wait Until Keyword Succeeds    ${timeout}    5s
+        #...    Verify Meters in ONOS Ietf    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}    ${onu_port}
+        Run Keyword If    ${has_dataplane}    Validate DHCP and Ping    True
+        ...    True    ${src['dp_iface_name']}    ${src['s_tag']}    ${src['c_tag']}    ${dst['dp_iface_ip_qinq']}
+        ...    ${src['ip']}    ${src['user']}    ${src['pass']}    ${src['container_type']}    ${src['container_name']}
+        ...    ${dst['dp_iface_name']}    ${dst['ip']}    ${dst['user']}    ${dst['pass']}    ${dst['container_type']}
+        ...    ${dst['container_name']}
+    END
+    # Verify flows for all OLTs
+    #Wait Until Keyword Succeeds    ${timeout}    5s    Validate All OLT Flows
+
+
+*** Keywords ***
+Setup Suite
+    [Documentation]    Set up the test suite
+    Common Test Suite Setup
+    #power_switch.robot needs it to support different vendor's power switch
+    ${switch_type}=    Get Variable Value    ${web_power_switch.type}
+    Run Keyword If  "${switch_type}"!=""    Set Global Variable    ${powerswitch_type}    ${switch_type}
+
+Clear All Devices Then Create New Device
+    [Documentation]    Remove any devices from VOLTHA and ONOS
+    # Remove all devices from voltha and nos
+    Run Keyword     Delete All Devices and Verify
+    # Execute normal test Setup Keyword
+    Run Keyword     Setup    ${SOAK_TEST}
\ No newline at end of file
diff --git a/tests/data/bbsim-bbf-adapter.yaml b/tests/data/bbsim-bbf-adapter.yaml
new file mode 100644
index 0000000..c6b7541
--- /dev/null
+++ b/tests/data/bbsim-bbf-adapter.yaml
@@ -0,0 +1,115 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Automated deployment configuration for systems running BBSim
+
+# Change default values in tests
+workflow: TIM
+has_dataplane: false
+teardown_device: true
+ONOS_REST_PORT: 8181
+ONOS_SSH_PORT: 8101
+OLT_PORT: 50060
+
+# Actual Unused sadis.file but ready to future implementation
+# sadis.file: ../data/tim-sadis-config.json
+
+nodes:
+  -
+    ip: '127.0.0.1'
+
+olts:
+  - ip: bbsim0
+    serial: BBSIM_OLT_10
+  - ip: bbsim1
+    serial: BBSIM_OLT_11
+
+hosts:
+  src:
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      uni_tag: '835'
+      c_tag: '100'
+      s_tag: '4096'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      uni_tag: '836'
+      c_tag: '101'
+      s_tag: '4096'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      uni_tag: '835'
+      c_tag: '100'
+      s_tag: '4096'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      uni_tag: '836'
+      c_tag: '101'
+      s_tag: '4096'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      uni_tag: '835'
+      c_tag: '100'
+      s_tag: '4096'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      uni_tag: '836'
+      c_tag: '101'
+      s_tag: '4096'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      uni_tag: '835'
+      c_tag: '100'
+      s_tag: '4096'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      uni_tag: '836'
+      c_tag: '101'
+      s_tag: '4096'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '64'
+
+  dst:
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
diff --git a/tests/data/bbsim-bbf-adapter_addDelete_tests.yaml b/tests/data/bbsim-bbf-adapter_addDelete_tests.yaml
new file mode 100644
index 0000000..83e5cf9
--- /dev/null
+++ b/tests/data/bbsim-bbf-adapter_addDelete_tests.yaml
@@ -0,0 +1,79 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Automated deployment configuration for systems running BBSim
+
+# Change default values in tests
+workflow: TIM
+has_dataplane: false
+teardown_device: true
+ONOS_REST_PORT: 8181
+ONOS_SSH_PORT: 8101
+OLT_PORT: 50060
+
+# Actual Unused sadis.file but ready to future implementation
+# sadis.file: ../data/tim-sadis-config.json
+
+nodes:
+  -
+    ip: '127.0.0.1'
+
+olts:
+  - ip: bbsim0
+    serial: BBSIM_OLT_10
+  - ip: bbsim1
+    serial: BBSIM_OLT_11
+
+hosts:
+  src:
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      uni_tag: '835'
+      c_tag: '100'
+      s_tag: '4096'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      uni_tag: '835'
+      c_tag: '100'
+      s_tag: '4096'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      uni_tag: '835'
+      c_tag: '100'
+      s_tag: '4096'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      uni_tag: '835'
+      c_tag: '100'
+      s_tag: '4096'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+
+  dst:
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
