blob: 5bc1a400e8f5737a05c5d03f17d3f25a4b34e13e [file] [log] [blame]
Suchitra Vemuri3f8b0f62019-09-12 13:25:16 -07001#Copyright 2017-present Open Networking Foundation
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -07002#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
Matteo Scandolo1294aeb2019-09-24 16:20:32 -070015# FIXME Can we use the same test against BBSim and Hardware?
16
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070017*** Settings ***
Zack Williamsec53a1b2019-09-16 15:50:52 -070018Documentation Test various end-to-end scenarios
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070019Suite Setup Setup Suite
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070020Test Setup Setup
21Test Teardown Teardown
Andy Bavierba9866b2019-10-11 07:11:53 -070022Suite Teardown Teardown Suite
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070023Library Collections
24Library String
25Library OperatingSystem
26Library XML
27Library RequestsLibrary
Andy Bavierba9866b2019-10-11 07:11:53 -070028Library ../../libraries/DependencyLibrary.py
Suchitra Vemurib8ed2d52019-09-30 13:22:51 -070029Resource ../../libraries/onos.robot
30Resource ../../libraries/voltctl.robot
31Resource ../../libraries/utils.robot
Andy Bavierba9866b2019-10-11 07:11:53 -070032Resource ../../libraries/k8s.robot
Suchitra Vemurib8ed2d52019-09-30 13:22:51 -070033Resource ../../variables/variables.robot
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070034
35*** Variables ***
Zack Williamsec53a1b2019-09-16 15:50:52 -070036${POD_NAME} flex-ocp-cord
37${KUBERNETES_CONF} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
38${KUBERNETES_CONFIGS_DIR} ~/pod-configs/kubernetes-configs
39#${KUBERNETES_CONFIGS_DIR} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.conf
40${KUBERNETES_YAML} ${KUBERNETES_CONFIGS_DIR}/${POD_NAME}.yml
41${HELM_CHARTS_DIR} ~/helm-charts
42${VOLTHA_POD_NUM} 8
suraj gourd64356b2019-11-07 13:26:20 +000043${NAMESPACE} voltha
44# For below variable value, using deployment name as using grep for
45# parsing radius pod name, we can also use full radius pod name
46${RESTART_POD_NAME} radius
Andy Bavierba9866b2019-10-11 07:11:53 -070047${timeout} 60s
Zack Williamsec53a1b2019-09-16 15:50:52 -070048${of_id} 0
49${logical_id} 0
Andy Bavierba9866b2019-10-11 07:11:53 -070050${has_dataplane} True
51${external_libs} True
52${teardown_device} False
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070053
54*** Test Cases ***
55Sanity E2E Test for OLT/ONU on POD
56 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
57 ... Validate successful authentication/DHCP/E2E ping for the tech profile that is used
Andy Bavierba9866b2019-10-11 07:11:53 -070058 [Tags] sanity test1
Suchitra Vemuri6db89412019-11-14 14:52:54 -080059 [Teardown] NONE
Andy Bavierba9866b2019-10-11 07:11:53 -070060 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
61 Set Global Variable ${of_id}
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070062
63 FOR ${I} IN RANGE 0 ${num_onus}
64 ${src}= Set Variable ${hosts.src[${I}]}
65 ${dst}= Set Variable ${hosts.dst[${I}]}
66
Gilles Depatieb5682f82019-10-31 10:39:45 -040067 Wait Until Keyword Succeeds ${timeout} 5s Validate Device ENABLED ACTIVE REACHABLE
68 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070069
70 ${onu_device_id}= Get Device ID From SN ${src['onu']}
Gilles Depatie675a2062019-10-22 12:44:42 -040071 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
72 ... ${of_id}
73 Wait Until Keyword Succeeds ${timeout} 2s Verify Eapol Flows Added For ONU ${k8s_node_ip}
74 ... ${ONOS_SSH_PORT} ${onu_port}
75 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate Authentication True
76 ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070077 ... ${src['container_type']} ${src['container_name']}
Gilles Depatie675a2062019-10-22 12:44:42 -040078 Wait Until Keyword Succeeds ${timeout} 2s Verify ONU in AAA-Users ${k8s_node_ip}
79 ... ${ONOS_SSH_PORT} ${onu_port}
80 Wait Until Keyword Succeeds ${timeout} 2s Execute ONOS CLI Command ${k8s_node_ip}
81 ... ${ONOS_SSH_PORT} volt-add-subscriber-access ${of_id} ${onu_port}
82 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
83 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
84 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
85 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
86 ... ${dst['container_name']}
Suchitra Vemuri87f1d7f2019-11-12 15:03:48 -080087 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
Gilles Depatie675a2062019-10-22 12:44:42 -040088 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070089 END
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070090
Suchitra Vemuri6db89412019-11-14 14:52:54 -080091Test Disable and Enable ONU
92 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
93 ... Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
94 ... Perform disable on the ONUs and validate that the pings do not succeed
95 ... Perform enable on the ONUs and validate that the pings are successful
96 [Tags] functional test2
97 [Setup] None
98 #[Teardown] None
99
100 FOR ${I} IN RANGE 0 ${num_onus}
101 ${src}= Set Variable ${hosts.src[${I}]}
102 ${dst}= Set Variable ${hosts.dst[${I}]}
103
104 ${onu_device_id}= Get Device ID From SN ${src['onu']}
105 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
106 ... ${of_id}
107 Disable Device ${onu_device_id}
108 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 60s 2s Check Ping False ${dst['dp_iface_ip_qinq']}
109 ... ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
110 Enable Device ${onu_device_id}
111 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
112 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
113 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 60s 2s Check Ping True ${dst['dp_iface_ip_qinq']}
114 ... ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
115 END
116
suraj gourd64356b2019-11-07 13:26:20 +0000117Check OLT/ONU Authentication After Radius Pod Restart
118 [Documentation] After radius restart, validates eapol flows and dhcp allocation
119 ... and validates onu in onos
Suchitra Vemuri6db89412019-11-14 14:52:54 -0800120 [Tags] functional test3
121 [Setup] NONE
suraj gourd64356b2019-11-07 13:26:20 +0000122 Wait Until Keyword Succeeds ${timeout} 15s Restart Pod ${NAMESPACE} ${RESTART_POD_NAME}
123
124 FOR ${I} IN RANGE 0 ${num_onus}
125 ${src}= Set Variable ${hosts.src[${I}]}
126 ${dst}= Set Variable ${hosts.dst[${I}]}
127
128
129 ${onu_device_id}= Get Device ID From SN ${src['onu']}
130 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
131 ... ${of_id}
132 Wait Until Keyword Succeeds ${timeout} 2s Verify Eapol Flows Added For ONU ${k8s_node_ip}
133 ... ${ONOS_SSH_PORT} ${onu_port}
134 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate Authentication True
135 ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
136 ... ${src['container_type']} ${src['container_name']}
137 Wait Until Keyword Succeeds ${timeout} 2s Verify ONU in AAA-Users ${k8s_node_ip}
138 ... ${ONOS_SSH_PORT} ${onu_port}
139 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
140 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
141 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
142 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
143 ... ${dst['container_name']}
144 Wait Until Keyword Succeeds ${timeout} 2s Run Keyword And Continue On Failure
145 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
146 END
147
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700148*** Keywords ***
149Setup Suite
Zack Williamsec53a1b2019-09-16 15:50:52 -0700150 [Documentation] Setup the whole test suite
Andy Bavierba9866b2019-10-11 07:11:53 -0700151 # BBSim sanity test doesn't need these imports from other repositories
Gilles Depatie675a2062019-10-22 12:44:42 -0400152 Run Keyword If ${external_libs} Import Library
153 ... ${CURDIR}/../../../voltha/tests/atests/common/testCaseUtils.py
154 Run Keyword If ${external_libs} Import Resource
155 ... ${CURDIR}/../../../cord-tester/src/test/cord-api/Framework/Subscriber.robot
156 Run Keyword If ${external_libs} Import Resource
157 ... ${CURDIR}/../../../cord-tester/src/test/cord-api/Framework/OLT.robot
158 Run Keyword If ${external_libs} Import Resource
159 ... ${CURDIR}/../../../cord-tester/src/test/cord-api/Framework/DHCP.robot
160 Run Keyword If ${external_libs} Import Resource
161 ... ${CURDIR}/../../../cord-tester/src/test/cord-api/Framework/Kubernetes.robot
Suchitra Vemuri2adc07e2019-09-05 17:25:31 -0700162 Set Global Variable ${KUBECTL_CONFIG} export KUBECONFIG=%{KUBECONFIG}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700163 Set Global Variable ${export_kubeconfig} export KUBECONFIG=${KUBERNETES_CONF}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700164 Set Global Variable ${VOLTCTL_CONFIG} export VOLTCONFIG=%{VOLTCONFIG}
165 ${k8s_node_ip}= Evaluate ${nodes}[0].get("ip")
166 ${k8s_node_user}= Evaluate ${nodes}[0].get("user")
167 ${k8s_node_pass}= Evaluate ${nodes}[0].get("pass")
168 Check CLI Tools Configured
169 ${onos_auth}= Create List karaf karaf
170 ${HEADERS} Create Dictionary Content-Type=application/json
Suchitra Vemuri9c24d2b2019-09-30 10:28:25 -0700171 Create Session ONOS http://${k8s_node_ip}:${ONOS_REST_PORT} auth=${ONOS_AUTH}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700172 ${olt_ip}= Evaluate ${olts}[0].get("ip")
173 ${olt_user}= Evaluate ${olts}[0].get("user")
174 ${olt_pass}= Evaluate ${olts}[0].get("pass")
175 ${olt_serial_number}= Evaluate ${olts}[0].get("serial")
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -0700176 ${num_onus}= Get Length ${hosts.src}
177 ${num_onus}= Convert to String ${num_onus}
178 Set Suite Variable ${num_onus}
Suchitra Vemuri2adc07e2019-09-05 17:25:31 -0700179 Set Suite Variable ${olt_serial_number}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700180 Set Suite Variable ${olt_ip}
181 Set Suite Variable ${olt_user}
182 Set Suite Variable ${olt_pass}
183 Set Suite Variable ${k8s_node_ip}
184 Set Suite Variable ${k8s_node_user}
185 Set Suite Variable ${k8s_node_pass}
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -0700186 @{container_list}= Create List adapter-open-olt adapter-open-onu voltha-api-server
187 ... voltha-ro-core voltha-rw-core-11 voltha-rw-core-12 voltha-ofagent
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700188 Set Suite Variable ${container_list}
Andy Bavierba9866b2019-10-11 07:11:53 -0700189 ${datetime}= Get Current Date
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700190 Set Suite Variable ${datetime}
191
192Setup
Zack Williamsec53a1b2019-09-16 15:50:52 -0700193 [Documentation] Pre-test Setup
Gilles Depatieb5682f82019-10-31 10:39:45 -0400194 #test for empty device list
195 ${length}= Test Empty Device List
196 Should Be Equal As Integers ${length} 0
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700197 #create/preprovision device
Suchitra Vemuric59eb272019-09-18 17:59:33 -0700198 ${olt_device_id}= Create Device ${olt_ip} ${OLT_PORT}
199 Set Suite Variable ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400200 #validate olt states
201 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN
202 ... ${EMPTY} ${olt_device_id}
Suchitra Vemuric59eb272019-09-18 17:59:33 -0700203 Enable Device ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400204 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device ENABLED ACTIVE REACHABLE
205 ... ${olt_serial_number}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700206 ${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
207 Set Suite Variable ${logical_id}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700208
209Teardown
210 [Documentation] kills processes and cleans up interfaces on src+dst servers
Suchitra Vemuri65e5fbb2019-09-27 15:23:52 -0700211 Get Device Output from Voltha ${olt_device_id}
212 #Get Logical Device Output from Voltha ${logical_id}
Andy Bavierba9866b2019-10-11 07:11:53 -0700213 Run Keyword If ${external_libs} Get ONOS Status ${k8s_node_ip}
214 Run Keyword If ${has_dataplane} Clean Up Linux
215 Run Keyword If ${external_libs} Log Kubernetes Containers Logs Since Time ${datetime} ${container_list}
216
217Teardown Suite
218 [Documentation] Clean up device if desired
219 Run Keyword If ${teardown_device} Delete Device and Verify
Gilles Depatieb5682f82019-10-31 10:39:45 -0400220 ${length}= Run Keyword If ${teardown_device} Run Keyword And Return Test Empty Device List
221 Run Keyword If ${teardown_device} Should Be Equal As Integers ${length} 0
Andy Bavierba9866b2019-10-11 07:11:53 -0700222 Run Keyword If ${teardown_device} Execute ONOS CLI Command ${k8s_node_ip} ${ONOS_SSH_PORT}
223 ... device-remove ${of_id}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700224
Gilles Depatieb5682f82019-10-31 10:39:45 -0400225
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700226Clean Up Linux
227 [Documentation] Kill processes and clean up interfaces on src+dst servers
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -0700228 FOR ${I} IN RANGE 0 ${num_onus}
229 ${src}= Set Variable ${hosts.src[${I}]}
230 ${dst}= Set Variable ${hosts.dst[${I}]}
231 Run Keyword And Ignore Error Kill Linux Process [w]pa_supplicant ${src['ip']}
232 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
233 Run Keyword And Ignore Error Kill Linux Process [d]hclient ${src['ip']}
234 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
235 Run Keyword If '${dst['ip']}' != '${None}' Run Keyword And Ignore Error
236 ... Kill Linux Process [d]hcpd ${dst['ip']} ${dst['user']}
237 ... ${dst['pass']} ${dst['container_type']} ${dst['container_name']}
238 Delete IP Addresses from Interface on Remote Host ${src['dp_iface_name']} ${src['ip']}
239 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
240 Run Keyword If '${dst['ip']}' != '${None}' Delete Interface on Remote Host
241 ... ${dst['dp_iface_name']}.${src['s_tag']} ${dst['ip']} ${dst['user']} ${dst['pass']}
242 ... ${dst['container_type']} ${dst['container_name']}
243 END
Andy Bavierba9866b2019-10-11 07:11:53 -0700244
245Delete Device and Verify
246 [Documentation] Disable -> Delete devices via voltctl and verify its removed
Andy Bavierba9866b2019-10-11 07:11:53 -0700247 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
248 Should Be Equal As Integers ${rc} 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400249 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
250 ... ${olt_serial_number}
Andy Bavierba9866b2019-10-11 07:11:53 -0700251 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device delete ${olt_device_id}
252 Should Be Equal As Integers ${rc} 0
253 Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed ${olt_device_id}