VOL-2042 Unify tests for BBSim and physical pod
Change-Id: Ia5aed704281c20742e3a9a78894da3d739aabf57
diff --git a/tests/functional/Voltha_PODTests.robot b/tests/functional/Voltha_PODTests.robot
index 612bb18..e871079 100644
--- a/tests/functional/Voltha_PODTests.robot
+++ b/tests/functional/Voltha_PODTests.robot
@@ -19,19 +19,17 @@
Suite Setup Setup Suite
Test Setup Setup
Test Teardown Teardown
+Suite Teardown Teardown Suite
Library Collections
Library String
Library OperatingSystem
Library XML
Library RequestsLibrary
-Library ../../../voltha/tests/atests/common/testCaseUtils.py
-Resource ../../../cord-tester/src/test/cord-api/Framework/Subscriber.robot
-Resource ../../../cord-tester/src/test/cord-api/Framework/OLT.robot
-Resource ../../../cord-tester/src/test/cord-api/Framework/DHCP.robot
-Resource ../../../cord-tester/src/test/cord-api/Framework/Kubernetes.robot
+Library ../../libraries/DependencyLibrary.py
Resource ../../libraries/onos.robot
Resource ../../libraries/voltctl.robot
Resource ../../libraries/utils.robot
+Resource ../../libraries/k8s.robot
Resource ../../variables/variables.robot
*** Variables ***
@@ -42,38 +40,50 @@
${KUBERNETES_YAML} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.yml
${HELM_CHARTS_DIR} ~/helm-charts
${VOLTHA_POD_NUM} 8
-${timeout} 90s
+${timeout} 60s
${num_onus} 1
${of_id} 0
${logical_id} 0
+${ports_per_onu} 5
+${has_dataplane} True
+${external_libs} True
+${teardown_device} False
*** Test Cases ***
Sanity E2E Test for OLT/ONU on POD
[Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
... Validate successful authentication/DHCP/E2E ping for the tech profile that is used
- [Tags] test1
+ [Tags] sanity test1
#[Setup] Clean Up Linux
- ${of_id}= Wait Until Keyword Succeeds 60s 15s Validate OLT Device in ONOS ${olt_serial_number}
- #Wait Until Keyword Succeeds 60s 2s Verify Eapol Flows Added ${k8s_node_ip} ${ONOS_SSH_PORT} 5
- Validate Authentication True ${src0['dp_iface_name']} wpa_supplicant.conf ${src0['ip']} ${src0['user']} ${src0['pass']}
+ ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
+ Set Global Variable ${of_id}
+ ${num_flows}= Evaluate ${num_onus} * ${ports_per_onu}
+ ${flows_str}= Convert To String ${num_flows}
+ Wait Until Keyword Succeeds ${timeout} 2s Verify Eapol Flows Added ${k8s_node_ip} ${ONOS_SSH_PORT} ${flows_str}
+ Run Keyword If ${has_dataplane} Validate Authentication True ${src0['dp_iface_name']}
+ ... wpa_supplicant.conf ${src0['ip']} ${src0['user']} ${src0['pass']}
... ${src0['container_type']} ${src0['container_name']}
- #Validate ONU authenticated in ONOS
- #Wait Until Keyword Succeeds 90s 2s Verify Number of AAA-Users ${k8s_node_ip} ${ONOS_SSH_PORT} ${num_onus}
- ${onu_port}= Wait Until Keyword Succeeds 90s 2s Get ONU Port in ONOS ${onu_serial_number} ${of_id}
- Wait Until Keyword Succeeds 60s 2s Execute ONOS Command ${k8s_node_ip} ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
- # Perform dhclient and ping operations
- Validate DHCP and Ping True True ${src0['dp_iface_name']} ${src0['s_tag']} ${src0['c_tag']} ${dst0['dp_iface_ip_qinq']}
- ... ${src0['ip']} ${src0['user']} ${src0['pass']} ${src0['container_type']} ${src0['container_name']} ${dst0['dp_iface_name']}
+ Wait Until Keyword Succeeds ${timeout} 2s Verify Number of AAA-Users ${k8s_node_ip} ${ONOS_SSH_PORT} ${num_onus}
+ ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${onu_serial_number} ${of_id}
+ Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command ${k8s_node_ip} ${ONOS_SSH_PORT}
+ ... volt-add-subscriber-access ${of_id} ${onu_port}
+ Run Keyword If ${has_dataplane} Validate DHCP and Ping True True ${src0['dp_iface_name']}
+ ... ${src0['s_tag']} ${src0['c_tag']} ${dst0['dp_iface_ip_qinq']} ${src0['ip']} ${src0['user']}
+ ... ${src0['pass']} ${src0['container_type']} ${src0['container_name']} ${dst0['dp_iface_name']}
... ${dst0['ip']} ${dst0['user']} ${dst0['pass']} ${dst0['container_type']} ${dst0['container_name']}
- #Validate DHCP allocation in ONOS
- Wait Until Keyword Succeeds 60s 2s Validate DHCP Allocations ${k8s_node_ip} ${ONOS_SSH_PORT} ${num_onus}
+ Wait Until Keyword Succeeds ${timeout} 2s Validate DHCP Allocations ${k8s_node_ip} ${ONOS_SSH_PORT} ${num_onus}
*** Keywords ***
Setup Suite
[Documentation] Setup the whole test suite
+ # BBSim sanity test doesn't need these imports from other repositories
+ Run Keyword If ${external_libs} Import Library ${CURDIR}/../../../voltha/tests/atests/common/testCaseUtils.py
+ Run Keyword If ${external_libs} Import Resource ${CURDIR}/../../../cord-tester/src/test/cord-api/Framework/Subscriber.robot
+ Run Keyword If ${external_libs} Import Resource ${CURDIR}/../../../cord-tester/src/test/cord-api/Framework/OLT.robot
+ Run Keyword If ${external_libs} Import Resource ${CURDIR}/../../../cord-tester/src/test/cord-api/Framework/DHCP.robot
+ Run Keyword If ${external_libs} Import Resource ${CURDIR}/../../../cord-tester/src/test/cord-api/Framework/Kubernetes.robot
Set Global Variable ${KUBECTL_CONFIG} export KUBECONFIG=%{KUBECONFIG}
Set Global Variable ${export_kubeconfig} export KUBECONFIG=${KUBERNETES_CONF}
- Set Global Variable ${of_id}
Set Global Variable ${VOLTCTL_CONFIG} export VOLTCONFIG=%{VOLTCONFIG}
${k8s_node_ip}= Evaluate ${nodes}[0].get("ip")
${k8s_node_user}= Evaluate ${nodes}[0].get("user")
@@ -105,24 +115,23 @@
Append To List ${container_list} voltha-rw-core-12
Append To List ${container_list} voltha-ofagent
Set Suite Variable ${container_list}
- Set Deployment Config Variables
- ${datetime}= Get Current Datetime On Kubernetes Node ${k8s_node_ip} ${k8s_node_user} ${k8s_node_pass}
+ # Set Deployment Config Variables seems like a candidate for refactoring.
+ # BBSim doesn't need it right now.
+ Run Keyword If ${external_libs} Set Deployment Config Variables
+ ${datetime}= Get Current Date
Set Suite Variable ${datetime}
+
Setup
[Documentation] Pre-test Setup
#create/preprovision device
${olt_device_id}= Create Device ${olt_ip} ${OLT_PORT}
Set Suite Variable ${olt_device_id}
- #enable device
Enable Device ${olt_device_id}
- #validate olt states
- Wait Until Keyword Succeeds 60s 5s Validate Device ${olt_serial_number} ENABLED ACTIVE
+ Wait Until Keyword Succeeds ${timeout} 5s Validate Device ${olt_serial_number} ENABLED ACTIVE
... REACHABLE
- #validate onu states
- Wait Until Keyword Succeeds 60s 5s Validate Device ${onu_serial_number} ENABLED ACTIVE
+ Wait Until Keyword Succeeds ${timeout} 5s Validate Device ${onu_serial_number} ENABLED ACTIVE
... REACHABLE onu=True onu_reason=tech-profile-config-download-success
- #get onu device id
${onu_device_id}= Get Device ID From SN ${onu_serial_number}
Set Suite Variable ${onu_device_id}
${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
@@ -132,18 +141,44 @@
[Documentation] kills processes and cleans up interfaces on src+dst servers
Get Device Output from Voltha ${olt_device_id}
#Get Logical Device Output from Voltha ${logical_id}
- Get ONOS Status ${k8s_node_ip}
- Clean Up Linux
- Log Kubernetes Containers Logs Since Time ${datetime} ${container_list}
+ Run Keyword If ${external_libs} Get ONOS Status ${k8s_node_ip}
+ Run Keyword If ${has_dataplane} Clean Up Linux
+ Run Keyword If ${external_libs} Log Kubernetes Containers Logs Since Time ${datetime} ${container_list}
+
+Teardown Suite
+ [Documentation] Clean up device if desired
+ Run Keyword If ${teardown_device} Delete Device and Verify
+ Run Keyword If ${teardown_device} Execute ONOS CLI Command ${k8s_node_ip} ${ONOS_SSH_PORT}
+ ... device-remove ${of_id}
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 ${src0['ip']} ${src0['user']} ${src0['pass']} ${src0['container_type']}
- ... ${src0['container_name']}
- Run Keyword And Ignore Error Kill Linux Process [d]hclient ${src0['ip']} ${src0['user']} ${src0['pass']} ${src0['container_type']}
- ... ${src0['container_name']}
- Run Keyword If '${dst0['ip']}' != '${None}' Run Keyword And Ignore Error Kill Linux Process [d]hcpd ${dst0['ip']} ${dst0['user']}
+ Run Keyword And Ignore Error Kill Linux Process [w]pa_supplicant ${src0['ip']}
+ ... ${src0['user']} ${src0['pass']} ${src0['container_type']} ${src0['container_name']}
+ Run Keyword And Ignore Error Kill Linux Process [d]hclient ${src0['ip']}
+ ... ${src0['user']} ${src0['pass']} ${src0['container_type']} ${src0['container_name']}
+ Run Keyword If '${dst0['ip']}' != '${None}' Run Keyword And Ignore Error
+ ... Kill Linux Process [d]hcpd ${dst0['ip']} ${dst0['user']}
... ${dst0['pass']} ${dst0['container_type']} ${dst0['container_name']}
- Delete IP Addresses from Interface on Remote Host ${src0['dp_iface_name']} ${src0['ip']} ${src0['user']} ${src0['pass']} ${src0['container_type']} ${src0['container_name']}
- Run Keyword If '${dst0['ip']}' != '${None}' Delete Interface on Remote Host ${dst0['dp_iface_name']}.${src0['s_tag']} ${dst0['ip']} ${dst0['user']} ${dst0['pass']}
+ Delete IP Addresses from Interface on Remote Host ${src0['dp_iface_name']} ${src0['ip']}
+ ... ${src0['user']} ${src0['pass']} ${src0['container_type']} ${src0['container_name']}
+ Run Keyword If '${dst0['ip']}' != '${None}' Delete Interface on Remote Host
+ ... ${dst0['dp_iface_name']}.${src0['s_tag']} ${dst0['ip']} ${dst0['user']} ${dst0['pass']}
... ${dst0['container_type']} ${dst0['container_name']}
+
+Delete Device and Verify
+ [Documentation] Disable -> Delete devices via voltctl and verify its removed
+ ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device disable ${onu_device_id}
+ Should Be Equal As Integers ${rc} 0
+ Wait Until Keyword Succeeds ${timeout} 5s Validate Device ${onu_serial_number} DISABLED UNKNOWN
+ ... REACHABLE
+ ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device delete ${onu_device_id}
+ Should Be Equal As Integers ${rc} 0
+ Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed ${onu_device_id}
+ ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
+ Should Be Equal As Integers ${rc} 0
+ Wait Until Keyword Succeeds ${timeout} 5s Validate Device ${olt_serial_number} DISABLED UNKNOWN
+ ... REACHABLE
+ ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device delete ${olt_device_id}
+ Should Be Equal As Integers ${rc} 0
+ Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed ${olt_device_id}