blob: 2d9dd0ad430289f2b3349f3e2fbf154095421a1f [file] [log] [blame]
Kailash92764922019-07-25 08:21:39 -07001# Copyright 2017-present Open Networking Foundation
2#
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.
Kailash92764922019-07-25 08:21:39 -070014# robot test functions
15
16*** Settings ***
17Documentation Library for various utilities
18Library SSHLibrary
Kailash92764922019-07-25 08:21:39 -070019Library String
20Library DateTime
21Library Process
22Library Collections
23Library RequestsLibrary
24Library OperatingSystem
Andy Bavier63460da2020-02-20 14:35:12 -070025Library CORDRobot
26Library ImportResource resources=CORDRobot
Kailash92764922019-07-25 08:21:39 -070027
28*** Keywords ***
Kailash528f7c02019-07-31 10:55:49 -070029Check CLI Tools Configured
30 [Documentation] Tests that use 'voltctl' and 'kubectl' should execute this keyword in suite setup
31 # check voltctl and kubectl configured
Zack Williamsa8fe75a2020-01-10 14:25:27 -070032 ${voltctl_rc}= Run And Return RC voltctl device list
33 ${kubectl_rc}= Run And Return RC kubectl get pods
Gilles Depatie675a2062019-10-22 12:44:42 -040034 Run Keyword If ${voltctl_rc} != 0 or ${kubectl_rc} != 0 FATAL ERROR
35 ... VOLTCTL and KUBECTL not configured. Please configure before executing tests.
Gilles Depatieb5682f82019-10-31 10:39:45 -040036
37Send File To Onos
Zack Williamsa8fe75a2020-01-10 14:25:27 -070038 [Documentation] Send the content of the file to Onos to selected section of configuration
39 ... using Post Request
40 [Arguments] ${CONFIG_FILE} ${section}
41 ${Headers}= Create Dictionary Content-Type application/json
42 ${File_Data}= OperatingSystem.Get File ${CONFIG_FILE}
43 Log ${Headers}
44 Log ${File_Data}
45 ${resp}= Post Request ONOS
46 ... /onos/v1/network/configuration/${section} headers=${Headers} data=${File_Data}
47 Should Be Equal As Strings ${resp.status_code} 200
Andy Bavier88cd9f62019-11-26 16:22:33 -070048
49Common Test Suite Setup
50 [Documentation] Setup the test suite
Andy Bavier88cd9f62019-11-26 16:22:33 -070051 Set Global Variable ${KUBECTL_CONFIG} export KUBECONFIG=%{KUBECONFIG}
52 Set Global Variable ${VOLTCTL_CONFIG} export VOLTCONFIG=%{VOLTCONFIG}
53 ${k8s_node_ip}= Evaluate ${nodes}[0].get("ip")
54 ${k8s_node_user}= Evaluate ${nodes}[0].get("user")
55 ${k8s_node_pass}= Evaluate ${nodes}[0].get("pass")
56 Check CLI Tools Configured
57 ${onos_auth}= Create List karaf karaf
58 ${HEADERS} Create Dictionary Content-Type=application/json
59 Create Session ONOS http://${k8s_node_ip}:${ONOS_REST_PORT} auth=${ONOS_AUTH}
60 ${olt_ip}= Evaluate ${olts}[0].get("ip")
61 ${olt_user}= Evaluate ${olts}[0].get("user")
62 ${olt_pass}= Evaluate ${olts}[0].get("pass")
63 ${olt_serial_number}= Evaluate ${olts}[0].get("serial")
64 ${num_onus}= Get Length ${hosts.src}
65 ${num_onus}= Convert to String ${num_onus}
66 #send sadis file to onos
Andy Baviera2691752019-11-27 12:18:38 -070067 ${sadis_file}= Get Variable Value ${sadis.file}
Zack Williamsa8fe75a2020-01-10 14:25:27 -070068 Log To Console \nSadis File:${sadis_file}
Andy Bavier88cd9f62019-11-26 16:22:33 -070069 Run Keyword Unless '${sadis_file}' is '${None}' Send File To Onos ${sadis_file} apps/
70 Set Suite Variable ${num_onus}
71 Set Suite Variable ${olt_serial_number}
72 Set Suite Variable ${olt_ip}
73 Set Suite Variable ${olt_user}
74 Set Suite Variable ${olt_pass}
75 Set Suite Variable ${k8s_node_ip}
76 Set Suite Variable ${k8s_node_user}
77 Set Suite Variable ${k8s_node_pass}
78 @{container_list}= Create List adapter-open-olt adapter-open-onu voltha-api-server
79 ... voltha-ro-core voltha-rw-core-11 voltha-rw-core-12 voltha-ofagent
80 Set Suite Variable ${container_list}
81 ${datetime}= Get Current Date
suraj gour7f6d5fe2019-11-29 10:56:35 +000082 Set Suite Variable ${datetime}
83
84WPA Reassociate
suraj gour7f6d5fe2019-11-29 10:56:35 +000085 [Documentation] Executes a particular wpa_cli reassociate, which performs force reassociation
Zack Williamsa8fe75a2020-01-10 14:25:27 -070086 [Arguments] ${iface} ${ip} ${user} ${pass}=${None}
87 ... ${container_type}=${None} ${container_name}=${None}
suraj gour7f6d5fe2019-11-29 10:56:35 +000088 #Below for loops are used instead of sleep time, to execute reassociate command and check status
Zack Williamsa8fe75a2020-01-10 14:25:27 -070089 FOR ${i} IN RANGE 70
90 ${output}= Login And Run Command On Remote System
91 ... wpa_cli -i ${iface} reassociate ${ip} ${user}
92 ... ${pass} ${container_type} ${container_name}
93 ${passed}= Run Keyword And Return Status Should Contain ${output} OK
94 Run Keyword If ${passed} Exit For Loop
95 END
96 FOR ${i} IN RANGE 70
97 ${output}= Login And Run Command On Remote System
98 ... wpa_cli status | grep SUCCESS ${ip} ${user}
99 ... ${pass} ${container_type} ${container_name}
100 ${passed}= Run Keyword And Return Status Should Contain ${output} SUCCESS
101 Run Keyword If ${passed} Exit For Loop
102 END
103
suraj gour7f6d5fe2019-11-29 10:56:35 +0000104Validate Authentication After Reassociate
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700105 [Arguments] ${auth_pass} ${iface} ${ip} ${user} ${pass}=${None}
106 ... ${container_type}=${None} ${container_name}=${None}
107 [Documentation]
108 ... Executes a particular reassociate request on the RG using wpa_cli.
109 ... auth_pass determines if authentication should pass
suraj gourbbecac82020-02-13 10:30:03 +0000110 ${output}= Login And Run Command On Remote System truncate -s 0 /tmp/wpa.log; cat /tmp/wpa.log
111 ... ${ip} ${user} ${pass} ${container_type} ${container_name}
112 Log ${output}
113 Should Not Contain ${output} authentication completed successfully
suraj gour7f6d5fe2019-11-29 10:56:35 +0000114 WPA Reassociate ${iface} ${ip} ${user} ${pass} ${container_type} ${container_name}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700115 Run Keyword If '${auth_pass}' == 'True' Wait Until Keyword Succeeds ${timeout} 2s
116 ... Check Remote File Contents True /tmp/wpa.log authentication completed successfully
117 ... ${ip} ${user} ${pass} ${container_type} ${container_name}
suraj gour7f6d5fe2019-11-29 10:56:35 +0000118 Run Keyword If '${auth_pass}' == 'False' Sleep 20s
suraj gourbbecac82020-02-13 10:30:03 +0000119 Run Keyword If '${auth_pass}' == 'False' Check Remote File Contents True /tmp/wpa.log
120 ... authentication failed ${ip} ${user} ${pass}
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700121 ... ${container_type} ${container_name}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000122
123Send Dhclient Request To Release Assigned IP
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700124 [Arguments] ${iface} ${ip} ${user} ${path_dhcpleasefile} ${pass}=${None}
125 ... ${container_type}=${None} ${container_name}=${None}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000126 [Documentation] Executes a dhclient with option to release ip against a particular interface on the RG (src)
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700127 ${result}= Login And Run Command On Remote System
128 ... dhclient -nw -r ${iface} && rm ${path_dhcpleasefile}/dhclient.* ${ip} ${user}
suraj gourd5cfdbb2019-12-13 12:44:55 +0000129 ... ${pass} ${container_type} ${container_name}
130 Log ${result}
131 #Should Contain ${result} DHCPRELEASE
132 [Return] ${result}
suraj gour1ecfae92019-12-20 15:11:40 +0000133
134Check Remote File Contents For WPA Logs
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700135 [Arguments] ${file_should_exist} ${file} ${pattern} ${ip} ${user} ${pass}=${None}
136 ... ${container_type}=${None} ${container_name}=${None} ${prompt}=~$
suraj gour1ecfae92019-12-20 15:11:40 +0000137 [Documentation] Checks for particular pattern count in a file
Zack Williamsa8fe75a2020-01-10 14:25:27 -0700138 ${result}= Login And Run Command On Remote System
139 ... cat ${file} | grep '${pattern}' | wc -l ${ip} ${user} ${pass}
suraj gour1ecfae92019-12-20 15:11:40 +0000140 ... ${container_type} ${container_name} ${prompt}
141 [Return] ${result}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000142
143Perform Sanity Test
144 [Documentation] This keyword performs Sanity Test Procedure
145 ... Sanity test performs authentication, dhcp and pings for all the ONUs given for the POD
146 ... This keyword can be used to call in any other tests where sanity check is required
147 ... and avoids duplication of code.
148 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
149 Set Global Variable ${of_id}
150 FOR ${I} IN RANGE 0 ${num_onus}
151 ${src}= Set Variable ${hosts.src[${I}]}
152 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuri03005912020-02-20 18:59:46 -0800153 Run Keyword and Ignore Error Collect Logs
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000154 ${onu_device_id}= Get Device ID From SN ${src['onu']}
155 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
156 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800157 # Check ONU port is Enabled in ONOS
158 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
159 ... Verify ONU Port Is Enabled ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
160 # Verify EAPOL flows are added for the ONU port
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000161 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
162 ... Verify Eapol Flows Added For ONU ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800163 # Verify ONU state in voltha
164 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
165 ... ENABLED ACTIVE REACHABLE
166 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
167 # Perform Authentication
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000168 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate Authentication True
169 ... ${src['dp_iface_name']} wpa_supplicant.conf ${src['ip']} ${src['user']} ${src['pass']}
170 ... ${src['container_type']} ${src['container_name']}
171 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2
172 ... Verify ONU in AAA-Users ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
173 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2
174 ... Execute ONOS CLI Command ${k8s_node_ip} ${ONOS_SSH_PORT}
175 ... volt-add-subscriber-access ${of_id} ${onu_port}
176 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
177 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
178 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
179 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
180 ... ${dst['container_name']}
181 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
182 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
183 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
184 Run Keyword and Ignore Error Collect Logs
185 END
186
Hardik Windlassa3d04b92020-02-17 15:06:05 +0000187Perform Sanity Test DT
188 [Documentation] This keyword performs Sanity Test Procedure for DT Workflow
189 ... Sanity test performs dhcp and pings (without EAPOL and DHCP flows) for all the ONUs given for the POD
190 ... This keyword can be used to call in any other tests where sanity check is required
191 ... and avoids duplication of code.
192 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
193 Set Global Variable ${of_id}
194 FOR ${I} IN RANGE 0 ${num_onus}
195 ${src}= Set Variable ${hosts.src[${I}]}
196 ${dst}= Set Variable ${hosts.dst[${I}]}
197 ${onu_device_id}= Get Device ID From SN ${src['onu']}
198 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
199 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
200 # Check ONU port is Enabled in ONOS
201 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
202 ... Verify ONU Port Is Enabled ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
203 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2
204 ... Execute ONOS CLI Command ${k8s_node_ip} ${ONOS_SSH_PORT}
205 ... volt-add-subscriber-access ${of_id} ${onu_port}
206 # Verify ONU state in voltha
207 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
208 ... ENABLED ACTIVE REACHABLE
209 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
210 # TODO: Yet to Verify on the Physical POD
211 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure Validate DHCP and Ping True
212 ... True ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
213 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
214 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
215 ... ${dst['container_name']}
216 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
217 Run Keyword and Ignore Error Collect Logs
218 END
219 # Verify VOLTHA Flows (TODO: Add verification for ONOS Flows)
220 # Number of per OLT Flows equals Twice the Number of Active ONUs (each for downstream and upstream) + 1 for LLDP
221 ${olt_flows}= Evaluate 2 * ${num_onus} + 1
222 # Number of per ONU Flows equals 2 (one each for downstream and upstream)
223 ${onu_flows}= Set Variable 2
224 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate OLT Flows ${olt_flows}
225 ${List_ONU_Serial} Create List
226 Set Suite Variable ${List_ONU_Serial}
227 Build ONU SN List ${List_ONU_Serial}
228 Log ${List_ONU_Serial}
229 Run Keyword Wait Until Keyword Succeeds ${timeout} 5s Validate ONU Flows
230 ... ${List_ONU_Serial} ${onu_flows}
231
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000232Setup
233 [Documentation] Pre-test Setup
234 #test for empty device list
235 Test Empty Device List
236 Run Keyword If ${has_dataplane} Wait Until Keyword Succeeds 120s 10s Openolt is Up
237 ... ${olt_ip} ${olt_user} ${olt_pass}
238 Sleep 60s
239 #create/preprovision device
240 ${olt_device_id}= Create Device ${olt_ip} ${OLT_PORT}
241 Set Suite Variable ${olt_device_id}
242 #validate olt states
243 Wait Until Keyword Succeeds ${timeout} 5s
244 ... Validate OLT Device PREPROVISIONED UNKNOWN UNKNOWN ${EMPTY} ${olt_device_id}
Suchitra Vemuria7e8ad22020-02-11 18:02:40 -0800245 Sleep 5s
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000246 Enable Device ${olt_device_id}
247 Wait Until Keyword Succeeds ${timeout} 5s
248 ... Validate OLT Device ENABLED ACTIVE REACHABLE ${olt_serial_number}
249 ${logical_id}= Get Logical Device ID From SN ${olt_serial_number}
250 Set Suite Variable ${logical_id}
251
252Delete All Devices and Verify
253 [Documentation] Remove any devices from VOLTHA and ONOS
254 # Clear devices from VOLTHA
255 Disable Devices In Voltha Root=true
256 Wait Until Keyword Succeeds ${timeout} 2s Test Devices Disabled In Voltha Root=true
257 Delete Devices In Voltha Root=true
258 Wait Until Keyword Succeeds ${timeout} 2s Test Empty Device List
259 # Clear devices from ONOS
260 Remove All Devices From ONOS
261 ... http://karaf:karaf@${k8s_node_ip}:${ONOS_REST_PORT}
262
263Teardown
264 [Documentation] kills processes and cleans up interfaces on src+dst servers
265 Run Keyword If ${has_dataplane} Clean Up Linux
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000266
267Teardown Suite
268 [Documentation] Clean up device if desired
269 Run Keyword If ${teardown_device} Delete All Devices and Verify
270
271Delete Device and Verify
272 [Documentation] Disable -> Delete devices via voltctl and verify its removed
Suchitra Vemuri2fa9bba2020-01-22 17:38:48 -0800273 ${olt_device_id}= Get Device ID From SN ${olt_serial_number}
Gayathri.Selvanee4a91b2020-01-17 06:49:53 +0000274 ${rc} ${output}= Run and Return Rc and Output
275 ... ${VOLTCTL_CONFIG}; voltctl device disable ${olt_device_id}
276 Should Be Equal As Integers ${rc} 0
277 Sleep 5s
278 Wait Until Keyword Succeeds ${timeout} 5s
279 ... Validate OLT Device DISABLED UNKNOWN REACHABLE ${olt_serial_number}
280 ${rc} ${output}= Run and Return Rc and Output
281 ... ${VOLTCTL_CONFIG}; voltctl device delete ${olt_device_id}
282 Sleep 50s
283 Should Be Equal As Integers ${rc} 0
284 Wait Until Keyword Succeeds ${timeout} 5s Validate Device Removed ${olt_device_id}
285
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000286Repeat Sanity Test
287 [Documentation] This keyword performs Sanity Test Procedure
288 ... Sanity test performs authentication, dhcp and pings for all the ONUs given for the POD
289 ... This keyword can be used to call in any other tests where sanity check is required
290 ... with wpa reassociation
291 ${of_id}= Wait Until Keyword Succeeds ${timeout} 15s Validate OLT Device in ONOS ${olt_serial_number}
292 Set Global Variable ${of_id}
293 FOR ${I} IN RANGE 0 ${num_onus}
Suchitra Vemuri03005912020-02-20 18:59:46 -0800294 Run Keyword and Ignore Error Collect Logs
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000295 ${src}= Set Variable ${hosts.src[${I}]}
296 ${dst}= Set Variable ${hosts.dst[${I}]}
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800297 ${onu_port}= Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
298 ... Get ONU Port in ONOS ${src['onu']} ${of_id}
299 # Check ONU port is Enabled in ONOD
300 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 120s 2s
301 ... Verify ONU Port Is Enabled ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
302 # Verify EAPOL flows are added for the ONU port
303 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
304 ... Verify Eapol Flows Added For ONU ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
305 # Verify ONU state in voltha
Suchitra Vemurid1e27fb2020-02-01 16:34:37 -0800306 Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 5s Validate Device
Suchitra Vemuri81e4f022020-02-01 13:16:02 -0800307 ... ENABLED ACTIVE REACHABLE
308 ... ${src['onu']} onu=True onu_reason=omci-flows-pushed
Suchitra Vemuri8078b972020-02-06 19:07:41 -0800309 # Perform Authentication
Gayathri.Selvan283a63c2020-01-23 04:09:18 +0000310 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
311 ... Validate Authentication After Reassociate
312 ... True ${src['dp_iface_name']} ${src['ip']} ${src['user']} ${src['pass']}
313 ... ${src['container_type']} ${src['container_name']}
314 Wait Until Keyword Succeeds ${timeout} 2s
315 ... Verify ONU in AAA-Users ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
316 Wait Until Keyword Succeeds ${timeout} 2s
317 ... Execute ONOS CLI Command ${k8s_node_ip} ${ONOS_SSH_PORT}
318 ... volt-add-subscriber-access ${of_id} ${onu_port}
319 Run Keyword If ${has_dataplane} Run Keyword And Continue On Failure
320 ... Validate DHCP and Ping True True
321 ... ${src['dp_iface_name']} ${src['s_tag']} ${src['c_tag']} ${dst['dp_iface_ip_qinq']}
322 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
323 ... ${dst['dp_iface_name']} ${dst['ip']} ${dst['user']} ${dst['pass']} ${dst['container_type']}
324 ... ${dst['container_name']}
325 Wait Until Keyword Succeeds ${timeout} 2s Run Keyword And Continue On Failure
326 ... Validate Subscriber DHCP Allocation ${k8s_node_ip} ${ONOS_SSH_PORT} ${onu_port}
327 Run Keyword and Ignore Error Get Device Output from Voltha ${onu_device_id}
328 Run Keyword and Ignore Error Collect Logs
329 END
Gayathri.Selvanb6a2b542020-01-24 07:24:23 +0000330
331Collect Logs
332 [Documentation] Collect Logs from voltha and onos cli for various commands
333 Run Keyword and Ignore Error Get Device List from Voltha
334 Run Keyword and Ignore Error Get Device Output from Voltha ${olt_device_id}
335 Run Keyword and Ignore Error Get Logical Device Output from Voltha ${logical_id}
Andy Bavier63460da2020-02-20 14:35:12 -0700336 Get ONOS Status ${k8s_node_ip} ${ONOS_SSH_PORT}
Gayathri.Selvanf68ea4b2020-02-03 07:36:39 +0000337
338Verify ping is succesful except for given device
339 [Arguments] ${num_onus} ${exceptional_onu_id}
340 [Documentation] Checks that ping for all the devices are successful except the given ONU.
341 ${pingStatus} Set Variable True
342 FOR ${I} IN RANGE 0 ${num_onus}
343 ${src}= Set Variable ${hosts.src[${I}]}
344 ${dst}= Set Variable ${hosts.dst[${I}]}
345 ${onu_device_id}= Get Device ID From SN ${src['onu']}
346 ${pingStatus} Run Keyword If '${onu_device_id}' == '${exceptional_onu_id}' Set Variable False
347 Run Keyword And Continue On Failure Wait Until Keyword Succeeds 60s 2s
348 ... Check Ping ${pingStatus} ${dst['dp_iface_ip_qinq']} ${src['dp_iface_name']}
349 ... ${src['ip']} ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
350 END
Andy Bavier4a8450e2020-02-04 08:58:37 -0700351
352Announce Message
353 [Arguments] ${message}
354 [Documentation] Announce a message that will be picked up by the log aggregator
Andy Bavier1af971b2020-02-05 14:26:21 -0700355 Run Process kubectl run announcer -ti --rm --restart Never --image ubuntu
Andy Bavier4a8450e2020-02-04 08:58:37 -0700356 ... bash -- -c echo; sleep 1; echo ${message}; sleep 1; date --rfc-3339\=n ; sleep 1; echo; sleep 1
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -0800357
Andy Bavierabeba262020-02-07 16:22:16 -0700358Start Logging
359 [Arguments] ${label}
360 [Documentation] Start logging for test ${label}
361 ${kail_process}= Run Keyword If "${container_log_dir}" != "${None}" Start Process kail -n default
362 ... -n voltha cwd=${container_log_dir} stdout=${label}-combined.log
363 Set Test Variable ${kail_process}
364
365Stop Logging
366 [Arguments] ${label}
367 [Documentation] End logging for test; remove logfile if test passed
368 Run sync
369 Run Keyword If ${kail_process} Terminate Process ${kail_process}
370 ${test_logfile}= Run Keyword If "${container_log_dir}" != "${None}"
371 ... Join Path ${container_log_dir} ${label}-combined.log
372 Run Keyword If Test Passed Run Keyword If "${test_logfile}" != "${None}" Remove File ${test_logfile}
373
Suchitra Vemuria5fa3dd2020-02-04 14:38:49 -0800374Clean Up Linux
375 [Documentation] Kill processes and clean up interfaces on src+dst servers
376 FOR ${I} IN RANGE 0 ${num_onus}
377 ${src}= Set Variable ${hosts.src[${I}]}
378 ${dst}= Set Variable ${hosts.dst[${I}]}
379 Run Keyword And Ignore Error Kill Linux Process [w]pa_supplicant ${src['ip']}
380 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
381 Run Keyword And Ignore Error Kill Linux Process [d]hclient ${src['ip']}
382 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
383 Run Keyword If '${dst['ip']}' != '${None}' Run Keyword And Ignore Error
384 ... Kill Linux Process [d]hcpd ${dst['ip']} ${dst['user']}
385 ... ${dst['pass']} ${dst['container_type']} ${dst['container_name']}
386 Delete IP Addresses from Interface on Remote Host ${src['dp_iface_name']} ${src['ip']}
387 ... ${src['user']} ${src['pass']} ${src['container_type']} ${src['container_name']}
388 Run Keyword If '${dst['ip']}' != '${None}' Delete Interface on Remote Host
389 ... ${dst['dp_iface_name']}.${src['s_tag']} ${dst['ip']} ${dst['user']} ${dst['pass']}
390 ... ${dst['container_type']} ${dst['container_name']}
391 END
Scott Baker60e570d2020-02-02 22:10:13 -0800392
393Should Be Larger Than
394 [Documentation] Verify that value_1 is > value_2
395 [Arguments] ${value_1} ${value_2}
396 Run Keyword If ${value_1} <= ${value_2}
397 ... Fail The value ${value_1} is not larger than ${value_2}
398
Scott Bakeree675552020-02-11 10:43:34 -0800399Should Be Larger Than Or Equal To
400 [Documentation] Verify that value_1 is >= value_2
401 [Arguments] ${value_1} ${value_2}
402 Run Keyword If ${value_1} < ${value_2}
403 ... Fail The value ${value_1} is not larger than or equal to ${value_2}
404
Scott Baker60e570d2020-02-02 22:10:13 -0800405Should Be Float
406 [Documentation] Verify that value is a floating point number type
407 [Arguments] ${value}
408 ${type} Evaluate type(${value}).__name__
409 Should Be Equal ${type} float
410
Scott Bakeree675552020-02-11 10:43:34 -0800411Should Be Newer Than Or Equal To
412 [Documentation] Compare two RFC3339 dates
413 [Arguments] ${value_1} ${value_2}
414 ${unix_v1} Parse RFC3339 ${value_1}
415 ${unix_v2} Parse RFC3339 ${value_2}
416 Run Keyword If ${unix_v1} < ${unix_v2}
417 ... Fail The value ${value_1} is not newer than or equal to ${value_2}
418
Scott Baker60e570d2020-02-02 22:10:13 -0800419Get Current Time
420 [Documentation] Return the current time in RFC3339 format
421 ${output}= Run date -u +"%FT%T%:z"
422 [return] ${output}
Scott Bakeree675552020-02-11 10:43:34 -0800423
424Parse RFC3339
425 [Documentation] Parse an RFC3339 timestamp
426 [Arguments] ${dateStr}
427 ${rc} ${output}= Run and Return Rc and Output date --date="${dateStr}" "+%s"
428 Should Be Equal As Numbers ${rc} 0
429 [return] ${output}