Remove variables for vpnservice
[integration/test.git] / csit / suites / sfc / Full_Deploy / 010__sfc_full_deploy.robot
index 6e6c12871c04c0bba879b4bf81492619bf09c612..02aa571b6b370435310766ef7672c06f73cbe185 100644 (file)
 *** Settings ***
-Documentation     Test suite for SFC Service Functions, Operates functions from Restconf APIs.
-Suite Setup       Init Suite
-Suite Teardown    Cleanup Suite
-Library           SSHLibrary
-Library           Collections
-Library           OperatingSystem
-Library           RequestsLibrary
-Library           ../../../libraries/SFC/SfcUtils.py
-Variables         ../../../variables/Variables.py
-Resource          ../../../variables/sfc/Variables.robot
-Resource          ../../../libraries/SSHKeywords.robot
-Resource          ../../../libraries/TemplatedRequests.robot
-Resource          ../../../libraries/KarafKeywords.robot
-Resource          ../../../libraries/SFC/DockerSfc.robot
+Documentation       Test suite for SFC Rendered Service Paths and Classifiers.
+
+Library             SSHLibrary
+Library             Collections
+Library             OperatingSystem
+Library             RequestsLibrary
+Library             ../../../libraries/SFC/SfcUtils.py
+Resource            ../../../libraries/SFC/SfcKeywords.robot
+Resource            ../../../variables/sfc/Variables.robot
+Resource            ../../../libraries/SSHKeywords.robot
+Resource            ../../../libraries/TemplatedRequests.robot
+Resource            ../../../libraries/KarafKeywords.robot
+Resource            ../../../libraries/DataModels.robot
+Resource            ../../../libraries/SFC/DockerSfc.robot
+Resource            ../../../libraries/Utils.robot
+Variables           ../../../variables/sfc/Modules.py
+
+Suite Setup         Init Suite
+Suite Teardown      Cleanup Suite
 
-*** Variables ***
-${CREATE_RSP1_INPUT}    {"input":{"parent-service-function-path":"SFP1","name":"RSP1"}}
-${CREATE_RSP_FAILURE_INPUT}    {"input":{"parent-service-function-path":"SFC1-empty","name":"RSP1-empty-Path-1"}}
 
 *** Test Cases ***
 Basic Environment Setup Tests
-    [Documentation]    Prepare Basic Test Environment
-    Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
-    Add Elements To URI From File    ${SERVICE_NODES_URI}    ${SERVICE_NODES_FILE}
-    Add Elements To URI From File    ${SERVICE_FUNCTIONS_URI}    ${SERVICE_FUNCTIONS_FILE}
-    Wait Until Keyword Succeeds    60s    2s    Check Service Function Types
-    Add Elements To URI From File    ${SERVICE_CHAINS_URI}    ${SERVICE_CHAINS_FILE}
-    Add Elements To URI From File    ${SERVICE_METADATA_URI}    ${SERVICE_METADATA_FILE}
-    Add Elements To URI From File    ${SERVICE_FUNCTION_PATHS_URI}    ${SERVICE_FUNCTION_PATHS_FILE}
-    Add Elements To URI From File    ${SERVICE_FUNCTION_ACLS_URI}    ${SERVICE_FUNCTION_ACLS_FILE}
+    [Documentation]    Prepare Basic Test Environment. Full Deploy
+    Utils.Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
+    Utils.Add Elements To URI From File    ${SERVICE_NODES_URI}    ${SERVICE_NODES_FILE}
+    Utils.Add Elements To URI From File    ${SERVICE_FUNCTIONS_URI}    ${SERVICE_FUNCTIONS_FILE}
+    BuiltIn.Wait Until Keyword Succeeds    60s    2s    SfcKeywords.Check Service Function Types Added    ${SF_NAMES}
+    Utils.Add Elements To URI From File    ${SERVICE_CHAINS_URI}    ${SERVICE_CHAINS_FILE}
+    Utils.Add Elements To URI From File    ${SERVICE_METADATA_URI}    ${SERVICE_METADATA_FILE}
+    SfcKeywords.Create Sfp And Wait For Rsp Creation    ${SERVICE_FUNCTION_PATHS_FILE}
+    ${rsp_name} =    SfcKeywords.Get Rendered Service Path Name    ${SFP_NAME}
+    ${rsp_rev_name} =    SfcKeywords.Get Rendered Service Path Name    ${SFP_NAME}    True
+    ${mapping} =    BuiltIn.Create Dictionary    RSP1=${rsp_name}    RSP1_Reverse=${rsp_rev_name}
+    ${sf_acl_text} =    TemplatedRequests.Resolve_Text_From_Template_File
+    ...    folder=${CONFIG_DIR}
+    ...    file_name=${SERVICE_FUNCTION_ACLS_FILE}
+    ...    mapping=${mapping}
+    Utils.Add Elements To URI And Verify    ${SERVICE_FUNCTION_ACLS_URI}    ${sf_acl_text}
 
-Create and Get Rendered Service Path
-    [Documentation]    Create and Get Rendered Service Path Through RESTConf APIs
-    Post Elements To URI As JSON    ${OPERATIONS_CREATE_RSP_URI}    ${CREATE_RSP1_INPUT}
-    ${resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_RSPS_URI}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
-    ${elements}=    Create List    RSP1    "parent-service-function-path":"SFP1"    "hop-number":0    "service-index":255    "hop-number":1
+Get Rendered Service Path By Name
+    [Documentation]    Get Rendered Service Path By Name Through RESTConf APIs. Full Deploy
+    # The RSP should be symetric, so 2 should be created for the SFP
+    ${rsp_name} =    SfcKeywords.Get Rendered Service Path Name    ${SFP_NAME}
+    Utils.Get URI And Verify    ${OPERATIONAL_RSP_URI}/${rsp_name}
+    ${rsp_rev_name} =    SfcKeywords.Get Rendered Service Path Name    ${SFP_NAME}    True
+    Utils.Get URI And Verify    ${OPERATIONAL_RSP_URI}/${rsp_rev_name}
+    ${elements} =    BuiltIn.Create List
+    ...    ${rsp_name}
+    ...    "parent-service-function-path":"${SFP_NAME}"
+    ...    "hop-number":0
+    ...    "service-index":255
+    ...    "hop-number":1
     ...    "service-index":254
-    Check For Elements At URI    ${OPERATIONAL_RSPS_URI}    ${elements}
+    Utils.Check For Elements At URI    ${OPERATIONAL_RSPS_URI}    ${elements}
 
 Create and Get Classifiers
-    [Documentation]    Apply json file descriptions of ACLs and Classifiers
-    Add Elements To URI From File    ${SERVICE_CLASSIFIERS_URI}    ${SERVICE_CLASSIFIERS_FILE}
-    ${classifiers}=    Create List    "service-function-classifiers"    "service-function-classifier"    "type":"ietf-access-control-list:ipv4-acl"    "scl-service-function-forwarder"
+    [Documentation]    Apply json file descriptions of ACLs and Classifiers. Full Deploy
+    Utils.Add Elements To URI From File    ${SERVICE_CLASSIFIERS_URI}    ${SERVICE_CLASSIFIERS_FILE}
+    ${classifiers} =    BuiltIn.Create List
+    ...    "service-function-classifiers"
+    ...    "service-function-classifier"
+    ...    "type":"ietf-access-control-list:ipv4-acl"
+    ...    "scl-service-function-forwarder"
     Append To List    ${classifiers}    "name":"Classifier2"    "name":"ACL2"
     Append To List    ${classifiers}    "name":"Classifier1"    "name":"ACL1"
-    Check For Elements At URI    ${SERVICE_CLASSIFIERS_URI}    ${classifiers}
-    Wait Until Keyword Succeeds    60s    2s    Check Classifier Flows
-
-*** Keywords ***
-Post Elements To URI As JSON
-    [Arguments]    ${uri}    ${data}
-    ${resp}    RequestsLibrary.Post Request    session    ${uri}    data=${data}    headers=${headers}
-    Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
+    Utils.Check For Elements At URI    ${SERVICE_CLASSIFIERS_URI}    ${classifiers}
+    BuiltIn.Wait Until Keyword Succeeds    60s    2s    SfcKeywords.Check Classifier Flows
 
-Get JSON Elements From URI
-    [Arguments]    ${uri}
-    ${resp}    RequestsLibrary.Get Request    session    ${uri}
-    ${value}    To Json    ${resp.content}
-    [Return]    ${value}
-
-Check Classifier Flows
-    ${flowList}=    DockerSfc.Get Flows In Docker Containers
-    log    ${flowList}
-    Should Contain Match    ${flowList}    *actions=pop_nsh*
-    Should Contain Match    ${flowList}    *actions=push_nsh*
-
-Check Service Function Types
-    [Documentation]    Check that the service function types are updated with the service function names
-    ${elements}=    Create List    "name":"firewall-1"    "name":"dpi-1"
-    Check For Elements At URI    ${SERVICE_FUNCTION_TYPES_URI}    ${elements}
-
-Switch Ips In Json Files
-    [Arguments]    ${json_dir}    ${container_names}
-    ${normalized_dir}=    OperatingSystem.Normalize Path    ${json_dir}/*.json
-    : FOR    ${cont_name}    IN    @{container_names}
-    \    ${cont_ip}=    Get Docker IP    ${cont_name}
-    \    OperatingSystem.Run    sudo sed -i 's/${cont_name}/${cont_ip}/g' ${normalized_dir}
 
+*** Keywords ***
 Init Suite
     [Documentation]    Connect Create session and initialize ODL version specific variables
+    RequestsLibrary.Create Session
+    ...    session
+    ...    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
+    ...    auth=${AUTH}
+    ...    headers=${HEADERS}
     SSHLibrary.Open Connection    ${TOOLS_SYSTEM_IP}    timeout=3s
     SSHKeywords.Flexible Mininet Login
-    ${docker_cidr}=    DockerSfc.Get Docker Bridge Subnet
-    ${docker_nw}=    SfcUtils.Get Network From Cidr    ${docker_cidr}
-    ${docker_mask}=    SfcUtils.Get Mask From Cidr    ${docker_cidr}
-    ${route_to_docker_net}=    Set Variable    sudo route add -net ${docker_nw} netmask ${docker_mask} gw ${TOOLS_SYSTEM_IP}
-    Run Command On Remote System    ${ODL_SYSTEM_IP}    ${route_to_docker_net}    ${ODL_SYSTEM_USER}    prompt=${ODL_SYSTEM_PROMPT}
+    ${docker_cidr} =    DockerSfc.Get Docker Bridge Subnet
+    ${docker_nw} =    SfcUtils.Get Network From Cidr    ${docker_cidr}
+    ${docker_mask} =    SfcUtils.Get Mask From Cidr    ${docker_cidr}
+    ${route_to_docker_net} =    BuiltIn.Set Variable
+    ...    sudo route add -net ${docker_nw} netmask ${docker_mask} gw ${TOOLS_SYSTEM_IP}
+    Utils.Run Command On Remote System
+    ...    ${ODL_SYSTEM_IP}
+    ...    ${route_to_docker_net}
+    ...    ${ODL_SYSTEM_USER}
+    ...    prompt=${ODL_SYSTEM_PROMPT}
     SSHLibrary.Put File    ${CURDIR}/docker-ovs.sh    .    mode=0755
     SSHLibrary.Put File    ${CURDIR}/Dockerfile    .    mode=0755
     SSHLibrary.Put File    ${CURDIR}/setup-docker-image.sh    .    mode=0755
-    ${result}    SSHLibrary.Execute Command    ./setup-docker-image.sh > >(tee myFile.log) 2> >(tee myFile.log)    return_stderr=True    return_stdout=True    return_rc=True
-    log    ${result}
-    Should be equal as integers    ${result[2]}    0
+    ${result} =    SSHLibrary.Execute Command
+    ...    ./setup-docker-image.sh ${ODL_STREAM} > >(tee myFile.log) 2> >(tee myFile.log)
+    ...    return_stderr=True
+    ...    return_stdout=True
+    ...    return_rc=True
+    BuiltIn.log    ${result}
+    BuiltIn.Should be equal as integers    ${result[2]}    0
+    BuiltIn.Set Suite Variable    @{INTERFACE_NAMES}    v-ovsnsn6g1    v-ovsnsn1g1
     DockerSfc.Docker Ovs Start    nodes=6    guests=1    tunnel=vxlan-gpe    odl_ip=${ODL_SYSTEM_IP}
-    ${docker_name_list}=    DockerSfc.Get Docker Names As List
-    Set Suite Variable    ${DOCKER_NAMES_LIST}    ${docker_name_list}
-    Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
-    log    ${ODL_STREAM}
-    Set Suite Variable    ${CONFIG_DIR}    ${CURDIR}/../../../variables/sfc/master/full-deploy
-    Set Suite Variable    ${SERVICE_FUNCTIONS_FILE}    ${CONFIG_DIR}/service-functions.json
-    Set Suite Variable    ${SERVICE_FORWARDERS_FILE}    ${CONFIG_DIR}/service-function-forwarders.json
-    Set Suite Variable    ${SERVICE_NODES_FILE}    ${CONFIG_DIR}/service-nodes.json
-    Set Suite Variable    ${SERVICE_CHAINS_FILE}    ${CONFIG_DIR}/service-function-chains.json
-    Set Suite Variable    ${SERVICE_FUNCTION_PATHS_FILE}    ${CONFIG_DIR}/service-function-paths.json
-    Set Suite Variable    ${SERVICE_METADATA_FILE}    ${CONFIG_DIR}/service-function-metadata.json
-    Set Suite Variable    ${SERVICE_FUNCTION_ACLS_FILE}    ${CONFIG_DIR}/service-function-acls.json
-    Set Suite Variable    ${SERVICE_CLASSIFIERS_FILE}    ${CONFIG_DIR}/service-function-classifiers.json
-    Switch Ips In Json Files    ${CONFIG_DIR}    ${DOCKER_NAMES_LIST}
+    BuiltIn.Wait Until Keyword Succeeds
+    ...    60s
+    ...    2s
+    ...    Utils.Check For Elements At URI
+    ...    ${OVSDB_TOPOLOGY_URI}
+    ...    ${INTERFACE_NAMES}
+    ${docker_name_list} =    DockerSfc.Get Docker Names As List
+    BuiltIn.Set Suite Variable    ${DOCKER_NAMES_LIST}    ${docker_name_list}
+    BuiltIn.log    ${ODL_STREAM}
+    BuiltIn.Set Suite Variable    ${SFP_NAME}    SFP1
+    BuiltIn.Set Suite Variable    ${CONFIG_DIR}    ${CURDIR}/../../../variables/sfc/master/full-deploy
+    BuiltIn.Set Suite Variable    ${SERVICE_FUNCTIONS_FILE}    ${CONFIG_DIR}/service-functions.json
+    BuiltIn.Set Suite Variable    ${SERVICE_FORWARDERS_FILE}    ${CONFIG_DIR}/service-function-forwarders.json
+    BuiltIn.Set Suite Variable    ${SERVICE_NODES_FILE}    ${CONFIG_DIR}/service-nodes.json
+    BuiltIn.Set Suite Variable    ${SERVICE_CHAINS_FILE}    ${CONFIG_DIR}/service-function-chains.json
+    BuiltIn.Set Suite Variable    ${SERVICE_FUNCTION_PATHS_FILE}    ${CONFIG_DIR}/service-function-paths.json
+    BuiltIn.Set Suite Variable    ${SERVICE_METADATA_FILE}    ${CONFIG_DIR}/service-function-metadata.json
+    BuiltIn.Set Suite Variable    ${SERVICE_FUNCTION_ACLS_FILE}    service-function-acls.json
+    BuiltIn.Set Suite Variable    ${SERVICE_CLASSIFIERS_FILE}    ${CONFIG_DIR}/service-function-classifiers.json
+    BuiltIn.Set Suite Variable    @{SF_NAMES}    "firewall-1"    "dpi-1"
+    SfcKeywords.Switch Ips In Json Files    ${CONFIG_DIR}    ${DOCKER_NAMES_LIST}
 
 Cleanup Suite
     [Documentation]    Clean up all docker containers created and delete sessions
-    Remove All Elements At URI    ${SERVICE_CLASSIFIERS_URI}
-    Remove All Elements At URI    ${SERVICE_FUNCTION_ACLS_URI}
-    Remove All Elements At URI    ${SERVICE_FUNCTIONS_URI}
-    Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
-    Remove All Elements At URI    ${SERVICE_NODES_URI}
-    Remove All Elements At URI    ${SERVICE_CHAINS_URI}
-    Remove All Elements At URI    ${SERVICE_FUNCTION_PATHS_URI}
-    Remove All Elements At URI    ${SERVICE_METADATA_URI}
+    DataModels.Get Model Dump    ${ODL_SYSTEM_IP}    ${sfc_data_models}
+    Utils.Remove All Elements At URI    ${SERVICE_CLASSIFIERS_URI}
+    Utils.Remove All Elements At URI    ${SERVICE_FUNCTION_ACLS_URI}
+    SfcKeywords.Delete Sfp And Wait For Rsps Deletion    ${SFP_NAME}
+    Utils.Remove All Elements At URI    ${SERVICE_FUNCTIONS_URI}
+    BuiltIn.Wait Until Keyword Succeeds    60s    2s    SfcKeywords.Check Service Function Types Removed    ${SF_NAMES}
+    Utils.Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
+    Utils.Remove All Elements At URI    ${SERVICE_NODES_URI}
+    Utils.Remove All Elements At URI    ${SERVICE_CHAINS_URI}
+    Utils.Remove All Elements At URI    ${SERVICE_METADATA_URI}
     DockerSfc.Docker Ovs Clean    log_file=myFile4.log
-    Delete All Sessions
+    RequestsLibrary.Delete All Sessions
     SSHLibrary.Close Connection