Check service function types are present
[integration/test.git] / csit / suites / sfc / Full_Deploy / 010__sfc_full_deploy.robot
1 *** Settings ***
2 Documentation     Test suite for SFC Service Functions, Operates functions from Restconf APIs.
3 Suite Setup       Init Suite
4 Suite Teardown    Cleanup Suite
5 Library           SSHLibrary
6 Library           Collections
7 Library           OperatingSystem
8 Library           RequestsLibrary
9 Library           ../../../libraries/SFC/SfcUtils.py
10 Variables         ../../../variables/Variables.py
11 Resource          ../../../variables/sfc/Variables.robot
12 Resource          ../../../libraries/SSHKeywords.robot
13 Resource          ../../../libraries/TemplatedRequests.robot
14 Resource          ../../../libraries/KarafKeywords.robot
15 Resource          ../../../libraries/SFC/DockerSfc.robot
16
17 *** Variables ***
18 ${CREATE_RSP1_INPUT}    {"input":{"parent-service-function-path":"SFP1","name":"RSP1"}}
19 ${CREATE_RSP_FAILURE_INPUT}    {"input":{"parent-service-function-path":"SFC1-empty","name":"RSP1-empty-Path-1"}}
20
21 *** Test Cases ***
22 Basic Environment Setup Tests
23     [Documentation]    Prepare Basic Test Environment
24     Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
25     Add Elements To URI From File    ${SERVICE_NODES_URI}    ${SERVICE_NODES_FILE}
26     Add Elements To URI From File    ${SERVICE_FUNCTIONS_URI}    ${SERVICE_FUNCTIONS_FILE}
27     Wait Until Keyword Succeeds    60s    2s    Check Service Function Types
28     Add Elements To URI From File    ${SERVICE_CHAINS_URI}    ${SERVICE_CHAINS_FILE}
29     Add Elements To URI From File    ${SERVICE_METADATA_URI}    ${SERVICE_METADATA_FILE}
30     Add Elements To URI From File    ${SERVICE_FUNCTION_PATHS_URI}    ${SERVICE_FUNCTION_PATHS_FILE}
31     Add Elements To URI From File    ${SERVICE_FUNCTION_ACLS_URI}    ${SERVICE_FUNCTION_ACLS_FILE}
32
33 Create and Get Rendered Service Path
34     [Documentation]    Create and Get Rendered Service Path Through RESTConf APIs
35     Post Elements To URI As JSON    ${OPERATIONS_CREATE_RSP_URI}    ${CREATE_RSP1_INPUT}
36     ${resp}    RequestsLibrary.Get Request    session    ${OPERATIONAL_RSPS_URI}
37     Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
38     ${elements}=    Create List    RSP1    "parent-service-function-path":"SFP1"    "hop-number":0    "service-index":255    "hop-number":1
39     ...    "service-index":254
40     Check For Elements At URI    ${OPERATIONAL_RSPS_URI}    ${elements}
41
42 Create and Get Classifiers
43     [Documentation]    Apply json file descriptions of ACLs and Classifiers
44     Add Elements To URI From File    ${SERVICE_CLASSIFIERS_URI}    ${SERVICE_CLASSIFIERS_FILE}
45     ${classifiers}=    Create List    "service-function-classifiers"    "service-function-classifier"    "type":"ietf-access-control-list:ipv4-acl"    "scl-service-function-forwarder"
46     Append To List    ${classifiers}    "name":"Classifier2"    "name":"ACL2"
47     Append To List    ${classifiers}    "name":"Classifier1"    "name":"ACL1"
48     Check For Elements At URI    ${SERVICE_CLASSIFIERS_URI}    ${classifiers}
49     Wait Until Keyword Succeeds    60s    2s    Check Classifier Flows
50
51 *** Keywords ***
52 Post Elements To URI As JSON
53     [Arguments]    ${uri}    ${data}
54     ${resp}    RequestsLibrary.Post Request    session    ${uri}    data=${data}    headers=${headers}
55     Should Contain    ${ALLOWED_STATUS_CODES}    ${resp.status_code}
56
57 Get JSON Elements From URI
58     [Arguments]    ${uri}
59     ${resp}    RequestsLibrary.Get Request    session    ${uri}
60     ${value}    To Json    ${resp.content}
61     [Return]    ${value}
62
63 Check Classifier Flows
64     ${flowList}=    DockerSfc.Get Flows In Docker Containers
65     log    ${flowList}
66     Should Contain Match    ${flowList}    *actions=pop_nsh*
67     Should Contain Match    ${flowList}    *actions=push_nsh*
68
69 Check Service Function Types
70     [Documentation]    Check that the service function types are updated with the service function names
71     ${elements}=    Create List    "name":"firewall-1"    "name":"dpi-1"
72     Check For Elements At URI    ${SERVICE_FUNCTION_TYPES_URI}    ${elements}
73
74 Switch Ips In Json Files
75     [Arguments]    ${json_dir}    ${container_names}
76     ${normalized_dir}=    OperatingSystem.Normalize Path    ${json_dir}/*.json
77     : FOR    ${cont_name}    IN    @{container_names}
78     \    ${cont_ip}=    Get Docker IP    ${cont_name}
79     \    OperatingSystem.Run    sudo sed -i 's/${cont_name}/${cont_ip}/g' ${normalized_dir}
80
81 Init Suite
82     [Documentation]    Connect Create session and initialize ODL version specific variables
83     SSHLibrary.Open Connection    ${TOOLS_SYSTEM_IP}    timeout=3s
84     SSHKeywords.Flexible Mininet Login
85     ${docker_cidr}=    DockerSfc.Get Docker Bridge Subnet
86     ${docker_nw}=    SfcUtils.Get Network From Cidr    ${docker_cidr}
87     ${docker_mask}=    SfcUtils.Get Mask From Cidr    ${docker_cidr}
88     ${route_to_docker_net}=    Set Variable    sudo route add -net ${docker_nw} netmask ${docker_mask} gw ${TOOLS_SYSTEM_IP}
89     Run Command On Remote System    ${ODL_SYSTEM_IP}    ${route_to_docker_net}    ${ODL_SYSTEM_USER}    prompt=${ODL_SYSTEM_PROMPT}
90     SSHLibrary.Put File    ${CURDIR}/docker-ovs.sh    .    mode=0755
91     SSHLibrary.Put File    ${CURDIR}/Dockerfile    .    mode=0755
92     SSHLibrary.Put File    ${CURDIR}/setup-docker-image.sh    .    mode=0755
93     ${result}    SSHLibrary.Execute Command    ./setup-docker-image.sh > >(tee myFile.log) 2> >(tee myFile.log)    return_stderr=True    return_stdout=True    return_rc=True
94     log    ${result}
95     Should be equal as integers    ${result[2]}    0
96     DockerSfc.Docker Ovs Start    nodes=6    guests=1    tunnel=vxlan-gpe    odl_ip=${ODL_SYSTEM_IP}
97     ${docker_name_list}=    DockerSfc.Get Docker Names As List
98     Set Suite Variable    ${DOCKER_NAMES_LIST}    ${docker_name_list}
99     Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
100     log    ${ODL_STREAM}
101     Set Suite Variable    ${CONFIG_DIR}    ${CURDIR}/../../../variables/sfc/master/full-deploy
102     Set Suite Variable    ${SERVICE_FUNCTIONS_FILE}    ${CONFIG_DIR}/service-functions.json
103     Set Suite Variable    ${SERVICE_FORWARDERS_FILE}    ${CONFIG_DIR}/service-function-forwarders.json
104     Set Suite Variable    ${SERVICE_NODES_FILE}    ${CONFIG_DIR}/service-nodes.json
105     Set Suite Variable    ${SERVICE_CHAINS_FILE}    ${CONFIG_DIR}/service-function-chains.json
106     Set Suite Variable    ${SERVICE_FUNCTION_PATHS_FILE}    ${CONFIG_DIR}/service-function-paths.json
107     Set Suite Variable    ${SERVICE_METADATA_FILE}    ${CONFIG_DIR}/service-function-metadata.json
108     Set Suite Variable    ${SERVICE_FUNCTION_ACLS_FILE}    ${CONFIG_DIR}/service-function-acls.json
109     Set Suite Variable    ${SERVICE_CLASSIFIERS_FILE}    ${CONFIG_DIR}/service-function-classifiers.json
110     Switch Ips In Json Files    ${CONFIG_DIR}    ${DOCKER_NAMES_LIST}
111
112 Cleanup Suite
113     [Documentation]    Clean up all docker containers created and delete sessions
114     Remove All Elements At URI    ${SERVICE_CLASSIFIERS_URI}
115     Remove All Elements At URI    ${SERVICE_FUNCTION_ACLS_URI}
116     Remove All Elements At URI    ${SERVICE_FUNCTIONS_URI}
117     Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
118     Remove All Elements At URI    ${SERVICE_NODES_URI}
119     Remove All Elements At URI    ${SERVICE_CHAINS_URI}
120     Remove All Elements At URI    ${SERVICE_FUNCTION_PATHS_URI}
121     Remove All Elements At URI    ${SERVICE_METADATA_URI}
122     DockerSfc.Docker Ovs Clean    log_file=myFile4.log
123     Delete All Sessions
124     SSHLibrary.Close Connection