#Copyright 2022-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}        60s
${of_id}          0
${logical_id}     0
${has_dataplane}    True
${teardown_device}    True
${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

# Flag specific to Soak Jobs
${SOAK_TEST}    False
${bbsim_port}    50060

#Test the actual on board configuration (Not yet used but it is a placeholder)
#${testonboardconfiguration}     False

#Suppress the subscribe phase
${suppressaddsubscriber}     False

#Enable or Disable the MacLearning verifier for MacLearning ONOS APP
${maclearningenabled}   False   #Not yet used but it is a placeholder

*** Test Cases ***
Sanity E2E Test for TIM (HSIA)
    [Documentation]     Validate the correct construction of the flow rules in ONOS and in the devices:
    ...    Flow rules in accordance with TIM Workflow.
    ...    Set up the clean TIM test environment.
    ...    Make subscriptions of all possible subscribers described in the test case.
    ...    Verify the correctness of the flow rules generated by ONOS and written in
    ...    the respective devices (OLT and ONU), about PPPoE, IGMP and LLDP Flows.
    ...    We use a Transparent VLAN approach
    ...    Perform a scalability test both for flow rules in ONOS and in devices.
    [Tags]    sanityTIM
    [Setup]    Start Logging    SanityTestTIM
    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
    ...           AND             Stop Logging    SanityTestTIM
    Run Keyword     Setup    ${SOAK_TEST}
    Run Keyword If    ${has_dataplane}    Clean Up Linux
    Perform Sanity Test TIM     supress_add_subscriber=${suppressaddsubscriber}
    ...     maclearning_enabled=${maclearningenabled}

Sanity E2E Test for TIM (MCAST)
    [Documentation]    Validate the correct construction of the flow rules in ONOS and in the devices:
    ...    Flow rules in accordance with TIM Workflow.
    ...    Verify the correctness of the flow/group rules generated by ONOS and written in
    ...    the respective devices (OLT and ONU) by MCast ONOS App.
    ...    We use a Transparent VLAN approach.
    ...    Perform a scalability test both for flow rules in ONOS and in devices.
    [Tags]    sanityTIM-MCast
    [Setup]    Start Logging    sanityTIM-MCast
    [Teardown]    Run Keywords    Run Keyword If    ${logging}    Collect Logs
    ...           AND             Stop Logging    sanityTIM-MCast
    Run Keyword     Setup    ${SOAK_TEST}
    Run Keyword If    ${has_dataplane}    Clean Up Linux
    Perform Sanity Test TIM MCAST     supress_add_subscriber=${suppressaddsubscriber}
    ...     maclearning_enabled=${maclearningenabled}

*** Keywords ***
Setup Suite
    [Documentation]    Set up the test suite
    Common Test Suite Setup
    #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}

