blob: 17cb7cf05f5a8986d8664790474077bbdb550bf1 [file] [log] [blame]
# Copyright 2021-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.
*** Settings ***
Documentation Test ONOS Apps Software Upgrade
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} 60s
${of_id} 0
${logical_id} 0
${uprate} 0
${dnrate} 0
${has_dataplane} True
${teardown_device} False
${scripts} ../../scripts
# 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
# ONOS Apps to Test for Software Upgrade need to be passed in the following variable in format:
# <app-name>,<version>,<oar-url>*<app-name>,<version>,<oar-url>*
# Example: org.opencord.aaa,2.3.0.SNAPSHOT,
# https://oss.sonatype.org/content/groups/public/org/opencord/aaa-app/2.3.0-SNAPSHOT/aaa-app-2.3.0-20201210.223737-1.oar*
${onos_apps_under_test} ${EMPTY}
*** Test Cases ***
Test ONOS App Minor Version Upgrade
[Documentation] Validates the ONOS App Minor Version Upgrade doesn't affect the system functionality
... Performs the sanity and verifies all the ONUs are authenticated/DHCP/pingable
... Requirement: Apps to test needs to be passed in robot command variable 'onos_apps_under_test' in the format:
... <app-name>,<version>,<oar-url>*<app-name>,<version>,<oar-url>*
... Check [VOL-3844] for more details
[Tags] functional ONOSAppMinorVerUpgrade
[Setup] Run Keywords Start Logging ONOSAppMinorVerUpgrade
... AND Setup
[Teardown] Run Keywords Collect Logs
... AND Stop Logging ONOSAppMinorVerUpgrade
... AND Delete All Devices and Verify
Run Keyword If ${has_dataplane} Clean Up Linux
Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test
${onos_url}= Set Variable http://karaf:karaf@${ONOS_REST_IP}:${ONOS_REST_PORT}
${num_apps_under_test}= Get Length ${list_onos_apps_under_test}
# Set log level to DEBUG for all apps under test
FOR ${J} IN RANGE 0 ${num_apps_under_test}
${app_ut}= Set Variable ${list_onos_apps_under_test}[${J}][app]
Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
... Execute ONOS CLI Command use single connection ${ONOS_SSH_IP} ${ONOS_SSH_PORT}
... log:set DEBUG ${app_ut}
END
FOR ${I} IN RANGE 0 ${num_apps_under_test}
${app}= Set Variable ${list_onos_apps_under_test}[${I}][app]
${version}= Set Variable ${list_onos_apps_under_test}[${I}][version]
${url}= Set Variable ${list_onos_apps_under_test}[${I}][url]
${oar_file}= Set Variable ${CURDIR}/../../tests/data/onos-files/${app}-${version}.oar
Download App OAR File ${url} ${oar_file}
${app_details} Get ONOS App Details ${onos_url} ${app}
Log ${app}: before upgrade: ${app_details}
Delete ONOS App ${onos_url} ${app}
Sleep 10s
Verify ONOS Apps Active Except App Under Test ${onos_url} ${app}
Install And Activate ONOS App ${onos_url} ${oar_file}
Run Keyword And Continue On Failure Wait Until Keyword Succeeds ${timeout} 2s
... Verify ONOS App Active ${onos_url} ${app} ${version}
${app_details_1} Get ONOS App Details ${onos_url} ${app}
Log ${app}: after upgrade: ${app_details_1}
Verify ONOS Pod Restart False
Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test True
END
# Additional Verification
Wait Until Keyword Succeeds ${timeout} 2s Delete All Devices and Verify
Setup
Run Keyword If ${has_dataplane} Clean Up Linux
Wait Until Keyword Succeeds ${timeout} 2s Perform Sanity Test
*** Keywords ***
Setup Suite
[Documentation] Set up the test suite
Common Test Suite Setup
Create ONOS Apps Under Test List
Teardown Suite
[Documentation] Replaces the Suite Teardown in utils.robot.
... Cleans up and checks all ONU ports disabled in ONOS.
Close All ONOS SSH Connections
Verify ONOS Apps Active Except App Under Test
[Documentation] Verifies all the apps defined in input yaml are active except for the app under test
[Arguments] ${onos_url} ${app_under_test}
${num_onos_apps}= Get Length ${onos_apps}
FOR ${I} IN RANGE 0 ${num_onos_apps}
Continue For Loop If '${app_under_test}'=='${onos_apps}[${I}]'
Verify ONOS App Active ${onos_url} ${onos_apps}[${I}]
END
Download App OAR File
[Documentation] This keyword downloads the app oar file from the given url to the specified location
[Arguments] ${oar_url} ${oar_file}
${rc} Run And Return Rc curl --fail -sSL ${oar_url} > ${oar_file}
Should Be Equal As Integers ${rc} 0 Can't download ONOS app from ${oar_url}
Create ONOS Apps Under Test List
[Documentation] Creates a list of ONOS Apps to Test from the input variable string
... The input string is expected to be in format:
... <app-name>,<version>,<oar-url>*<app-name>,<version>,<oar-url>*
${list_onos_apps_under_test} Create List
@{apps_under_test_arr}= Split String ${onos_apps_under_test} *
${num_apps_under_test}= Get Length ${apps_under_test_arr}
FOR ${I} IN RANGE 0 ${num_apps_under_test}-1
@{app_under_test_arr}= Split String ${apps_under_test_arr[${I}]} ,
${app}= Set Variable ${app_under_test_arr[0]}
${version}= Set Variable ${app_under_test_arr[1]}
${url}= Set Variable ${app_under_test_arr[2]}
${app_under_test} Create Dictionary app ${app} version ${version} url ${url}
Append To List ${list_onos_apps_under_test} ${app_under_test}
END
Log ${list_onos_apps_under_test}
Set Suite Variable ${list_onos_apps_under_test}