Support running ATT workflow tests with k8s containers

Change-Id: I7c44daf9df6c79ebfde4f6816187a1f852e01a8f
diff --git a/src/test/cord-api/Framework/ATTWorkFlowDriver.robot b/src/test/cord-api/Framework/ATTWorkFlowDriver.robot
index a1d9e9b..d250590 100644
--- a/src/test/cord-api/Framework/ATTWorkFlowDriver.robot
+++ b/src/test/cord-api/Framework/ATTWorkFlowDriver.robot
@@ -70,3 +70,9 @@
     [Documentation]    Sends a DELETE to delete an att whitelist in XOS
     ${api_result}=    restApi.ApiChameleonDelete    ATT_WHITELIST    ${id}
     Should Be True    ${api_result}
+
+Validate ATT Workflow Driver SI
+    [Arguments]    ${expected_status}    ${expected_auth_status}    ${onu_device}
+    ${onu_state}   ${authentication_status}   Service Instance Status Check    ${onu_device}
+    Should Be Equal    ${onu_state}    ${expected_status}
+    Should Be Equal    ${authentication_status}    ${expected_auth_status}
diff --git a/src/test/cord-api/Framework/DHCP.robot b/src/test/cord-api/Framework/DHCP.robot
index a8ddb7d..7c32565 100644
--- a/src/test/cord-api/Framework/DHCP.robot
+++ b/src/test/cord-api/Framework/DHCP.robot
@@ -20,20 +20,20 @@
 
 *** Keywords ***
 Send Dhclient Request
-    [Arguments]    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    [Arguments]    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
     [Documentation]    Executes a dhclient against a particular interface on the RG (src)
-    ${result}=    Login And Run Command On Remote System    sudo dhclient -nw ${iface}    ${ip}    ${user}    ${pass}    ${container_name}
+    ${result}=    Login And Run Command On Remote System    dhclient -nw ${iface}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
     [Return]    ${result}
 
 Add Default Route to Dst Gateway
-    [Arguments]    ${src_gateway}    ${dst_subnet}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    [Arguments]    ${src_gateway}    ${dst_subnet}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
     [Documentation]    Adds an entry to the routing table on the RG (src)
-    ${result}=    Login And Run Command On Remote System    sudo ip route add ${dst_subnet} via ${src_gateway} dev ${iface}    ${ip}    ${user}    ${pass}    ${container_name}
+    ${result}=    Login And Run Command On Remote System    ip route add ${dst_subnet} via ${src_gateway} dev ${iface}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
     [Return]    ${result}
 
 Check IPv4 Address on DHCP Client
-    [Arguments]    ${ip_should_exist}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    [Arguments]    ${ip_should_exist}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
     [Documentation]    Check if the sepcified interface has an IPv4 address assigned
-    ${output}=    Login And Run Command On Remote System    ifconfig ${iface}    ${ip}    ${user}    ${pass}    ${container_name}
+    ${output}=    Login And Run Command On Remote System    ifconfig ${iface}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
     Run Keyword If    '${ip_should_exist}' == 'True'    Should Match Regexp    ${output}    \\b([0-9]{1,3}\\.){3}[0-9]{1,3}\\b
     Run Keyword If    '${ip_should_exist}' == 'False'    Should Not Match Regexp    ${output}    \\b([0-9]{1,3}\\.){3}[0-9]{1,3}\\b
diff --git a/src/test/cord-api/Framework/Kubernetes.robot b/src/test/cord-api/Framework/Kubernetes.robot
index d284a77..a76fd4f 100644
--- a/src/test/cord-api/Framework/Kubernetes.robot
+++ b/src/test/cord-api/Framework/Kubernetes.robot
@@ -40,3 +40,14 @@
     [Documentation]    Verify the number of Kubernetes pods that are running in specified namespace is as expected
     ${rc}    ${output}=    Run And Return Rc And Output    ${export_kubeconfig}; kubectl get pods -n ${namespace} | grep -i running | grep 1/1 | wc -l
     Should Be Equal As Integers    ${output}    ${pod_num}
+
+Reinstall Voltha
+    Run    ${export_kubeconfig}; helm delete --purge voltha
+    Wait Until Keyword Succeeds    60s    10s    Helm Chart is Removed    voltha
+    Wait Until Keyword Succeeds    120s    10s    Kubernetes PODs in Namespace are Removed    voltha
+    Run    ${export_kubeconfig}; cd ${HELM_CHARTS_DIR}; helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
+    Run    ${export_kubeconfig}; cd ${HELM_CHARTS_DIR}; helm dep up voltha
+    Run    ${export_kubeconfig}; helm install -n voltha -f ${KUBERNETES_YAML} --set etcd-operator.customResources.createEtcdClusterCRD=false ${HELM_CHARTS_DIR}/voltha
+    Run    ${export_kubeconfig}; helm upgrade -f ${KUBERNETES_YAML} --set etcd-operator.customResources.createEtcdClusterCRD=true voltha ${HELM_CHARTS_DIR}/voltha
+    Wait Until Keyword Succeeds    60s    10s    Kubernetes PODs in Namespace are Running    voltha    ${VOLTHA_POD_NUM}
+    Sleep    10s
diff --git a/src/test/cord-api/Framework/ONU.robot b/src/test/cord-api/Framework/ONU.robot
index e00c9ea..15bcf8d 100644
--- a/src/test/cord-api/Framework/ONU.robot
+++ b/src/test/cord-api/Framework/ONU.robot
@@ -58,3 +58,9 @@
     [Documentation]    Sends a DELETE to delete an onu device in XOS
     ${api_result}=    restApi.ApiChameleonDelete    ONU_DEVICE    ${id}
     Should Be True    ${api_result}
+
+Validate ONU States
+    [Arguments]    ${expected_op_status}    ${expected_admin_status}    ${onu_device}
+    ${operational_status}    ${admin_status}    ONU Status Check    ${onu_device}
+    Should Be Equal    ${operational_status}    ${expected_op_status}
+    Should Be Equal    ${admin_status}    ${expected_admin_status}
diff --git a/src/test/cord-api/Framework/Subscriber.robot b/src/test/cord-api/Framework/Subscriber.robot
index 78c8135..d74a263 100644
--- a/src/test/cord-api/Framework/Subscriber.robot
+++ b/src/test/cord-api/Framework/Subscriber.robot
@@ -18,6 +18,7 @@
 Library           SSHLibrary
 Library           restApi.py
 Resource          ../../Framework/utils/utils.robot
+Resource          ../../Framework/DHCP.robot
 
 *** Keywords ***
 Subscriber Status Check
@@ -58,36 +59,62 @@
     ${api_result}=    restApi.ApiChameleonDelete    VOLT_SUBSCRIBER    ${id}
     Should Be True    ${api_result}
 
+Validate Subscriber Status
+    [Arguments]    ${exepected_status}    ${onu_device}
+    ${status}    Subscriber Status Check    ${onu_device}
+    Should Be Equal    ${status}    ${exepected_status}
+
 Send EAPOL Message
-    [Arguments]    ${iface}    ${conf_file}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
+    [Arguments]    ${iface}    ${conf_file}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
     [Documentation]    Executes a particular auth request on the RG via wpa_supplicant client. Requested packet should exist on src.
-    Login And Run Command On Remote System    sudo rm -f /tmp/wpa.log; sudo wpa_supplicant -B -i ${iface} -Dwired -c /etc/wpa_supplicant/${conf_file} -f /tmp/wpa.log    ${ip}    ${user}    ${pass}    ${container_name}
+    Login And Run Command On Remote System    rm -f /tmp/wpa.log; wpa_supplicant -B -i ${iface} -Dwired -c /etc/wpa_supplicant/${conf_file} -f /tmp/wpa.log    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
+
+Validate Authentication
+    [Arguments]    ${auth_pass}    ${iface}    ${conf_file}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    [Documentation]    Executes a particular auth request on the RG and verifies if it succeeds. auth_pass determines if authentication should pass
+    Send EAPOL Message    ${iface}    ${conf_file}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
+    Run Keyword If    '${auth_pass}' == 'True'    Wait Until Keyword Succeeds    30s    2s    Check Remote File Contents    True    /tmp/wpa.log    authentication completed successfully    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
+    Run Keyword If    '${auth_pass}' == 'False'    Sleep    10s
+    Run Keyword If    '${auth_pass}' == 'False'    Check Remote File Contents    False    /tmp/wpa.log    authentication completed successfully    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
 
 Start DHCP Server on Remote Host
-    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
-    ${result}=    Login And Run Command On Remote System    sudo dhcpd -cf /etc/dhcp/dhcpd.conf ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
+    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    ${result}=    Login And Run Command On Remote System    dhcpd -cf /etc/dhcp/dhcpd.conf ${interface}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
     Should Contain    ${result}    Listening on LPF/${interface}
 
 Delete IP Addresses from Interface on Remote Host
-    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
-    Login And Run Command On Remote System    sudo ip addr flush dev ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
+    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    ip addr flush dev ${interface}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
 
 Add Double Vlan Interface on Host
-    [Arguments]    ${interface}    ${stag}    ${ctag}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
-    Login And Run Command On Remote System    sudo ip link add link ${interface} name ${interface}.${stag} type vlan id ${stag}    ${ip}    ${user}    ${pass}    ${container_name}
-    Login And Run Command On Remote System    sudo ip link set ${interface}.${stag} up    ${ip}    ${user}    ${pass}    ${container_name}
-    Login And Run Command On Remote System    sudo ip link add link ${interface}.${stag} name ${interface}.${stag}.${ctag} type vlan id ${ctag}    ${ip}    ${user}    ${pass}    ${container_name}
-    Login And Run Command On Remote System    sudo ip link set ${interface}.${stag}.${ctag} up    ${ip}    ${user}    ${pass}    ${container_name}
-    Login And Run Command On Remote System    ifconfig ${interface}.${stag}.${ctag}    ${ip}    ${user}    ${pass}    ${container_name}
+    [Arguments]    ${interface}    ${stag}    ${ctag}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    ip link add link ${interface} name ${interface}.${stag} type vlan id ${stag}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
+    Login And Run Command On Remote System    ip link set ${interface}.${stag} up    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
+    Login And Run Command On Remote System    ip link add link ${interface}.${stag} name ${interface}.${stag}.${ctag} type vlan id ${ctag}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
+    Login And Run Command On Remote System    ip link set ${interface}.${stag}.${ctag} up    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
+    Login And Run Command On Remote System    ifconfig ${interface}.${stag}.${ctag}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
 
 Delete Interface on Remote Host
-    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
-    Login And Run Command On Remote System    sudo ip link del ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
+    [Arguments]    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    ip link del ${interface}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
 
 Add Ip Address on Interface on Host
-    [Arguments]    ${ip_address}    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
-    Login And Run Command On Remote System    sudo ip addr add ${ip_address} dev ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
+    [Arguments]    ${ip_address}    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    ip addr add ${ip_address} dev ${interface}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
 
 Add Route to Remote Host
-    [Arguments]    ${subnet}    ${gateway}    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
-    Login And Run Command On Remote System    sudo ip route add ${subnet} via ${gateway} dev ${interface}    ${ip}    ${user}    ${pass}    ${container_name}
+    [Arguments]    ${subnet}    ${gateway}    ${interface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    Login And Run Command On Remote System    ip route add ${subnet} via ${gateway} dev ${interface}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
+
+Validate DHCP and Ping
+    [Arguments]    ${dhcp_should_pass}    ${ping_should_pass}    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}=${None}    ${src_container_type}=${None}    ${src_container_name}=${None}    ${dst_dp_iface}=${None}    ${dst_ip}=${None}    ${dst_user}=${None}    ${dst_pass}=${None}    ${dst_container_type}=${None}    ${dst_container_name}=${None}
+    Run Keyword If    '${dst_ip}' != '${None}'    Run Keywords
+    ...    Add Double Vlan Interface on Host    ${dst_dp_iface}    ${s_tag}    ${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}    AND
+    ...    Add IP Address on Interface on Host    ${dst_dp_ip}/24    ${dst_dp_iface}.${s_tag}.${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}    AND
+    ...    Start DHCP Server on Remote Host    ${dst_dp_iface}.${s_tag}.${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
+    Send Dhclient Request    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Run Keyword If    '${dhcp_should_pass}' == 'True'    Wait Until Keyword Succeeds    60s    5s    Check IPv4 Address on DHCP Client    True    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Run Keyword If    '${dhcp_should_pass}' == 'False'    Sleep    10s
+    Run Keyword If    '${dhcp_should_pass}' == 'False'    Check IPv4 Address on DHCP Client    False    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Run Keyword If    '${ping_should_pass}' == 'True'    Wait Until Keyword Succeeds    60s    5s    Check Ping    True    ${dst_dp_ip}    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    ...                                          ELSE    Wait Until Keyword Succeeds    60s    5s    Check Ping    False    ${dst_dp_ip}    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
diff --git a/src/test/cord-api/Framework/utils/utils.robot b/src/test/cord-api/Framework/utils/utils.robot
index e8a6a6b..25e8124 100644
--- a/src/test/cord-api/Framework/utils/utils.robot
+++ b/src/test/cord-api/Framework/utils/utils.robot
@@ -24,26 +24,38 @@
 
 *** Keywords ***
 Login And Run Command On Remote System
-    [Arguments]    ${cmd}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}    ${prompt}=~$    ${prompt_timeout}=15s    ${container_prompt}=~#
-    [Documentation]    SSH's into a remote host and executes a command and returns output. If container_name is specified, login to the container before executing the command
-    ${conn_id}    ${prompt}=    Login To Remote System    ${ip}    ${user}    ${pass}    ${container_name}    ${prompt}    ${prompt_timeout}    ${container_prompt}
-    ${output}=    Run Command On Remote System    ${cmd}    ${conn_id}    ${user}    ${prompt}    ${pass}
+    [Arguments]    ${cmd}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}    ${prompt}=~$    ${prompt_timeout}=15s    ${container_prompt}=#
+    [Documentation]    SSH's into a remote host (and logs into the container if container_type and container_name are specified), tries to switch to root user and executes a command and returns output
+    ${conn_id}    Login To Remote System    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}    ${prompt}    ${prompt_timeout}    ${container_prompt}
+    ${output}=    Run Command On Remote System    ${cmd}    ${conn_id}    ${user}    ${pass}
     Logout From Remote System    ${conn_id}
     [Return]    ${output}
 
 Login To Remote System
-    [Arguments]    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}    ${prompt}=~$    ${prompt_timeout}=15s    ${container_prompt}=~#
-    [Documentation]    SSH's into a remote host and returns connection ID. If container_name is specified, login to the container before returning
+    [Arguments]    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}    ${prompt}=~$    ${prompt_timeout}=15s    ${container_prompt}=#
+    [Documentation]    SSH's into a remote host (and logs into the container if container_type and container_name are specified) and returns connection ID
     ${conn_id}=    SSHLibrary.Open Connection    ${ip}    prompt=${prompt}    timeout=${prompt_timeout}
     Run Keyword If    '${pass}' != '${None}'    SSHLibrary.Login    ${user}    ${pass}
     ...                                 ELSE    SSHLibrary.Login With Public Key    ${user}    %{HOME}/.ssh/id_rsa
     # Login to the lxc container
-    Run Keyword If    '${container_name}' != '${None}'    Run Keywords
+    Run Keyword If    '${container_type}' == 'LXC'    Run Keywords
     ...    SSHLibrary.Write    lxc exec ${container_name} /bin/bash    AND
     ...    SSHLibrary.Read Until    ${container_prompt}    AND
     ...    SSHLibrary.Set Client Configuration    prompt=${container_prompt}
-    ${prompt}=    Set Variable If    '${container_name}' != '${None}'    ${container_prompt}     ${prompt}
-    [Return]    ${conn_id}    ${prompt}
+    # Login to the k8s container
+    Run Keyword If    '${container_type}' == 'K8S'    Run Keywords
+    ...    SSHLibrary.Write    kubectl -n $(kubectl get pods --all-namespaces | grep ${container_name} | awk '{print $1}') exec ${container_name} -it /bin/bash    AND
+    ...    SSHLibrary.Read Until    ${container_prompt}    AND
+    ...    SSHLibrary.Set Client Configuration    prompt=${container_prompt}
+    # Try to switch to root user
+    ${conn}=    SSHLibrary.Get Connection    ${conn_id}
+    Run Keyword And Ignore Error    SSHLibrary.Write    sudo -s
+    ${output}=    SSHLibrary.Read Until Regexp    \#|${conn.prompt}|password for ${user}:
+    Run Keyword If    'password for ${user}:' not in '''${output}'''    Return From Keyword    ${conn_id}
+    SSHLibrary.Set Client Configuration    prompt=\#
+    SSHLibrary.Write    ${pass}
+    SSHLibrary.Read Until Prompt
+    [Return]    ${conn_id}
 
 Logout From Remote System
     [Arguments]    ${conn_id}
@@ -52,11 +64,12 @@
     SSHLibrary.Close Connection
 
 Run Command On Remote System
-    [Arguments]    ${cmd}    ${conn_id}    ${user}    ${prompt}    ${pass}=${None}
+    [Arguments]    ${cmd}    ${conn_id}    ${user}    ${pass}=${None}
     [Documentation]    Executes a command on remote host and returns output
+    ${conn}=    SSHLibrary.Get Connection    ${conn_id}
     SSHLibrary.Switch Connection    ${conn_id}
     SSHLibrary.Write    ${cmd}
-    ${output}=    SSHLibrary.Read Until Regexp    ${prompt}|password for ${user}:
+    ${output}=    SSHLibrary.Read Until Regexp    ${conn.prompt}|password for ${user}:
     Run Keyword If    'password for ${user}:' not in '''${output}'''    Return From Keyword    ${output}
     SSHLibrary.Write    ${pass}
     ${output}=    SSHlibrary.Read Until Prompt
@@ -217,19 +230,19 @@
     [Return]    ${id}
 
 Kill Linux Process
-    [Arguments]    ${process}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
-    ${rc}=    Login And Run Command On Remote System    sudo kill $(ps aux | grep '${process}' | awk '{print $2}'); echo $?    ${ip}    ${user}    ${pass}    ${container_name}
+    [Arguments]    ${process}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    ${rc}=    Login And Run Command On Remote System    kill $(ps aux | grep '${process}' | awk '{print $2}'); echo $?    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
     Should Be Equal As Integers    ${rc}    0
 
 Check Remote File Contents
-    [Arguments]    ${file_should_exist}    ${file}    ${pattern}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}    ${prompt}=~$
-    ${output}=    Login And Run Command On Remote System    cat ${file} | grep '${pattern}'    ${ip}    ${user}    ${pass}    ${container_name}    ${prompt}
+    [Arguments]    ${file_should_exist}    ${file}    ${pattern}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}    ${prompt}=~$
+    ${output}=    Login And Run Command On Remote System    cat ${file} | grep '${pattern}'    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}    ${prompt}
     Run Keyword If    '${file_should_exist}' == 'True'    Should Contain    ${output}    ${pattern}
     ...                                           ELSE    Should Not Contain    ${output}    ${pattern}
 
 Check Ping
-    [Arguments]    ${ping_should_pass}    ${dst_ip}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_name}=${None}
-    ${result}=    Login And Run Command On Remote System    ping -I ${iface} -c 3 ${dst_ip}    ${ip}    ${user}    ${pass}    ${container_name}
+    [Arguments]    ${ping_should_pass}    ${dst_ip}    ${iface}    ${ip}    ${user}    ${pass}=${None}    ${container_type}=${None}    ${container_name}=${None}
+    ${result}=    Login And Run Command On Remote System    ping -I ${iface} -c 3 ${dst_ip}    ${ip}    ${user}    ${pass}    ${container_type}    ${container_name}
     Check Ping Result    ${ping_should_pass}    ${result}
 
 Check Remote System Reachability
diff --git a/src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.robot b/src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.robot
index e34646f..c4a572d 100644
--- a/src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.robot
+++ b/src/test/cord-api/Tests/WorkflowValidations/ATT_Test001.robot
@@ -51,13 +51,13 @@
     ...    Configure whitelist with correct ONU location
     ...    Validate successful authentication/DHCP/E2E ping
     [Setup]    None
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 ONU in Correct Location -> Remove ONU from Whitelist -> Add ONU to Whitelist
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
@@ -67,27 +67,27 @@
     ...    Validate failed authentication/DHCP/E2E ping
     ...    Add ONU to whitelist
     ...    Validate successful authentication/DHCP/E2E ping
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Remove Whitelist
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    False    wpa_supplicant.conf
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Create Whitelist
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 ONU in Correct Location -> ONU in Wrong Location -> ONU in Correct Location
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
@@ -97,27 +97,27 @@
     ...    Validate failed authentication/DHCP/E2E ping
     ...    Update whitelist with correct ONU location
     ...    Validate successful authentication/DHCP/E2E ping
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Update Whitelist with Wrong Location
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    False    wpa_supplicant.conf
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Update Whitelist with Correct Location
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 ONU in Correct Location -> Remove Subscriber -> Create Subscriber
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
@@ -127,55 +127,55 @@
     ...    Validate failed authentication/DHCP/E2E ping
     ...    Recreate subscriber model
     ...    Validate successful authentication/DHCP/E2E ping
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Remove Subscriber
-    Validate Authentication    False    wpa_supplicant.conf
-    Validate DHCP and Ping    False    False
+    Validate Authentication    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Create Subscriber
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 ONU in Correct Location (Skip Subscriber Provisioning) -> Provision Subscriber
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
     ...    Configure whitelist with correct ONU location and skip provisioning subscriber
-    ...    Validate failed authentication/DHCP/E2E ping
+    ...    Validate successful authentication (expected with the ONF pod setup) but failed DHCP/E2E ping
     ...    Provision subscriber
     ...    Validate successful authentication/DHCP/E2E ping
     [Setup]    None
     Create Whitelist
     Create VOLT
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Validate Authentication    False    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Create Subscriber
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 ONU in Correct Location (Skip Authentication)
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
     ...    Configure whitelist with correct ONU location and skip RG authentication
     ...    Validate failed authentication/DHCP/E2E ping
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 ONU not in Whitelist
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
@@ -184,89 +184,88 @@
     [Setup]    None
     Create Subscriber
     Create VOLT
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    False    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 ONU not in Whitelist (Skip Subscriber Provisioning) -> Add ONU to Whitelist -> Provision Subscriber
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
     ...    Skip whitelist configuration for ONU and subscriber provisioning
-    ...    Validate failed authentication/DHCP/E2E ping
+    ...    Validate successful authentication but failed DHCP/E2E ping
     ...    Configure whitelist with correct ONU location
-    ...    Validate failed authentication/DHCP/E2E ping
+    ...    Validate successful authentication (expected with the ONF pod setup) but failed DHCP/E2E ping
     ...    Provision subscriber
     ...    Validate successful authentication/DHCP/E2E ping
     [Setup]    None
     Create VOLT
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Validate Authentication    False    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Validate Authentication    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Create Whitelist
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Validate Authentication    False    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Create Subscriber
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 ONU in Wrong Location
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
     ...    Configure whitelist with wrong ONU location
     ...    Validate failed authentication/DHCP/E2E ping
     Update Whitelist with Wrong Location
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    False    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
-ONU with Wrong Location (Skip Subscriber Provisioning) -> ONU with Correct Location -> Provision Subscriber
+ONU in Wrong Location (Skip Subscriber Provisioning) -> ONU in Correct Location -> Provision Subscriber
     [Documentation]    Validates E2E Ping Connectivity and object states for the given scenario:
     ...    Configure whitelist with wrong ONU location and skip subscriber provisioning
     ...    Validate failed authentication/DHCP/E2E ping
     ...    Configure whitelist with correct ONU location
-    ...    Validate failed authentication/DHCP/E2E ping
+    ...    Validate successful authentication (expected with the ONF pod setup) but failed DHCP/E2E ping
     ...    Provision subscriber
     ...    Validate successful authentication/DHCP/E2E ping
     [Setup]    None
-    [Tags]    Debug
     Create VOLT
     Create Whitelist
     Update Whitelist with Wrong Location
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Validate Authentication    False    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    UNKNOWN    DISABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Validate Authentication    False    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    DISABLED    AWAITING    ${onu_device}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Update Whitelist with Correct Location
-    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Validate Authentication    False    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING
-    Validate DHCP and Ping    False    False
+    Wait Until Keyword Succeeds    300s    15s    Validate ONU States    ACTIVE    ENABLED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    AWAITING    ${onu_device}
+    Validate DHCP and Ping    False    False    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
     Clean Up Linux
     Create Subscriber
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth
-    Validate Authentication    True    wpa_supplicant.conf
-    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED
-    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled
-    Validate DHCP and Ping    True    True
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    awaiting-auth    ${onu_device}
+    Validate Authentication    True    ${src_iface}    wpa_supplicant.conf    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Wait Until Keyword Succeeds    60s    2s    Validate ATT Workflow Driver SI    ENABLED    APPROVED    ${onu_device}
+    Wait Until Keyword Succeeds    60s    2s    Validate Subscriber Status    enabled    ${onu_device}
+    Validate DHCP and Ping    True    True    ${src_iface}    ${s_tag}    ${c_tag}    ${dst_dp_ip}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}    ${dst_dp_iface}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 *** Keywords ***
 Setup Suite
@@ -297,11 +296,13 @@
     ${src_ip}=    Evaluate    ${hosts}.get("src").get("ip")
     ${src_user}=    Evaluate    ${hosts}.get("src").get("user")
     ${src_pass}=    Evaluate    ${hosts}.get("src").get("pass")
+    ${src_container_type}=    Evaluate    ${hosts}.get("src").get("container_type")
     ${src_container_name}=    Evaluate    ${hosts}.get("src").get("container_name")
     ${src_iface}=    Evaluate    ${hosts}.get("src").get("dp_iface_name")
     ${dst_ip}=    Evaluate    ${hosts}.get("dst").get("ip")
     ${dst_user} =    Evaluate    ${hosts}.get("dst").get("user")
     ${dst_pass}=    Evaluate    ${hosts}.get("dst").get("pass")
+    ${dst_container_type}=    Evaluate    ${hosts}.get("dst").get("container_type")
     ${dst_container_name}=    Evaluate    ${hosts}.get("dst").get("container_name")
     ${dst_dp_iface}=    Evaluate    ${hosts}.get("dst").get("dp_iface_name")
     ${dst_dp_ip}=    Evaluate    ${hosts}.get("dst").get("dp_iface_ip_qinq")
@@ -311,11 +312,13 @@
     Set Suite Variable    ${src_ip}
     Set Suite Variable    ${src_user}
     Set Suite Variable    ${src_pass}
+    Set Suite Variable    ${src_container_type}
     Set Suite Variable    ${src_container_name}
     Set Suite Variable    ${src_iface}
     Set Suite Variable    ${dst_ip}
     Set Suite Variable    ${dst_user}
     Set Suite Variable    ${dst_pass}
+    Set Suite Variable    ${dst_container_type}
     Set Suite Variable    ${dst_container_name}
     Set Suite Variable    ${dst_dp_iface}
     Set Suite Variable    ${dst_dp_ip}
@@ -335,18 +338,6 @@
     Create Subscriber
     Create VOLT
 
-Create Whitelist
-    ${AttWhiteListDict}=    utils.listToDict    ${AttWhiteListList}    0
-    CORD Post    ${ATT_WHITELIST}    ${AttWhiteListDict}
-
-Create Subscriber
-    ${SubscriberDict}=    utils.listToDict    ${SubscriberList}    0
-    Wait Until Keyword Succeeds    120s    15s    CORD Post    ${VOLT_SUBSCRIBER}    ${SubscriberDict}
-
-Create VOLT
-    ${VoltDeviceDict}=    utils.listToDict    ${VoltDeviceList}    0
-    CORD Post    ${VOLT_DEVICE}    ${VoltDeviceDict}
-
 Teardown Test
     [Documentation]    Delete xos objects, kills processes and cleans up interfaces on src+dst servers
     Clean Up Linux
@@ -354,11 +345,11 @@
 
 Clean Up Linux
     [Documentation]    Kill processes and clean up interfaces on src+dst servers
-    Run Keyword And Ignore Error    Kill Linux Process    [w]pa_supplicant    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    Run Keyword And Ignore Error    Kill Linux Process    [d]hclient    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    Run Keyword If    '${dst_ip}' != '${None}'    Run Keyword And Ignore Error    Kill Linux Process    [d]hcpd    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}
-    Delete IP Addresses from Interface on Remote Host    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    Run Keyword If    '${dst_ip}' != '${None}'    Delete Interface on Remote Host    ${dst_dp_iface}.${s_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}
+    Run Keyword And Ignore Error    Kill Linux Process    [w]pa_supplicant    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Run Keyword And Ignore Error    Kill Linux Process    [d]hclient    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Run Keyword If    '${dst_ip}' != '${None}'    Run Keyword And Ignore Error    Kill Linux Process    [d]hcpd    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
+    Delete IP Addresses from Interface on Remote Host    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_type}    ${src_container_name}
+    Run Keyword If    '${dst_ip}' != '${None}'    Delete Interface on Remote Host    ${dst_dp_iface}.${s_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_type}    ${dst_container_name}
 
 Clean Up XOS
     [Documentation]    Clean up all XOS objects and reinstall voltha after OLT reboots
@@ -370,6 +361,10 @@
     Wait Until Keyword Succeeds    120s    10s    Openolt is Up    ${olt_ip}    ${olt_user}    ${olt_pass}
     Wait Until Keyword Succeeds    300s    10s    Reinstall Voltha
 
+Create Whitelist
+    ${AttWhiteListDict}=    utils.listToDict    ${AttWhiteListList}    0
+    CORD Post    ${ATT_WHITELIST}    ${AttWhiteListDict}
+
 Remove Whitelist
     ${whitelist_id}=    Retrieve Whitelist Entry    ${onu_device}
     CORD Delete    ${ATT_WHITELIST}    ${whitelist_id}
@@ -382,51 +377,10 @@
     ${whitelist_id}=    Retrieve Whitelist Entry    ${onu_device}
     CORD Put    ${ATT_WHITELIST}    {"pon_port_id": ${onu_location} }    ${whitelist_id}
 
-Validate ONU States
-    [Arguments]    ${expected_op_status}    ${expected_admin_status}
-    ${operational_status}    ${admin_status}    ONU Status Check    ${onu_device}
-    Should Be Equal    ${operational_status}    ${expected_op_status}
-    Should Be Equal    ${admin_status}    ${expected_admin_status}
+Create Subscriber
+    ${SubscriberDict}=    utils.listToDict    ${SubscriberList}    0
+    Wait Until Keyword Succeeds    120s    15s    CORD Post    ${VOLT_SUBSCRIBER}    ${SubscriberDict}
 
-Validate ATT Workflow Driver SI
-    [Arguments]    ${expected_status}    ${expected_auth_status}
-    ${onu_state}   ${authentication_status}   Service Instance Status Check    ${onu_device}
-    Should Be Equal    ${onu_state}    ${expected_status}
-    Should Be Equal    ${authentication_status}    ${expected_auth_status}
-
-Validate Subscriber Status
-    [Arguments]    ${exepected_status}
-    ${status}    Subscriber Status Check    ${onu_device}
-    Should Be Equal    ${status}    ${exepected_status}
-
-Validate Authentication
-    [Arguments]    ${auth_pass}    ${conf_file}
-    [Documentation]    Executes a particular auth request on the RG and verifies if it succeeds. auth_pass determines if authentication should pass
-    Send EAPOL Message    ${src_iface}    ${conf_file}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    Run Keyword If    '${auth_pass}' == 'True'    Wait Until Keyword Succeeds    30s    2s    Check Remote File Contents    True    /tmp/wpa.log    authentication completed successfully    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    Run Keyword If    '${auth_pass}' == 'False'    Sleep    10s
-    Run Keyword If    '${auth_pass}' == 'False'    Check Remote File Contents    False    /tmp/wpa.log    authentication completed successfully    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-
-Validate DHCP and Ping
-    [Arguments]    ${dhcp_should_pass}    ${ping_should_pass}
-    Run Keyword If    '${dst_ip}' != '${None}'    Run Keywords
-    ...    Add Double Vlan Interface on Host    ${dst_dp_iface}    ${s_tag}    ${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}    AND
-    ...    Add IP Address on Interface on Host    ${dst_dp_ip}/24    ${dst_dp_iface}.${s_tag}.${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}    AND
-    ...    Start DHCP Server on Remote Host    ${dst_dp_iface}.${s_tag}.${c_tag}    ${dst_ip}    ${dst_user}    ${dst_pass}    ${dst_container_name}
-    Send Dhclient Request    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    Run Keyword If    '${dhcp_should_pass}' == 'True'    Wait Until Keyword Succeeds    60s    5s    Check IPv4 Address on DHCP Client    True    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    Run Keyword If    '${dhcp_should_pass}' == 'False'    Sleep    10s
-    Run Keyword If    '${dhcp_should_pass}' == 'False'    Check IPv4 Address on DHCP Client    False    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    Run Keyword If    '${ping_should_pass}' == 'True'    Wait Until Keyword Succeeds    60s    5s    Check Ping    True    ${dst_dp_ip}    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-    ...                                          ELSE    Wait Until Keyword Succeeds    60s    5s    Check Ping    False    ${dst_dp_ip}    ${src_iface}    ${src_ip}    ${src_user}    ${src_pass}    ${src_container_name}
-
-Reinstall Voltha
-    Run    ${export_kubeconfig}; helm delete --purge voltha
-    Wait Until Keyword Succeeds    60s    10s    Helm Chart is Removed    voltha
-    Wait Until Keyword Succeeds    120s    10s    Kubernetes PODs in Namespace are Removed    voltha
-    Run    ${export_kubeconfig}; cd ${HELM_CHARTS_DIR}; helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
-    Run    ${export_kubeconfig}; cd ${HELM_CHARTS_DIR}; helm dep up voltha
-    Run    ${export_kubeconfig}; helm install -n voltha -f ${KUBERNETES_YAML} --set etcd-operator.customResources.createEtcdClusterCRD=false ${HELM_CHARTS_DIR}/voltha
-    Run    ${export_kubeconfig}; helm upgrade -f ${KUBERNETES_YAML} --set etcd-operator.customResources.createEtcdClusterCRD=true voltha ${HELM_CHARTS_DIR}/voltha
-    Wait Until Keyword Succeeds    60s    10s    Kubernetes PODs in Namespace are Running    voltha    ${VOLTHA_POD_NUM}
-    Sleep    10s
+Create VOLT
+    ${VoltDeviceDict}=    utils.listToDict    ${VoltDeviceList}    0
+    CORD Post    ${VOLT_DEVICE}    ${VoltDeviceDict}