[VOL-3098] ONU Delete and Auto-Discovery
Change-Id: I752a47cb8452f8d5fe32b38b611788249ba2de11
diff --git a/libraries/utils.robot b/libraries/utils.robot
index 19ffb88..8aa74c0 100755
--- a/libraries/utils.robot
+++ b/libraries/utils.robot
@@ -1074,15 +1074,14 @@
#Run Keyword and Ignore Error Get Logical Device Output from Voltha ${logical_id}
Get ONOS Status ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
-Verify ping is succesful except for given device
- [Arguments] ${num_onus} ${exceptional_onu_id}
+Verify ping is successful except for given device
+ [Arguments] ${num_onus} ${exceptional_onu}
[Documentation] Checks that ping for all the devices are successful except the given ONU.
${pingStatus} Set Variable True
FOR ${I} IN RANGE 0 ${num_all_onus}
${src}= Set Variable ${hosts.src[${I}]}
${dst}= Set Variable ${hosts.dst[${I}]}
- ${onu_device_id}= Get Device ID From SN ${src['onu']}
- ${pingStatus} Run Keyword If '${onu_device_id}' == '${exceptional_onu_id}' Set Variable False
+ ${pingStatus} Run Keyword If '${src['onu']}' == '${exceptional_onu}' Set Variable False
Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
... Wait Until Keyword Succeeds 60s 2s
... Check Ping ${pingStatus} ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
diff --git a/tests/dt-workflow/Voltha_DT_FailureScenarios.robot b/tests/dt-workflow/Voltha_DT_FailureScenarios.robot
index 3888ccd..6c34f6e 100755
--- a/tests/dt-workflow/Voltha_DT_FailureScenarios.robot
+++ b/tests/dt-workflow/Voltha_DT_FailureScenarios.robot
@@ -514,7 +514,7 @@
... 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']}
- Verify ping is succesful except for given device ${num_onus} ${onu_device_id}
+ Verify ping is successful except for given device ${num_onus} ${src['onu']}
# Remove Subscriber Access (To replicate DT workflow)
Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
diff --git a/tests/dt-workflow/Voltha_DT_PODTests.robot b/tests/dt-workflow/Voltha_DT_PODTests.robot
index 8bd248a..01df4ed 100755
--- a/tests/dt-workflow/Voltha_DT_PODTests.robot
+++ b/tests/dt-workflow/Voltha_DT_PODTests.robot
@@ -768,6 +768,62 @@
... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
END
+
+Test ONU Delete and Auto-Discovery for DT
+ [Documentation] Tests the voltctl delete and Auto-Discovery of the ONU
+ [Tags] functionalDt VOL-3098 ONUAutoDiscoveryDt notready
+ [Setup] Start Logging ONUAutoDiscoveryDt
+ [Teardown] Run Keywords Run Keyword If ${logging} Collect Logs
+ ... AND Stop Logging ONUAutoDiscoveryDt
+ Clear All Devices Then Create New Device
+ # Performing Sanity Test to make sure subscribers are all AUTH+DHCP and pingable
+ Run Keyword If ${has_dataplane} Clean Up Linux
+ Perform Sanity Test DT
+ FOR ${I} IN RANGE 0 ${num_all_onus}
+ ${src}= Set Variable ${hosts.src[${I}]}
+ ${dst}= Set Variable ${hosts.dst[${I}]}
+ ${onu_device_id}= Get Device ID From SN ${src['onu']}
+ ${of_id}= Get ofID From OLT List ${src['olt']}
+ ${nni_port}= Wait Until Keyword Succeeds ${timeout} 2s Get NNI Port in ONOS ${of_id}
+ # Delete ONU and Verify Ping Fails
+ Delete Device ${onu_device_id}
+ Run Keyword If ${has_dataplane} Verify ping is successful except for given device
+ ... ${num_all_onus} ${src['onu']}
+ # Verify that no pending flows exist for the ONU port
+ Wait Until Keyword Succeeds ${timeout} 2s
+ ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
+ # ONU Auto-Discovery
+ ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
+ ... Get ONU Port in ONOS ${src['onu']} ${of_id}
+ # 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']}
+ ${onu_device_id}= Get Device ID From SN ${src['onu']}
+ Run Keyword If ${has_dataplane} Clean Up Linux ${onu_device_id}
+ # Verify ONU state in voltha
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
+ ... Validate Device ENABLED ACTIVE REACHABLE
+ ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
+ # Verify that no pending flows exist for the ONU port
+ Wait Until Keyword Succeeds ${timeout} 2s
+ ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
+ # Verify subscriber access flows are added for the ONU port
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s
+ ... Verify Subscriber Access Flows Added For ONU DT ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
+ ... ${onu_port} ${nni_port} ${src['s_tag']}
+ # Verify Meters in ONOS
+ Wait Until Keyword Succeeds ${timeout} 5s
+ ... Verify Meters in ONOS Ietf ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
+ Run Keyword If ${has_dataplane} Validate DHCP and Ping True
+ ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+ ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
+ ... ${dst['container_name']}
+ END
+ # Verify flows for all OLTs
+ Wait Until Keyword Succeeds ${timeout} 5s Validate All OLT Flows
+
+
*** Keywords ***
Setup Suite
[Documentation] Set up the test suite
diff --git a/tests/functional/Voltha_FailureScenarios.robot b/tests/functional/Voltha_FailureScenarios.robot
index 5e0bc6f..ce81521 100755
--- a/tests/functional/Voltha_FailureScenarios.robot
+++ b/tests/functional/Voltha_FailureScenarios.robot
@@ -756,7 +756,7 @@
# Remove Subscriber Access (To replicate ATT workflow)
Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command use single connection ${ONOS_SSH_IP}
... ${ONOS_SSH_PORT} volt-remove-subscriber-access ${of_id} ${onu_port}
- Verify ping is succesful except for given device ${num_all_onus} ${onu_device_id}
+ Verify ping is successful except for given device ${num_all_onus} ${src['onu']}
Sleep 40s
# Check ONU port is Enabled in ONOS
Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
diff --git a/tests/functional/Voltha_PODTests.robot b/tests/functional/Voltha_PODTests.robot
index 7269034..ee306e5 100755
--- a/tests/functional/Voltha_PODTests.robot
+++ b/tests/functional/Voltha_PODTests.robot
@@ -797,6 +797,85 @@
... The downstream bandwidth guarantee was not met (${pct_limit_dn}% of resv)
END
+Test ONU Delete and Auto-Discovery
+ [Documentation] Tests the voltctl delete and Auto-Discovery of the ONU
+ [Tags] functional VOL-3098 ONUAutoDiscovery notready
+ [Setup] Run Keywords Start Logging ONUAutoDiscovery
+ ... AND Setup
+ [Teardown] Run Keywords Collect Logs
+ ... AND Delete All Devices and Verify
+ ... AND Run Keyword If ${logging} Collect Logs
+ ... AND Stop Logging ONUAutoDiscovery
+ # Performing Sanity Test to make sure subscribers are all AUTH+DHCP and pingable
+ Run Keyword If ${has_dataplane} Clean Up Linux
+ Perform Sanity Test
+ FOR ${I} IN RANGE 0 ${num_all_onus}
+ ${src}= Set Variable ${hosts.src[${I}]}
+ ${dst}= Set Variable ${hosts.dst[${I}]}
+ ${onu_device_id}= Get Device ID From SN ${src['onu']}
+ ${of_id}= Get ofID From OLT List ${src['olt']}
+ ${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}
+ # Remove Subscriber Access (To replicate ATT workflow)
+ Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
+ ... volt-remove-subscriber-access ${of_id} ${onu_port}
+ # Additional sleep to let subscriber delete process
+ Sleep 10s
+ # Delete ONU and Verify Ping Fails
+ Delete Device ${onu_device_id}
+ Run Keyword If ${has_dataplane} Verify ping is successful except for given device
+ ... ${num_all_onus} ${src['onu']}
+ # Verify that no pending flows exist for the ONU port
+ Wait Until Keyword Succeeds ${timeout} 2s
+ ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
+ # ONU Auto-Discovery
+ ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s
+ ... Get ONU Port in ONOS ${src['onu']} ${of_id} ${src['uni_id']}
+ # Check ONU port is Enabled in ONOS
+ Wait Until Keyword Succeeds ${timeout} 2s
+ ... Verify UNI Port Is Enabled ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${src['onu']} ${src['uni_id']}
+ ${onu_device_id}= Get Device ID From SN ${src['onu']}
+ Run Keyword If ${has_dataplane} Clean Up Linux ${onu_device_id}
+ # Verify default EAPOL flows are added for the ONU port
+ Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
+ ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
+ # Verify ONU state in voltha
+ Wait Until Keyword Succeeds ${timeout} 5s Validate Device ENABLED ACTIVE REACHABLE
+ ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
+ # Perform Authentication
+ ${wpa_log}= Run Keyword If ${has_dataplane} Catenate SEPARATOR=.
+ ... /tmp/wpa ${src['dp_iface_name']} log
+ Run Keyword If ${has_dataplane} Validate Authentication True
+ ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
+ ... ${src['container_type']} ${src['container_name']} ${wpa_log}
+ Wait Until Keyword Succeeds ${timeout} 2
+ ... Verify ONU in AAA-Users ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
+ Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
+ ... volt-add-subscriber-access ${of_id} ${onu_port}
+ # Verify that no pending flows exist for the ONU port
+ Wait Until Keyword Succeeds ${timeout} 2s
+ ... Verify No Pending Flows For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
+ # Verify subscriber access flows are added for the ONU port
+ Wait Until Keyword Succeeds ${timeout} 5s
+ ... Verify Subscriber Access Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
+ ... ${onu_port} ${nni_port} ${src['c_tag']} ${src['s_tag']}
+ # Verify subscriber EAPOL flow is installed
+ Wait Until Keyword Succeeds ${timeout} 5s
+ ... Verify Eapol Flows Added For ONU ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id}
+ ... ${onu_port} ${src['c_tag']}
+ # Verify Meters in ONOS
+ Wait Until Keyword Succeeds ${timeout} 5s
+ ... Verify Meters in ONOS ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${of_id} ${onu_port}
+ Run Keyword If ${has_dataplane} Validate DHCP and Ping True
+ ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
+ ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
+ ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
+ ... ${dst['container_name']}
+ Wait Until Keyword Succeeds ${timeout} 2s
+ ... Validate Subscriber DHCP Allocation ${ONOS_SSH_IP} ${ONOS_SSH_PORT} ${onu_port}
+ END
+
*** Keywords ***
Setup Suite
[Documentation] Set up the test suite