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
+
