blob: 1307da070e96e46a4a4115b414e8eff1368223cd [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 Vemuri1a970a62019-11-26 12:52:16 -080089 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -070090 END
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -070091
Suchitra Vemuri6db89412019-11-14 14:52:54 -080092Test Disable and Enable ONU
93 [Documentation] Validates E2E Ping Connectivity and object states for the given scenario:
94 ... Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
95 ... Perform disable on the ONUs and validate that the pings do not succeed
96 ... Perform enable on the ONUs and validate that the pings are successful
97 [Tags] functional test2
98 [Setup] None
suraj gour7f6d5fe2019-11-29 10:56:35 +000099 [Teardown] None
Suchitra Vemuri6db89412019-11-14 14:52:54 -0800100
101 FOR ${I} IN RANGE 0 ${num_onus}
102 ${src}= Set Variable ${hosts.src[${I}]}
103 ${dst}= Set Variable ${hosts.dst[${I}]}
104
105 ${onu_device_id}= Get Device ID From SN ${src['onu']}
106 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
107 ... ${of_id}
108 Disable Device ${onu_device_id}
109 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 60s 2s Check Ping False ${dst['dp_iface_ip_qinq']}
110 ... ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
111 Enable Device ${onu_device_id}
112 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
113 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
114 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 60s 2s Check Ping True ${dst['dp_iface_ip_qinq']}
115 ... ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
116 END
117
suraj gourd64356b2019-11-07 13:26:20 +0000118Check OLT/ONU Authentication After Radius Pod Restart
suraj gour7f6d5fe2019-11-29 10:56:35 +0000119 [Documentation] After radius restart, triggers reassociation, checks status and
120 ... authentication, validates dhcp and ping. Note : wpa reassociate works only when
121 ... wpa supplicant is running in background hence it is recommended to remove
122 ... teardown from previous test or uncomment 'Teardown None'.
123 ... Assuming that test1 was executed where all the ONUs are authenticated/DHCP/pingable
Suchitra Vemuri6db89412019-11-14 14:52:54 -0800124 [Tags] functional test3
125 [Setup] NONE
suraj gourd64356b2019-11-07 13:26:20 +0000126 Wait Until Keyword Succeeds ${timeout} 15s Restart Pod ${NAMESPACE} ${RESTART_POD_NAME}
127
128 FOR ${I} IN RANGE 0 ${num_onus}
129 ${src}= Set Variable ${hosts.src[${I}]}
130 ${dst}= Set Variable ${hosts.dst[${I}]}
131
132
133 ${onu_device_id}= Get Device ID From SN ${src['onu']}
134 ${onu_port}= Wait Until Keyword Succeeds ${timeout} 2s Get ONU Port in ONOS ${src['onu']}
135 ... ${of_id}
136 Wait Until Keyword Succeeds ${timeout} 2s Verify Eapol Flows Added For ONU ${k8s_node_ip}
137 ... ${ONOS_SSH_PORT} ${onu_port}
suraj gour7f6d5fe2019-11-29 10:56:35 +0000138 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate Authentication After Reassociate
139 ... True ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']}
suraj gourd64356b2019-11-07 13:26:20 +0000140 ... ${src['container_type']} ${src['container_name']}
141 Wait Until Keyword Succeeds ${timeout} 2s Verify ONU in AAA-Users ${k8s_node_ip}
142 ... ${ONOS_SSH_PORT} ${onu_port}
143 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
144 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
145 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
146 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
147 ... ${dst['container_name']}
148 Wait Until Keyword Succeeds ${timeout} 2s Run Keyword And Continue On Failure
149 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
150 END
151
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700152*** Keywords ***
153Setup Suite
Andy Bavier88cd9f62019-11-26 16:22:33 -0700154 [Documentation] Set up the test suite
155 Common Test Suite Setup
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700156
157Setup
Zack Williamsec53a1b2019-09-16 15:50:52 -0700158 [Documentation] Pre-test Setup
Gilles Depatieb5682f82019-10-31 10:39:45 -0400159 #test for empty device list
160 ${length}= Test Empty Device List
161 Should Be Equal As Integers ${length} 0
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700162 #create/preprovision device
Suchitra Vemuric59eb272019-09-18 17:59:33 -0700163 ${olt_device_id}= Create Device ${olt_ip} ${OLT_PORT}
164 Set Suite Variable ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400165 #validate olt states
166 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN
167 ... ${EMPTY} ${olt_device_id}
Suchitra Vemuric59eb272019-09-18 17:59:33 -0700168 Enable Device ${olt_device_id}
Gilles Depatieb5682f82019-10-31 10:39:45 -0400169 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device ENABLED ACTIVE REACHABLE
170 ... ${olt_serial_number}
Suchitra Vemuri00d147d2019-09-13 13:07:32 -0700171 ${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
172 Set Suite Variable ${logical_id}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700173
174Teardown
175 [Documentation] kills processes and cleans up interfaces on src+dst servers
Suchitra Vemuri1a970a62019-11-26 12:52:16 -0800176 Run Keyword and Ignore Error Get Device List from Voltha
177 Run Keyword and Ignore Error Get Device Output from Voltha ${olt_device_id}
178 Run Keyword and Ignore Error Get Logical Device Output from Voltha ${logical_id}
Andy Bavierba9866b2019-10-11 07:11:53 -0700179 Run Keyword If ${external_libs} Get ONOS Status ${k8s_node_ip}
180 Run Keyword If ${has_dataplane} Clean Up Linux
181 Run Keyword If ${external_libs} Log Kubernetes Containers Logs Since Time ${datetime} ${container_list}
182
183Teardown Suite
184 [Documentation] Clean up device if desired
185 Run Keyword If ${teardown_device} Delete Device and Verify
Gilles Depatieb5682f82019-10-31 10:39:45 -0400186 ${length}= Run Keyword If ${teardown_device} Run Keyword And Return Test Empty Device List
187 Run Keyword If ${teardown_device} Should Be Equal As Integers ${length} 0
Andy Bavierba9866b2019-10-11 07:11:53 -0700188 Run Keyword If ${teardown_device} Execute ONOS CLI Command ${k8s_node_ip} ${ONOS_SSH_PORT}
189 ... device-remove ${of_id}
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700190
Gilles Depatieb5682f82019-10-31 10:39:45 -0400191
Suchitra Vemuri65cd65f2019-08-30 14:39:22 -0700192Clean Up Linux
193 [Documentation] Kill processes and clean up interfaces on src+dst servers
Suchitra Vemuri8a9c3782019-10-23 12:43:01 -0700194 FOR ${I} IN RANGE 0 ${num_onus}
195 ${src}= Set Variable ${hosts.src[${I}]}
196 ${dst}= Set Variable ${hosts.dst[${I}]}
197 Run Keyword And Ignore Error Kill Linux Process [w]pa_supplicant ${src['ip']}
198 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
199 Run Keyword And Ignore Error Kill Linux Process [d]hclient ${src['ip']}
200 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
201 Run Keyword If '${dst['ip']}' != '${None}' Run Keyword And Ignore Error
202 ... Kill Linux Process [d]hcpd ${dst['ip']} ${dst['user']}
203 ... ${dst['pass']} ${dst['container_type']} ${dst['container_name']}
204 Delete IP Addresses from Interface on Remote Host ${src['dp_iface_name']} ${src['ip']}
205 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
206 Run Keyword If '${dst['ip']}' != '${None}' Delete Interface on Remote Host
207 ... ${dst['dp_iface_name']}.${src['s_tag']} ${dst['ip']} ${dst['user']} ${dst['pass']}
208 ... ${dst['container_type']} ${dst['container_name']}
209 END
Andy Bavierba9866b2019-10-11 07:11:53 -0700210
211Delete Device and Verify
212 [Documentation] Disable -> Delete devices via voltctl and verify its removed
Andy Bavierba9866b2019-10-11 07:11:53 -0700213 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
214 Should Be Equal As Integers ${rc} 0
Gilles Depatieb5682f82019-10-31 10:39:45 -0400215 Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Device DISABLED UNKNOWN REACHABLE
216 ... ${olt_serial_number}
Andy Bavierba9866b2019-10-11 07:11:53 -0700217 ${rc} ${output}= Run and Return Rc and Output ${VOLTCTL_CONFIG}; voltctl device delete ${olt_device_id}
218 Should Be Equal As Integers ${rc} 0
219 Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed ${olt_device_id}