| # Copyright 2020-2024 Open Networking Foundation (ONF) and the ONF Contributors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # FIXME Can we use the same test against BBSim and Hardware? |
| |
| *** Settings *** |
| Documentation Test various end-to-end scenarios |
| 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 ../../libraries/DependencyLibrary.py |
| Resource ../../libraries/onos.robot |
| Resource ../../libraries/voltctl.robot |
| Resource ../../libraries/voltha.robot |
| Resource ../../libraries/utils.robot |
| Resource ../../libraries/k8s.robot |
| Resource ../../variables/variables.robot |
| Resource ../../libraries/power_switch.robot |
| |
| *** Variables *** |
| ${POD_NAME} flex-ocp-cord |
| ${KUBERNETES_CONF} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf |
| ${KUBERNETES_CONFIGS_DIR} ~/pod-configs/kubernetes-configs |
| #${KUBERNETES_CONFIGS_DIR} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf |
| ${KUBERNETES_YAML} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.yml |
| ${HELM_CHARTS_DIR} ~/helm-charts |
| ${VOLTHA_POD_NUM} 8 |
| ${NAMESPACE} voltha |
| ${INFRA_NAMESPACE} default |
| # For below variable value, using deployment name as using grep for |
| # parsing radius pod name, we can also use full radius pod name |
| ${RESTART_POD_NAME} radius |
| ${timeout} 120s |
| ${of_id} 0 |
| ${logical_id} 0 |
| ${has_dataplane} True |
| ${teardown_device} False |
| ${scripts} ../../scripts |
| ${with_onos} True |
| ${values_dir} ../data |
| ${kind_voltha_dir} ~/kind-voltha |
| # Per-test logging on failure is turned off by default; set this variable to enable |
| ${container_log_dir} ${None} |
| |
| # logging flag to enable Collect Logs, can be passed via the command line too |
| # example: -v logging:False |
| ${logging} True |
| |
| ${pausebeforesanity} False |
| ${onos_version} ${EMPTY} |
| |
| *** 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] sanity test1 |
| [Setup] Run Keywords Start Logging SanityTest |
| ... AND Setup |
| [Teardown] Run Keywords Collect Logs |
| ... AND Stop Logging SanityTest |
| Run Keyword If ${has_dataplane} Clean Up Linux |
| Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test |
| |
| Start voltha containers in a specific order and run sanity test |
| [Documentation] Starts voltha containers in a specific order and run sanity test |
| ... Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable |
| ... Two starts of voltha container in specific orders are supported: |
| ... First order: voltha, voltha-adapters-simulated, voltha-adapters-open-olt, voltha-adapters-open-onu, onos |
| ... Second order: voltha-adapters-simulated, voltha-adapters-open-olt, voltha-adapters-open-onu, voltha, onos |
| ... For both orders following scenarios will be run |
| ... - Remove helm charts |
| ... - Restart Helm Charts in a specific order |
| ... - Restart Port Forwarding |
| ... - Repeat the sanity check |
| [Tags] functional VOL-2008 StartVolthaContainers notready |
| [Setup] Start Logging StartVolthaContainers |
| [Teardown] Run Keywords Collect Logs |
| ... AND Stop Logging StartVolthaContainers |
| ${list_order} Create List First Second |
| # Get simulated adpters are running |
| ${contains_sim}= Set Variable False |
| ${container} Get Container Dictionary voltha |
| FOR ${key} IN @{container.keys()} |
| ${contains_sim}= Evaluate "sim-voltha-adapter" in """${key}""" |
| Exit For Loop IF ${contains_sim} |
| END |
| # Prepare Helm Chart list |
| ${list_voltha_apps} Create List ofagent rw-core |
| ${list_voltha_names} Create List voltha-voltha-ofagent voltha-voltha-rw-core |
| ${voltha} CreateDictionary helmchart=voltha namespace=voltha |
| ... apps=${list_voltha_apps} names=${list_voltha_names} |
| ${list_sim_apps} Create List adapter-simulated-olt adapter-simulated-onu |
| ${list_sim_names} Create List sim-voltha-adapter-simulated-olt sim-voltha-adapter-simulated-onu |
| ${sim} CreateDictionary helmchart=sim namespace=voltha |
| ... apps=${list_sim_apps} names=${list_sim_names} |
| ${list_openolt_apps} Create List ${OLT_ADAPTER_APP_LABEL} |
| ${list_openolt_names} Create List open-olt-voltha-adapter-openolt |
| ${open-olt} CreateDictionary helmchart=open-olt namespace=voltha |
| ... apps=${list_openolt_apps} names=${list_openolt_names} |
| ${list_openonu_apps} Create List adapter-open-onu |
| ${list_openonu_names} Create List open-onu-voltha-adapter-openonu |
| ${open-onu} CreateDictionary helmchart=open-onu namespace=voltha |
| ... apps=${list_openonu_apps} names=${list_openonu_names} |
| ${list_onos_apps} Create List onos-onos-classic |
| ${list_onos_names} Create List onos-onos-classic |
| ${onos} CreateDictionary helmchart=onos namespace=default |
| ... apps=${list_onos_apps} names=${list_onos_names} |
| ${List_Helm_Charts} Create List |
| Run Keyword If ${contains_sim} |
| ... Append To List ${List_Helm_Charts} ${voltha} ${sim} ${open-olt} ${open-onu} ${onos} |
| ... ELSE |
| ... Append To List ${List_Helm_Charts} ${voltha} ${open-olt} ${open-onu} ${onos} |
| # Start Loop over both orders |
| FOR ${order} IN @{list_order} |
| Perfom Start voltha containers in a specific order ${List_Helm_Charts} ${order} ${contains_sim} |
| ... ${with_onos} |
| END |
| |
| *** Keywords *** |
| Setup Suite |
| [Documentation] Set up the test suite |
| Common Test Suite Setup |
| #Restore all ONUs |
| #Run Keyword If ${has_dataplane} RestoreONUs ${num_onus} |
| #power_switch.robot needs it to support different vendor's power switch |
| ${switch_type}= Get Variable Value ${web_power_switch.type} |
| Run Keyword If "${switch_type}"!="" Set Global Variable ${powerswitch_type} ${switch_type} |
| |
| Perfom Start voltha containers in a specific order |
| [Arguments] ${List_Helm_Charts} ${order} ${contains_sim} ${with_onos} |
| [Documentation] Performes start ofvoltha containers in a specific order and run sanity test |
| # Repeat Teardown Suite |
| Run Keyword If ${with_onos} |
| ... Log \r\nRepeat Teardown Suite (${order} order)... console=yes |
| Run Keyword If ${with_onos} Teardown Suite |
| # Remove Helm Charts |
| Log \r\nRemove Helm Charts (${order} order)... console=yes |
| Remove Helm Charts ${List_Helm_Charts} |
| # Restart Helm Charts |
| Log \r\nRestart Helm Charts (${order} order)... console=yes |
| Restart Helm Charts ${List_Helm_Charts} ${order} ${contains_sim} |
| # Restart Port Forwarding |
| Log \r\nRestart Port Forwarding (${order} order)... console=yes |
| Restart Port Forwarding |
| # Push ONOS Kafka Configuration |
| Run Keyword If ${with_onos} |
| ... Log \r\nPush ONOS Kafka Configuration (${order} order)... console=yes |
| Run Keyword If ${with_onos} Sleep 5s |
| Run Keyword If ${with_onos} |
| ... Wait Until Keyword Succeeds 30s 3s Push ONOS Kafka Configuration |
| # Push ONOS DHCP L2 Relay Configuration |
| Run Keyword If ${with_onos} |
| ... Log \r\nPush ONOS DHCP L2 Relay Configuration (${order} order)... console=yes |
| Run Keyword If ${with_onos} Sleep 5s |
| Run Keyword If ${with_onos} |
| ... Wait Until Keyword Succeeds 30s 3s Push ONOS DHCP L2 Relay Configuration |
| #Enable VOLTHA ONOS EAPOL provisioning |
| Run Keyword If ${with_onos} |
| ... Log \r\nEnable VOLTHA ONOS EAPOL provisioning (${order} order)... console=yes |
| Run Keyword If ${with_onos} Sleep 5s |
| Run Keyword If ${with_onos} |
| ... Wait Until Keyword Succeeds 30s 3s Enable VOLTHA ONOS EAPOL provisioning |
| #Enable VOLTHA ONOS DHCP Provisioning |
| Run Keyword If ${with_onos} |
| ... Log \r\nEnable VOLTHA ONOS DHCP Provisioning (${order} order)... console=yes |
| Run Keyword If ${with_onos} Sleep 5s |
| Run Keyword If ${with_onos} |
| ... Wait Until Keyword Succeeds 30s 3s Enable VOLTHA ONOS DHCP Provisioning |
| #Disable VOLTHA ONOS IGMP Provisioning |
| Run Keyword If ${with_onos} |
| ... Log \r\nDisable VOLTHA ONOS IGMP Provisioning (${order} order)... console=yes |
| Run Keyword If ${with_onos} Sleep 5s |
| Run Keyword If ${with_onos} |
| ... Wait Until Keyword Succeeds 30s 3s Disable VOLTHA ONOS IGMP Provisioning |
| #Push ONOS SADIS Configuration |
| Run Keyword If ${with_onos} |
| ... Log \r\nPush ONOS SADIS Configuration (${order} order)... console=yes |
| Run Keyword If ${with_onos} Sleep 5s |
| Run Keyword If ${with_onos} |
| ... Wait Until Keyword Succeeds 30s 3s Push ONOS SADIS Configuration |
| # Configure ONOS RADIUS Connection |
| Run Keyword If ${with_onos} |
| ... Log \r\nPush ONOS RADIUS Connection (${order} order)... console=yes |
| Run Keyword If ${with_onos} Sleep 5s |
| Run Keyword If ${with_onos} |
| ... Wait Until Keyword Succeeds 30s 3s Configure ONOS RADIUS Connection |
| Log \r\nSleep 10s (${order} order)... console=yes |
| Sleep 10s |
| # Repeat Suite Setup |
| Run Keyword If ${with_onos} |
| ... Log \r\nRepeat Suite Setup (${order} order)... console=yes |
| Run Keyword If ${with_onos} Common Test Suite Setup |
| # Repeat Setup |
| Run Keyword If ${with_onos} |
| ... Log \r\nRepeat Setup (${order} order)... console=yes |
| Run Keyword If ${with_onos} Setup |
| Run Keyword If ${pausebeforesanity} Import Library Dialogs |
| Run Keyword If ${pausebeforesanity} Pause Execution Press OK to continue with Sanity Check! |
| # Repeat Sanity Test E2E Test for OLT/ONU on POD |
| Log \r\nRepeat Sanity Test E2E Test for OLT/ONU on POD (${order} order)... console=yes |
| Run Keyword If ${has_dataplane} Clean Up Linux |
| Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test |
| |
| Remove Helm Charts |
| [Arguments] ${List_Helm_Charts} |
| [Documentation] Removes the helm charts |
| FOR ${helm_chart} IN @{List_Helm_Charts} |
| ${helmchartname} Get From Dictionary ${helm_chart} helmchart |
| ${namespace} Get From Dictionary ${helm_chart} namespace |
| Run Keyword If ${with_onos} or ('${helmchartname}'!='onos') Remove VOLTHA Helm Charts ${helmchartname} |
| ... ${namespace} |
| ${list_names} Get From Dictionary ${helm_chart} names |
| Run Keyword If ${with_onos} or ('${helmchartname}'!='onos') |
| ... Wait For Pods Not Exist ${namespace} ${list_names} |
| END |
| |
| Remove VOLTHA Helm Charts |
| [Arguments] ${name} ${namespace} |
| [Documentation] Remove VOLTHA helm charts |
| ${cmd} Catenate helm uninstall --no-hooks --namespace '${namespace}' '${name}' |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Restart Helm Charts |
| [Arguments] ${List_Helm_Charts} ${order} ${contains_sim} |
| [Documentation] Restarts the helm charts |
| Run Keyword If '${order}'=='First' Restart Voltha |
| Run Keyword If ${contains_sim} Restart Voltha Adapters Simulated |
| Restart Voltha Adapters Open OLT |
| Restart Voltha Adapters Open ONU |
| Run Keyword If '${order}'=='Second' Restart Voltha |
| Run Keyword If ${with_onos} Restart ONOS |
| FOR ${helm_chart} IN @{List_Helm_Charts} |
| ${helmchartname} Get From Dictionary ${helm_chart} helmchart |
| ${namespace} Get From Dictionary ${helm_chart} namespace |
| ${list_apps} Get From Dictionary ${helm_chart} apps |
| Run Keyword If ${with_onos} or ('${helmchartname}'!='onos') |
| ... Wait For Pods Ready ${namespace} ${list_apps} |
| END |
| |
| Restart Voltha Adapters Simulated |
| [Documentation] Restart Voltha Adapters Simulated helm chart |
| ${cmd} Catenate |
| ... helm install -f ${values_dir}/sim-adapter-values.yaml --create-namespace |
| ... --set services.etcd.service=etcd.default.svc --set services.etcd.port=2379 |
| ... --set services.etcd.address=etcd.default.svc:2379 --set kafka_broker=kafka.default.svc:9092 |
| ... --set services.kafka.adapter.service=kafka.default.svc --set services.kafka.adapter.port=9092 |
| ... --set services.kafka.cluster.service=kafka.default.svc --set services.kafka.cluster.port=9092 |
| ... --set services.kafka.adapter.address=kafka.default.svc:9092 |
| ... --set services.kafka.cluster.address=kafka.default.svc:9092 --set defaults.log_level=WARN |
| ... --namespace ${NAMESPACE} sim onf/voltha-adapter-simulated |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Restart Voltha Adapters Open OLT |
| [Documentation] Restart Voltha Adapters Open OLT helm chart |
| ${cmd} Catenate |
| ... helm install -f ${values_dir}/open-olt-values.yaml --create-namespace |
| ... --set services.etcd.service=etcd.default.svc --set services.etcd.port=2379 |
| ... --set services.etcd.address=etcd.default.svc:2379 --set kafka_broker=kafka.default.svc:9092 |
| ... --set services.kafka.adapter.service=kafka.default.svc --set services.kafka.adapter.port=9092 |
| ... --set services.kafka.cluster.service=kafka.default.svc --set services.kafka.cluster.port=9092 |
| ... --set services.kafka.cluster.address=kafka.default.svc:9092 |
| ... --set services.kafka.adapter.address=kafka.default.svc:9092 --set defaults.log_level=WARN |
| ... --namespace ${NAMESPACE} open-olt onf/voltha-adapter-openolt |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Restart Voltha Adapters Open ONU |
| [Documentation] Restart Voltha Adapters Open ONU helm chart |
| ${cmd} Catenate |
| ... helm install -f ${values_dir}/open-onu-values.yaml --create-namespace |
| ... --set services.etcd.service=etcd.default.svc --set services.etcd.port=2379 |
| ... --set services.etcd.address=etcd.default.svc:2379 --set kafka_broker=kafka.default.svc:9092 |
| ... --set services.kafka.adapter.service=kafka.default.svc --set services.kafka.adapter.port=9092 |
| ... --set services.kafka.cluster.service=kafka.default.svc --set services.kafka.cluster.port=9092 |
| ... --set services.kafka.adapter.address=kafka.default.svc:9092 |
| ... --set services.kafka.cluster.address=kafka.default.svc:9092 --set replicas.adapter_open_onu=1 |
| ... --set defaults.log_level=WARN --namespace ${NAMESPACE} open-onu onf/voltha-adapter-openonu |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Restart Voltha |
| [Documentation] Restart Voltha helm chart |
| ${cmd} Catenate |
| ... helm install -f ${values_dir}/voltha-values.yaml --create-namespace --set therecanbeonlyone=true |
| ... --set services.etcd.service=etcd.default.svc --set services.etcd.port=2379 |
| ... --set services.etcd.address=etcd.default.svc:2379 --set kafka_broker=kafka.default.svc:9092 |
| ... --set services.kafka.adapter.service=kafka.default.svc --set services.kafka.adapter.port=9092 |
| ... --set services.kafka.cluster.service=kafka.default.svc --set services.kafka.cluster.port=9092 |
| ... --set services.kafka.adapter.address=kafka.default.svc:9092 |
| ... --set services.kafka.cluster.address=kafka.default.svc:9092 |
| ... --set 'services.controller[0].service=onos-onos-classic-0.onos-onos-classic-hs.default.svc' |
| ... --set 'services.controller[0].port=6653' |
| ... --set 'services.controller[0].address=onos-onos-classic-0.onos-onos-classic-hs.default.svc:6653' |
| ... --set defaults.log_level=WARN --namespace ${NAMESPACE} voltha onf/voltha |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| |
| Restart ONOS |
| [Documentation] Restart ONOS helm chart |
| ${cmd}= Run Keyword If '${onos_version}'=='${EMPTY}' Catenate |
| ... helm install -f ${values_dir}/onos-values.yaml |
| ... --create-namespace --set image.repository=voltha/voltha-onos,image.tag=master,replicas=1,atomix.replicas=0 |
| ... --set defaults.log_level=WARN --namespace default onos onos/onos-classic |
| ... ELSE Catenate |
| ... helm install -f ${values_dir}/minimal-values.yaml |
| ... --create-namespace --set image.repository=voltha/voltha-onos,image.tag=master,replicas=1,atomix.replicas=0 |
| ... --set defaults.log_level=WARN --namespace default --version ${onos_version} onos onos/onos-classic |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Restart Port Forwarding |
| [Documentation] Restarts the VOLTHA port forwarding rules |
| ${List_Tags} Create List etcd-minimal voltha-voltha-api-minimal kafka-minimal |
| ... onos-onos-classic-hs-minimal |
| FOR ${tag} IN @{List_Tags} |
| Run Keyword If ${with_onos} or ('${tag}'!='onos-onos-classic-hs-minimal') |
| ... Restart VOLTHA Port Forward ${tag} |
| END |
| |
| Push ONOS Kafka Configuration |
| [Documentation] Pushes the ONOS kafka Configuration |
| ${cmd} Catenate |
| ... cd ~/kind-voltha; |
| ... curl -sSL --user karaf:karaf -w %\{http_code\} -X POST --fail -H Content-Type:application/json |
| ... http://127.0.0.1:8181/onos/v1/network/configuration/apps/org.opencord.kafka |
| ... --data '{"kafka":{"bootstrapServers":"kafka.default.svc:9092"}}'; cd - |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Push ONOS DHCP L2 Relay Configuration |
| [Documentation] Pushes the ONOS DHCP L2 Relay Configuration |
| ${cmd} Catenate |
| ... cd ~/kind-voltha; |
| ... curl -sSL --user karaf:karaf -w %\{http_code\} -X POST --fail -H Content-Type:application/json |
| ... http://127.0.0.1:8181/onos/v1/network/configuration/apps/org.opencord.dhcpl2relay |
| ... --data @onos-files/onos-dhcpl2relay.json; cd - |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Enable VOLTHA ONOS EAPOL provisioning |
| [Documentation] Pushes the ONOS EAPOL Configuration |
| ${cmd} Catenate |
| ... cd ~/kind-voltha; |
| ... curl -sSL --user karaf:karaf -w %\{http_code\} -X POST --fail -H Content-Type:application/json |
| ... http://127.0.0.1:8181/onos/v1/configuration/org.opencord.olt.impl.OltFlowService |
| ... --data '{"enableEapol":true}'; cd - |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Enable VOLTHA ONOS DHCP Provisioning |
| [Documentation] Pushes the ONOS OLT DHCP Configuration |
| ${cmd} Catenate |
| ... cd ~/kind-voltha; |
| ... curl -sSL --user karaf:karaf -w %\{http_code\} -X POST --fail -H Content-Type:application/json |
| ... http://127.0.0.1:8181/onos/v1/configuration/org.opencord.olt.impl.OltFlowService |
| ... --data '{"enableDhcpOnNni":true,"enableDhcpV4":true}'; cd - |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Disable VOLTHA ONOS IGMP Provisioning |
| [Documentation] Pushes the ONOS IGMP Configuration |
| ${cmd} Catenate |
| ... cd ~/kind-voltha; |
| ... curl -sSL --user karaf:karaf -w %\{http_code\} -X POST --fail -H Content-Type:application/json |
| ... http://127.0.0.1:8181/onos/v1/configuration/org.opencord.olt.impl.OltFlowService |
| ... --data '{"enableIgmpOnNni":false}'; cd - |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Push ONOS SADIS Configuration |
| [Documentation] Pushes the ONOS SADIS Configuration |
| ${cmd} Catenate |
| ... cd ~/kind-voltha; |
| ... curl -sSL --user karaf:karaf -w %\{http_code\} -X POST --fail -H Content-Type:application/json |
| ... http://127.0.0.1:8181/onos/v1/network/configuration/apps/org.opencord.sadis |
| ... --data @onos-files/onos-sadis-sample.json; cd - |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |
| |
| Configure ONOS RADIUS Connection |
| [Documentation] Configures the ONOS RADIUS Connection |
| ${cmd} Catenate |
| ... sed -e s/:RADIUS_SVC:/radius-freeradius.default.svc/g -e s/:RADIUS_PORT:/1812/ |
| ... ${kind_voltha_dir}/onos-files/onos-aaa.json | curl --fail -sSL --user karaf:karaf -X POST |
| ... http://127.0.0.1:8181/onos/v1/network/configuration/apps/org.opencord.aaa |
| ... -H Content-type:application/json -d@- |
| ${rc} Run And Return Rc ${cmd} |
| Should Be Equal as Integers ${rc} 0 |