# Copyright 2022 - present Open Networking Foundation
#
# 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.

# Use bbsim-kind-dt-1OLTx1PONx2ONU.yaml

*** Settings ***
Documentation     Test of try to catch memory leak in voltha components.
Suite Setup       Setup Suite
Suite Teardown    Teardown Suite
Test Setup        Setup
Test Teardown     Teardown
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           ../../libraries/DependencyLibrary.py
Library           ../../libraries/utility.py    WITH NAME    utility
Resource          ../../libraries/onos.robot
Resource          ../../libraries/voltctl.robot
Resource          ../../libraries/voltha.robot
Resource          ../../libraries/utils.robot
Resource          ../../libraries/k8s.robot
Resource          ../../libraries/onu_utilities.robot
Resource          ../../variables/variables.robot

*** Variables ***
${NAMESPACE}      voltha
${INFRA_NAMESPACE}      default
${timeout}        60s
${of_id}          0
${logical_id}     0
${has_dataplane}    True
${external_libs}    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}
# determines the environment workflow: DT, TT or ATT (default)
# example: -v workflow:DT
${workflow}    ATT
# KV Store Prefix
# example: -v kvstoreprefix:voltha/voltha_voltha
${kvstoreprefix}    voltha/voltha_voltha
# flag debugmode is used, if true timeout calculation various, can be passed via the command line too
# example: -v debugmode:True
${debugmode}    False
# logging flag to enable Collect Logs, can be passed via the command line too
# example: -v logging:True
${logging}    False
# if True execution will be paused before clean up, only use in case of manual testing, do not use in ci pipeline!
# example: -v pausebeforecleanup:True
${pausebeforecleanup}    False
# if True some outputs to console are done during running tests e.g. long duration flow test
# example: -v print2console:True
${print2console}    False
# if True etcd check will be executed in test case teardown, if False etcd check will be executed in suite teardown
# example: -v etcdcheckintestteardown:False
${etcdcheckintestteardown}    True
${data_dir}    ../data
# number of iterations
# example: -v iterations:10
${iterations}    50
# address of Prometheus
# example: -v prometheusaddr:0.0.0.0
${prometheusaddr}    0.0.0.0
# port of Prometheus
# example: -v prometheusport:31301
${prometheusport}    31301

# flag to choose the subscriber provisioning command type in ONOS
# TT often provision a single services for a subscriber (eg: hsia, voip, ...) one after the other.
# if set to True, command used is "volt-add-subscriber-unitag"
# if set to False, comand used is "volt-add-subscriber-access"
${unitag_sub}    False

*** Test Cases ***
Memory Leak Test Openonu Go Adapter
    [Documentation]   Test of try to catch memory leak in Openonu Go Adapter for all three workflows, ATT, DT and TT
    ...    Multiple run of Flow and ONU setup and teardown to try to catch memory leak.
    ...    Setup OLT and one (first) ONU, both will kept over the whole test
    ...    Setup a second ONU and do following in specified loops (iterations):
    ...    - do workflow related sanity test (bring up onu to omci flows pushed and setup flows)
    ...    - remove flows
    ...    - delete ONU
    ...    - wait for onu auto detect
    ...    Attention: Due VOL-4703 is not corrected memory leak tests will run in pipeline for DT workflow only!
    ...               This is a temporaly workaround only! Has to be checked after introduction of voltha-go-controller.
    [Tags]    functionalMemoryLeak    MemoryLeakTestOnuGo
    [Setup]    Run Keywords    Start Logging    MemoryLeakTestOnuGo
    ...  AND   Append Memory Consumption To File    isTest=True    action=test_start
    Run Keyword If    ${has_dataplane}    Clean Up Linux
    ${output_file_onu}=    Catenate    SEPARATOR=/    ${OUTPUT DIR}    MemoryConsumptionsOpenOnuAdapterOnuTest.txt
    Create File    ${output_file_onu}   This file contains the memory consumptions of openonu adapter.
    Append To File    ${output_file_onu}   \r\nTest: ${TEST NAME}
    ${start_mem_consumption_onu}=    Get And Write Memory Consumption Per Container To File    adapter-open-onu    ${NAMESPACE}
    ...    ${output_file_onu}    Start    settling_memory=True
    ${Device_Setup}=    Set Variable    True
    Set Global Variable    ${Device_Setup}
    Setup
    Get And Write Memory Consumption Per Container To File    adapter-open-onu    ${NAMESPACE}
    ...    ${output_file_onu}    Setup-OLT    #settling_memory=True
    Append Memory Consumption To File    isTest=True    action=test_setup
    # Start first ONU
    ${src_onu_1}=    Set Variable    ${hosts.src[${0}]}
    ${bbsim_pod}=    Get Pod Name By Label    ${NAMESPACE}    release     bbsim0
    Power On ONU    ${NAMESPACE}    ${bbsim_pod}    ${src_onu_1['onu']}
    ${onu_reason}=  Set Variable If    "${workflow}"=="DT"    initial-mib-downloaded
    ...                                "${workflow}"=="TT"    initial-mib-downloaded
    ...                                "${workflow}"=="ATT"   omci-flows-pushed
    ${admin_state}    ${oper_status}    ${connect_status}    ${onu_state_nb}    ${onu_state}=
    ...    Map State    ${onu_reason}
    Wait Until Keyword Succeeds    ${timeout}    1s
    ...    Validate Device    ${admin_state}    ${oper_status}    ${connect_status}
    ...    ${src_onu_1['onu']}    onu=True    onu_reason=${onu_state}
    ${setup_mem_consumption_onu}=    Get And Write Memory Consumption Per Container To File    adapter-open-onu    ${NAMESPACE}
    ...    ${output_file_onu}    Setup-ONU-1    settling_memory=True
    # Start second ONU
    ${src_onu_2}=    Set Variable    ${hosts.src[${1}]}
    ${bbsim_pod}=    Get Pod Name By Label    ${NAMESPACE}    release     bbsim0
    Power On ONU    ${NAMESPACE}    ${bbsim_pod}    ${src_onu_2['onu']}
    ${onu_reason}=  Set Variable If    "${workflow}"=="DT"    initial-mib-downloaded
    ...                                "${workflow}"=="TT"    initial-mib-downloaded
    ...                                "${workflow}"=="ATT"   omci-flows-pushed
    ${admin_state}    ${oper_status}    ${connect_status}    ${onu_state_nb}    ${onu_state}=
    ...    Map State    ${onu_reason}
    Wait Until Keyword Succeeds    ${timeout}    1s
    ...    Validate Device    ${admin_state}    ${oper_status}    ${connect_status}
    ...    ${src_onu_2['onu']}    onu=True    onu_reason=${onu_state}
    Get And Write Memory Consumption Per Container To File   adapter-open-onu   ${NAMESPACE}   ${output_file_onu}   Setup-ONU-2
    Append Memory Consumption To File    isTest=True    action=test_setup_onu2
    FOR    ${I}    IN RANGE    1    ${iterations} + 1
        Run Keyword If    ${print2console}    Log    \r\nStart iteration ${I} of ${iterations}.    console=yes
        Run Keyword If    "${workflow}"=="DT"    Perform Sanity Test DT
        ...    ELSE IF    "${workflow}"=="TT"    Perform Sanity Tests TT
        ...    ELSE       Perform Sanity Test
        Sleep    5s
        Run Keyword If    ${print2console}    Log    Remove Flows.    console=yes
        # Remove Flows
        ${src}=    Set Variable    ${hosts.src[1]}
        ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS    ${src_onu_2['olt']}
        ${onu_sn_2}=     Set Variable    ${src_onu_2['onu']}
        ${onu_port_2}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${onu_sn_2}
        ...    ${of_id}    ${src_onu_2['uni_id']}
        Remove Flows Conditional    ${unitag_sub}    ${onu_sn_2}    ${of_id}    ${onu_port_2}
        Run Keyword If    ${print2console}    Log    Check Flows removed.    console=yes
        # Check All Flows Removed
        ${expected_flows_onu}=    Set Variable If   "${workflow}"=="ATT"    1    0
        Wait Until Keyword Succeeds    ${timeout}    2s    Validate number of flows    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
        ...    ${expected_flows_onu}  ${of_id}   any    ${onu_port_2}
        # Delete Device
        Run Keyword If    ${print2console}    Log    Get ONU Device IDs.    console=yes
        ${onu_device_id}=    Get Device ID From SN    ${onu_sn_2}
        Run Keyword If    ${print2console}    Log    Delete ONU. (device id: ${onu_device_id})    console=yes
        Wait Until Keyword Succeeds    ${timeout}    1s    Delete Device    ${onu_device_id}
        Run Keyword If    ${print2console}    Log    Wait for ONU come back.    console=yes
        ${onu_device_id_list}=    Create List    ${onu_device_id}
        Wait Until Keyword Succeeds    ${timeout}    1s  Check for new ONU Device IDs    ${onu_device_id_list}
        ${list_onus}    Create List
        Build ONU SN List    ${list_onus}
        Wait Until Keyword Succeeds    ${timeout}    1s    Check all ONU OperStatus     ${list_onus}  ACTIVE
        Build ONU SN List    ${list_onus}
        ${onu_reason}=  Set Variable If    "${workflow}"=="DT"    initial-mib-downloaded
        ...                                "${workflow}"=="TT"    initial-mib-downloaded
        ...                                "${workflow}"=="ATT"   omci-flows-pushed
        Wait Until Keyword Succeeds    ${timeout}    1s
        ...    Validate Device    ENABLED  ACTIVE  REACHABLE    ${onu_sn_2}    onu_reason=${onu_reason}    onu=True
        ${formatedIt}=    Format String    {:>3}    ${I}
        Get And Write Memory Consumption Per Container To File    adapter-open-onu    ${NAMESPACE}    ${output_file_onu}
        ...    Iteration ${formatedIt}
    END
    # Switch off second ONU
    Power Off ONU    ${NAMESPACE}    ${bbsim_pod}    ${src_onu_2['onu']}
    Wait Until Keyword Succeeds    500s    30s
    ...        Validate Memory Consumptions  adapter-open-onu  ${NAMESPACE}  ${setup_mem_consumption_onu}  ${output_file_onu}
    ...        out_string=Validate
    [Teardown]    Run Keywords    Printout ONU Serial Number and Device Id    print2console=${print2console}
    ...    AND    Run Keyword If    ${logging}    Get Logical Id of OLT
    ...    AND    Run Keyword If    ${logging}    Collect Logs
    ...    AND    Teardown Test
    ...    AND    Append Memory Consumption To File    isTest=True    compare_to=test_setup
    ...    AND    Run Keyword And Ignore Error    Wait Until Keyword Succeeds    300s    30s
    ...           Validate Memory Consumptions  adapter-open-onu  ${NAMESPACE}  ${start_mem_consumption_onu}  ${output_file_onu}
    ...    AND    Append Memory Consumption To File    isTest=True    compare_to=test_start
    ...    AND    Stop Logging    MemoryLeakTestOnuGo

Memory Leak Test Openolt Adapter
    [Documentation]   Test of try to catch memory leak in Openolt Adapter for all three workflows, ATT, DT and TT
    ...    Multiple run of OLT setup and teardown to try to catch memory leak.
    ...    - do workflow related sanity test (bring up onu to omci flows pushed and setup flows)
    ...    - delete OLT devices
    ...    - wait for OLT is removed
    ...    - add and enable OLT again
    ...    - wait for ONUs available again
    ...    Hint: Also memory consumptions of Openonu GO Adapter will be validated!
    ...    Hint: default timePower On ONU Device    ${NAMESPACE}out in BBSim to mimic OLT reboot is 60 seconds!
    ...    This behaviour of BBSim can be modified by 'oltRebootDelay: 60' in BBSim section of helm chart or
    ...    used values.yaml during 'voltha up'.
    ...    Attention: Due VOL-4703 is not corrected memory leak tests will run in pipeline for DT workflow only!
    ...               This is a temporaly workaround only! Has to be checked after introduction of voltha-go-controller.
    [Tags]    functionalMemoryLeak    MemoryLeakTestOlt
    [Setup]    Run Keywords    Start Logging    MemoryLeakTestOlt
    ...  AND   Append Memory Consumption To File    isTest=True    action=test_start
    Run Keyword If    ${has_dataplane}    Clean Up Linux
    ${output_file_olt}=    Catenate    SEPARATOR=/    ${OUTPUT DIR}    MemoryConsumptionsOpenOltAdapterOltTest.txt
    Create File    ${output_file_olt}   This file contains the memory consumptions of openolt adapter.
    Append To File    ${output_file_olt}   \r\nTest: ${TEST NAME}
    ${output_file_onu}=    Catenate    SEPARATOR=/    ${OUTPUT DIR}    MemoryConsumptionsOpenOnuAdapterOltTest.txt
    Create File    ${output_file_onu}   This file contains the memory consumptions of openonu adapter.
    Append To File    ${output_file_onu}   \r\nTest: ${TEST NAME}
    Run Keyword If    ${print2console}    Log    \r\nStart ${iterations} iterations.    console=yes
    ${start_mem_consumption_olt}=    Get And Write Memory Consumption Per Container To File    adapter-open-olt    ${NAMESPACE}
    ...    ${output_file_olt}    Start    settling_memory=True
    ${start_mem_consumption_onu}=    Get And Write Memory Consumption Per Container To File    adapter-open-onu    ${NAMESPACE}
    ...    ${output_file_onu}    Start
    ${Device_Setup}=    Set Variable    True
    Set Global Variable    ${Device_Setup}
    Setup
    Power On ONU Device    ${NAMESPACE}
    ${setup_mem_consumption_olt}=    Get And Write Memory Consumption Per Container To File    adapter-open-olt    ${NAMESPACE}
    ...    ${output_file_olt}    Setup    settling_memory=True
    Append Memory Consumption To File    isTest=True    action=test_setup
    Get And Write Memory Consumption Per Container To File    adapter-open-onu    ${NAMESPACE}    ${output_file_onu}    Setup
    FOR    ${I}    IN RANGE    1    ${iterations} + 1
        Run Keyword If    ${print2console}    Log    \r\nStart iteration ${I} of ${iterations}.    console=yes
        Run Keyword If    "${workflow}"=="DT"    Perform Sanity Test DT
        ...    ELSE IF    "${workflow}"=="TT"    Perform Sanity Tests TT
        ...    ELSE       Perform Sanity Test
        Sleep    5s
        Run Keyword If    ${print2console}    Log    Delete OLTs.    console=yes
        Delete Devices In Voltha    Type=openolt
        Run Keyword If    ${print2console}    Log    Check OLTs removed.    console=yes
        Wait Until Keyword Succeeds    ${timeout}    1s    Test Empty Device List
        Sleep    20s
        Run Keyword If    ${print2console}    Log    Add OLTs (calling Setup).    console=yes
        Setup
        Power On ONU Device    ${NAMESPACE}
        Run Keyword If    ${print2console}    Log    Wait for ONUs come back.    console=yes
        ${list_onus}    Create List
        Build ONU SN List    ${list_onus}
        Wait Until Keyword Succeeds    ${timeout}    1s    Check all ONU OperStatus     ${list_onus}  ACTIVE
        Build ONU SN List    ${list_onus}
        ${onu_reason}=  Set Variable If    "${workflow}"=="DT"    initial-mib-downloaded
        ...                                "${workflow}"=="TT"    initial-mib-downloaded
        ...                                "${workflow}"=="ATT"   omci-flows-pushed
        Wait Until Keyword Succeeds    ${timeout}    1s
        ...    Validate ONU Devices  ENABLED  ACTIVE  REACHABLE    ${list_onus}    onu_reason=${onu_reason}
        ${formatedIt}=    Format String    {:>3}    ${I}
        Get And Write Memory Consumption Per Container To File    adapter-open-olt    ${NAMESPACE}    ${output_file_olt}
        ...    Iteration ${formatedIt}
        Get And Write Memory Consumption Per Container To File    adapter-open-onu    ${NAMESPACE}    ${output_file_onu}
        ...    Iteration ${formatedIt}
    END
    Wait Until Keyword Succeeds    500s    30s
    ...        Validate Memory Consumptions  adapter-open-olt  ${NAMESPACE}  ${setup_mem_consumption_olt}  ${output_file_onu}
    ...        out_string=Validate
    [Teardown]    Run Keywords    Printout ONU Serial Number and Device Id    print2console=${print2console}
    ...    AND    Run Keyword If    ${logging}    Get Logical Id of OLT
    ...    AND    Run Keyword If    ${logging}    Collect Logs
    ...    AND    Teardown Test
    ...    AND    Append Memory Consumption To File    isTest=True    compare_to=test_setup
    ...    AND    Run Keyword And Ignore Error    Wait Until Keyword Succeeds    300s    30s
    ...           Validate Memory Consumptions  adapter-open-olt  ${NAMESPACE}  ${start_mem_consumption_olt}  ${output_file_olt}
    ...    AND    Validate Memory Consumptions  adapter-open-onu  ${NAMESPACE}  ${start_mem_consumption_onu}  ${output_file_onu}
    ...    AND    Append Memory Consumption To File    isTest=True    compare_to=test_start
    ...    AND    Stop Logging    MemoryLeakTestOlt


*** Keywords ***
Setup Suite
    [Documentation]    Set up the test suite
    Start Logging Setup or Teardown    Setup-${SUITE NAME}
    ${LogInfo}=    Catenate
    ...    \r\nPassed arguments:
    ...    debugmode:${debugmode}, logging:${logging}, pausebeforecleanup:${pausebeforecleanup},
    ...    print2console:${print2console}, workflow:${workflow}, kvstoreprefix:${kvstoreprefix},
    ...    iterations:${iterations}
    Log    ${LogInfo}    console=yes
    Create Global Memory Consumption File
    ${Device_Setup}=    Set Variable    False
    Set Global Variable    ${Device_Setup}
    ${Start_Time}=    Get Time    epoch
    Set Global Variable    ${Start_Time}
    Common Test Suite Setup
    # set tech profiles
    ${preload_tech_profile}=   Set Variable If   ${unitag_sub} and "${workflow}"=="TT" and not ${has_dataplane}   True   False
    Set Suite Variable    ${preload_tech_profile}
    Run Keyword If   ${preload_tech_profile}   Set Tech Profile   TT-HSIA                                ${INFRA_NAMESPACE}    64
    Run Keyword If   ${preload_tech_profile}   Set Tech Profile   TT-VoIP                                ${INFRA_NAMESPACE}    65
    Run Keyword If   ${preload_tech_profile}   Set Tech Profile   TT-multi-uni-MCAST-AdditionalBW-None   ${INFRA_NAMESPACE}    66
    # delete etcd MIB Template Data
    Delete MIB Template Data    ${INFRA_NAMESPACE}
    # delete etcd onu data
    Delete ONU Go Adapter ETCD Data    namespace=${INFRA_NAMESPACE}    validate=True
    Run Keyword If    ${logging}    Collect Logs
    Stop Logging Setup or Teardown    Setup-${SUITE NAME}

Teardown Suite
    [Documentation]    Replaces the Suite Teardown in utils.robot.
    ...    Cleans up and checks all ONU ports disabled in ONOS.
    ...    Furthermore gives the possibility to pause the execution.
    Start Logging Setup or Teardown   Teardown-${SUITE NAME}
    Append Memory Consumption To File    compare_to=suite_setup
    ${End_Time}=    Get Time    epoch
    FOR    ${container}     IN      @{list_of_container}
        ${mem_consumption}=   utility.get_memory_consumptions_range   ${prometheusaddr}:${prometheusport}   ${container}
        ...                   ${namespace}    ${Start_Time}    ${End_Time}
        Write Memory Consumption File Per Container    ${container}    ${mem_consumption}
    END
    Run Keyword If    ${pausebeforecleanup}    Import Library    Dialogs
    Run Keyword If    ${pausebeforecleanup}    Pause Execution    Press OK to continue with clean up!
    Run Keyword If    ${pausebeforecleanup}    Log  ${consumption_max}  Teardown will be continued...    console=yes
    Run Keyword If    ${teardown_device} and ${Device_Setup}    Delete All Devices and Verify
    Run Keyword Unless    ${etcdcheckintestteardown}    Wait Until Keyword Succeeds    ${timeout}    1s
    ...    Validate Onu Data In Etcd    ${INFRA_NAMESPACE}    0    ${kvstoreprefix}    without_pm_data=False
    Run Keyword If   ${Device_Setup}   Wait for Ports in ONOS for all OLTs  ${ONOS_SSH_IP}  ${ONOS_SSH_PORT}  0  BBSM  ${timeout}
    Run Keyword If   ${logging}    Collect Logs
    Stop Logging Setup or Teardown   Teardown-${SUITE NAME}
    Close All ONOS SSH Connections
    Set Suite Variable    ${TechProfile}    ${EMPTY}
    Run Keyword If    ${preload_tech_profile}    Remove Tech Profile    ${INFRA_NAMESPACE}    64
    Run Keyword If    ${preload_tech_profile}    Remove Tech Profile    ${INFRA_NAMESPACE}    65
    Run Keyword If    ${preload_tech_profile}    Remove Tech Profile    ${INFRA_NAMESPACE}    66

Teardown Test
    [Documentation]    Post-test Teardown
    # log ONOS flows after remove check
    ${flow}=    Run Keyword If    "${TEST STATUS}"=="FAIL"    Execute ONOS CLI Command use single connection
    ...    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    flows -s any ${of_id}
    Run Keyword If    "${TEST STATUS}"=="FAIL"    Log    ${flow}
    Run Keyword If    ${pausebeforecleanup}    Import Library    Dialogs
    Run Keyword If    ${pausebeforecleanup}    Pause Execution    Press OK to continue with clean up!
    Run Keyword If    ${pausebeforecleanup}    Log    Teardown will be continued...    console=yes
    Run Keyword If    ${teardown_device} and ${Device_Setup}      Delete All Devices and Verify
    # delete etcd MIB Template Data
    Delete MIB Template Data    ${INFRA_NAMESPACE}
    # check etcd data are empty
    Run Keyword If    ${etcdcheckintestteardown}    Wait Until Keyword Succeeds    ${timeout}    1s
    ...    Validate Onu Data In Etcd    ${INFRA_NAMESPACE}    0    ${kvstoreprefix}    without_pm_data=False
    Sleep    5s

Create Global Memory Consumption File
    [Documentation]    Creates global memory consumption file and read the start values
    ${list_of_container}=   Create List    voltha    ofagent    adapter-open-olt    adapter-open-onu
    Set Global Variable    ${list_of_container}
    ${global_output_file}=    Catenate    SEPARATOR=/    ${OUTPUT DIR}    MemoryConsumptions${workflow}.txt
    Create File  ${global_output_file}  This file contains the memory consumptions of all voltha adapter of workflow ${workflow}.
    Set Global Variable    ${global_output_file}
    ${time}=    Get Time
    Append To File    ${global_output_file}   \r\n------------------------------------------------------
    Append To File    ${global_output_file}   \r\nMemory consumptions Suite Setup at ${time}
    Append To File    ${global_output_file}   \r\n------------------------------------------------------
    &{suite_setup}    Create Dictionary
    FOR    ${container}     IN      @{list_of_container}
        ${mem_consumption}=    Append Memory Consumption Per Container To File    ${container}
        Set To Dictionary    ${suite_setup}    ${container}    ${mem_consumption}
    END
    &{memory_consumption_dict}    Create Dictionary    suite_setup    ${suite_setup}
    Set Global Variable    ${memory_consumption_dict}

Append Memory Consumption To File
    [Documentation]    Appends data to global memory consumption file per container
    [Arguments]    ${isTest}=False    ${action}=${EMPTY}    ${output_file}=${global_output_file}    ${compare_to}=${EMPTY}
    ${time}=    Get Time
    ${TestOrSuite}    Set Variable If    ${isTest}    Test    Suite
    ${SetupOrTeardown}    Set Variable If    "${action}"!="${EMPTY}"    Setup/Start (${action})    Teardown
    Append To File    ${global_output_file}   \r\n------------------------------------------------------
    Append To File    ${global_output_file}   \r\nMemory consumptions ${TestOrSuite} ${SetupOrTeardown} at ${time}
    Run Keyword If    ${isTest}    Append To File    ${global_output_file}   \r\nTest: ${TEST NAME}
    Append To File    ${global_output_file}   \r\n------------------------------------------------------
    &{test_setup}    Create Dictionary
    FOR    ${container}     IN      @{list_of_container}
        ${mem_consumption}=    Append Memory Consumption Per Container To File    ${container}    output_file=${output_file}
        ...    compare_to=${compare_to}
        Run Keyword If    "${action}"!="${EMPTY}"    Set To Dictionary    ${test_setup}    ${container}    ${mem_consumption}
    END
    Run Keyword If    "${action}"!="${EMPTY}"    Set To Dictionary    ${memory_consumption_dict}    ${action}    ${test_setup}
    Run Keyword If    "${action}"!="${EMPTY}"    Set Global Variable    ${memory_consumption_dict}

Append Memory Consumption Per Container To File
    [Documentation]    Appends data to global memory consumption file per container
    [Arguments]    ${container}    ${namespace}=${NAMESPACE}    ${output_file}=${global_output_file}    ${compare_to}=${EMPTY}
    ${mem_consumption}=    Wait Until Keyword Succeeds    300s    5s
    ...    Get Memory Consumptions    ${prometheusaddr}    ${prometheusport}    ${container}   ${namespace}
    ${formated_mem}=    Format String    {:>10}    ${mem_consumption}
    ${prestring}=    Catenate    \r\nMemory consumptions of   ${container}
    ${formated_prestring}=    Format String    {:<43}    ${prestring}
    ${poststring}=    Run Keyword If    "${compare_to}"!="${EMPTY}"    Compare Memory Consumptions    ${mem_consumption}
    ...    ${container}    ${compare_to}
    ...    ELSE   Set Variable    ${EMPTY}
    ${out_string}=   Catenate   ${formated_prestring}    :    ${formated_mem} Bytes    ${poststring}
    Append To File    ${output_file}   ${out_string}
    [return]    ${mem_consumption}

Compare Memory Consumptions
    [Documentation]    Compares the current memory consumptions with the compare-to value of passed container and
    ...                creates corresponding string.
    [Arguments]    ${mem_consumption}    ${container}    ${compare_to}
    ${compare_value}=       Get From Dictionary    ${memory_consumption_dict['${compare_to}']}    ${container}
    ${diff_value}=          Evaluate    ${mem_consumption}-${compare_value}
    ${percentage_value}=    Evaluate    100*${mem_consumption}/${compare_value}
    ${percentage_value}=    Convert To Number    ${percentage_value}    2
    ${formated_start}=      Format String    {:>10}    ${compare_value}
    ${formated_diff}=       Format String    {:>10}    ${diff_value}
    ${formated_perc}=       Format String    {:>7}     ${percentage_value}
    ${out_string}=   Catenate   : Corresponds ${formated_perc}% compared to ${compare_to} (${formated_start} Bytes) :
    ...    Difference: ${formated_diff} Bytes
    [return]    ${out_string}

Get And Write Memory Consumption Per Container To File
    [Documentation]    Gets and write current memory consumptions to memory consumption file per container
    [Arguments]    ${container}    ${namespace}   ${output_file}    ${addstring}=${EMPTY}   ${settling_memory}=False
    ${mem_consumption}=    Run Keyword If    ${settling_memory}    Settling Memory Consumptions    ${prometheusaddr}
    ...           ${prometheusport}    ${container}   ${namespace}
    ...    ELSE   Wait Until Keyword Succeeds    60s    5s    Get Memory Consumptions    ${prometheusaddr}    ${prometheusport}
    ...           ${container}   ${namespace}
    ${time}=    Get Time
    ${formated_mem}=    Format String    {:>10}    ${mem_consumption}
    ${prestring}=    Catenate    Memory consumptions of   ${container}    ${addstring}
    ${formated_prestring}=    Format String    {:<54}    ${prestring}
    ${out_string}=   Catenate   \r\n${formated_prestring}    :    ${formated_mem} Bytes    at ${time}
    Append To File    ${output_file}   ${out_string}
    Run Keyword If    ${print2console}    Log    ${formated_prestring} : ${formated_mem} Bytes at ${time}    console=yes
    [return]    ${mem_consumption}

Check for new ONU Device IDs
    [Documentation]    Checks that no old onu device ids stay
    [Arguments]    ${old_device_ids}
    ${new_device_ids}=    Get ONUs Device IDs from Voltha
    Should Not Be Empty    ${new_device_ids}    No new ONU device IDs
    FOR    ${item}    IN    @{old_device_ids}
        List Should Not Contain Value    ${new_device_ids}    ${item}    Old device id ${item} still present.
    END

Validate Memory Consumptions
    [Documentation]    Validates memory consumptions of passed POD
    [Arguments]    ${container}    ${namespace}    ${start_value}    ${output_file}    ${out_string}=Teardown
    ${mem_consumption}=    Get And Write Memory Consumption Per Container To File    ${container}    ${namespace}
    ...    ${output_file}    ${out_string}
    ${mem_consumption}=   Convert To Number    ${mem_consumption}    1
    ${upper_bound}=    Evaluate    (${start_value} + (${start_value}*0.175))
    Should Be True    ${upper_bound} >= ${mem_consumption}

Settling Memory Consumptions
    [Documentation]    Delivers memory consumptions of passed POD after memory consumptions are leveled.
    ...                - collecting memory consumption at least about 5 minutes, but max 20 minutes
    ...                - built average of memory consumtions
    ...                - wait current value does not deviate from the average by more than 12%.
    ...                - deliver average value value
    [Arguments]    ${prometheusaddr}    ${prometheusport}    ${container}    ${namespace}
    @{consumption_list}=    Create List
    ${consumption_sum}=    Set Variable    0
    ${consumption_max}=    Set Variable    0
    ${average_value}=    Set Variable    0
    FOR    ${index}    IN RANGE    1    21
        ${current_consumptions}=  Get Memory Consumptions  ${prometheusaddr}  ${prometheusport}  ${container}  ${namespace}
        Append To List    ${consumption_list}    ${current_consumptions}
        ${consumption_sum}=    Evaluate     ${consumption_sum}+${current_consumptions}
        ${consumption_max}=    Set Variable If    ${current_consumptions}>${consumption_max}    ${current_consumptions}
        ...                    ${consumption_max}
        ${average_value}=    Evaluate    ${consumption_sum}/${index}
        ${upper_bound}=    Evaluate    (${average_value} + (${average_value}*0.12))
        ${lower_bound}=    Evaluate    (${average_value} - (${average_value}*0.12))
        ${time}=    Get Time
        ${formatedIt}=    Format String    {:>3}    ${index}
        ${formated_mem}=    Format String    {:>10}    ${current_consumptions}
        ${prestring}=    Catenate    Memory consumptions of   ${container}    Leveling    ${formatedIt}
        ${formated_prestring}=    Format String    {:<54}    ${prestring}
        Run Keyword If    ${print2console}    Log    ${formated_prestring} : ${formated_mem} Bytes at ${time}    console=yes
        Exit For Loop If   ${index}>5 and ${current_consumptions}<${upper_bound} and ${current_consumptions}>${lower_bound}
        Sleep    60s
    END
    [return]   ${average_value}

Get Memory Consumptions
    [Documentation]    Delivers memory consumptions of passed POD
    [Arguments]    ${prometheusaddr}    ${prometheusport}    ${container}    ${namespace}
    ${mem_consumption}=    utility.get_memory_consumptions    ${prometheusaddr}:${prometheusport}    ${container}   ${namespace}
    Should Be True    ${mem_consumption} > 0
    [return]    ${mem_consumption}

Write Memory Consumption File Per Container
    [Documentation]    Writes memory consumptions file of passed POD for later evaluation.
    [Arguments]    ${container}    ${mem_consumption}
    ${output_file}=    Catenate    SEPARATOR=/    ${OUTPUT DIR}    MemoryConsumptions${workflow}${container}.txt
    Create File  ${output_file}
    FOR    ${value}     IN      @{mem_consumption}
        ${epoch}=    Convert To String    ${value[0]}
        Append To File    ${output_file}    ${epoch},${value[1]}${\n}
    END
