Update Robot Framework format - step 14
[integration/test.git] / csit / suites / sfc / Full_Deploy / 010__sfc_full_deploy.robot
1 *** Settings ***
2 Documentation       Test suite for SFC Rendered Service Paths and Classifiers.
3
4 Library             SSHLibrary
5 Library             Collections
6 Library             OperatingSystem
7 Library             RequestsLibrary
8 Library             ../../../libraries/SFC/SfcUtils.py
9 Resource            ../../../libraries/SFC/SfcKeywords.robot
10 Resource            ../../../variables/sfc/Variables.robot
11 Resource            ../../../libraries/SSHKeywords.robot
12 Resource            ../../../libraries/TemplatedRequests.robot
13 Resource            ../../../libraries/KarafKeywords.robot
14 Resource            ../../../libraries/DataModels.robot
15 Resource            ../../../libraries/SFC/DockerSfc.robot
16 Resource            ../../../libraries/Utils.robot
17 Variables           ../../../variables/sfc/Modules.py
18
19 Suite Setup         Init Suite
20 Suite Teardown      Cleanup Suite
21
22
23 *** Test Cases ***
24 Basic Environment Setup Tests
25     [Documentation]    Prepare Basic Test Environment. Full Deploy
26     Utils.Add Elements To URI From File    ${SERVICE_FORWARDERS_URI}    ${SERVICE_FORWARDERS_FILE}
27     Utils.Add Elements To URI From File    ${SERVICE_NODES_URI}    ${SERVICE_NODES_FILE}
28     Utils.Add Elements To URI From File    ${SERVICE_FUNCTIONS_URI}    ${SERVICE_FUNCTIONS_FILE}
29     BuiltIn.Wait Until Keyword Succeeds    60s    2s    SfcKeywords.Check Service Function Types Added    ${SF_NAMES}
30     Utils.Add Elements To URI From File    ${SERVICE_CHAINS_URI}    ${SERVICE_CHAINS_FILE}
31     Utils.Add Elements To URI From File    ${SERVICE_METADATA_URI}    ${SERVICE_METADATA_FILE}
32     SfcKeywords.Create Sfp And Wait For Rsp Creation    ${SERVICE_FUNCTION_PATHS_FILE}
33     ${rsp_name} =    SfcKeywords.Get Rendered Service Path Name    ${SFP_NAME}
34     ${rsp_rev_name} =    SfcKeywords.Get Rendered Service Path Name    ${SFP_NAME}    True
35     ${mapping} =    BuiltIn.Create Dictionary    RSP1=${rsp_name}    RSP1_Reverse=${rsp_rev_name}
36     ${sf_acl_text} =    TemplatedRequests.Resolve_Text_From_Template_File
37     ...    folder=${CONFIG_DIR}
38     ...    file_name=${SERVICE_FUNCTION_ACLS_FILE}
39     ...    mapping=${mapping}
40     Utils.Add Elements To URI And Verify    ${SERVICE_FUNCTION_ACLS_URI}    ${sf_acl_text}
41
42 Get Rendered Service Path By Name
43     [Documentation]    Get Rendered Service Path By Name Through RESTConf APIs. Full Deploy
44     # The RSP should be symetric, so 2 should be created for the SFP
45     ${rsp_name} =    SfcKeywords.Get Rendered Service Path Name    ${SFP_NAME}
46     Utils.Get URI And Verify    ${OPERATIONAL_RSP_URI}/${rsp_name}
47     ${rsp_rev_name} =    SfcKeywords.Get Rendered Service Path Name    ${SFP_NAME}    True
48     Utils.Get URI And Verify    ${OPERATIONAL_RSP_URI}/${rsp_rev_name}
49     ${elements} =    BuiltIn.Create List
50     ...    ${rsp_name}
51     ...    "parent-service-function-path":"${SFP_NAME}"
52     ...    "hop-number":0
53     ...    "service-index":255
54     ...    "hop-number":1
55     ...    "service-index":254
56     Utils.Check For Elements At URI    ${OPERATIONAL_RSPS_URI}    ${elements}
57
58 Create and Get Classifiers
59     [Documentation]    Apply json file descriptions of ACLs and Classifiers. Full Deploy
60     Utils.Add Elements To URI From File    ${SERVICE_CLASSIFIERS_URI}    ${SERVICE_CLASSIFIERS_FILE}
61     ${classifiers} =    BuiltIn.Create List
62     ...    "service-function-classifiers"
63     ...    "service-function-classifier"
64     ...    "type":"ietf-access-control-list:ipv4-acl"
65     ...    "scl-service-function-forwarder"
66     Append To List    ${classifiers}    "name":"Classifier2"    "name":"ACL2"
67     Append To List    ${classifiers}    "name":"Classifier1"    "name":"ACL1"
68     Utils.Check For Elements At URI    ${SERVICE_CLASSIFIERS_URI}    ${classifiers}
69     BuiltIn.Wait Until Keyword Succeeds    60s    2s    SfcKeywords.Check Classifier Flows
70
71
72 *** Keywords ***
73 Init Suite
74     [Documentation]    Connect Create session and initialize ODL version specific variables
75     RequestsLibrary.Create Session
76     ...    session
77     ...    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
78     ...    auth=${AUTH}
79     ...    headers=${HEADERS}
80     SSHLibrary.Open Connection    ${TOOLS_SYSTEM_IP}    timeout=3s
81     SSHKeywords.Flexible Mininet Login
82     ${docker_cidr} =    DockerSfc.Get Docker Bridge Subnet
83     ${docker_nw} =    SfcUtils.Get Network From Cidr    ${docker_cidr}
84     ${docker_mask} =    SfcUtils.Get Mask From Cidr    ${docker_cidr}
85     ${route_to_docker_net} =    BuiltIn.Set Variable
86     ...    sudo route add -net ${docker_nw} netmask ${docker_mask} gw ${TOOLS_SYSTEM_IP}
87     Utils.Run Command On Remote System
88     ...    ${ODL_SYSTEM_IP}
89     ...    ${route_to_docker_net}
90     ...    ${ODL_SYSTEM_USER}
91     ...    prompt=${ODL_SYSTEM_PROMPT}
92     SSHLibrary.Put File    ${CURDIR}/docker-ovs.sh    .    mode=0755
93     SSHLibrary.Put File    ${CURDIR}/Dockerfile    .    mode=0755
94     SSHLibrary.Put File    ${CURDIR}/setup-docker-image.sh    .    mode=0755
95     ${result} =    SSHLibrary.Execute Command
96     ...    ./setup-docker-image.sh ${ODL_STREAM} > >(tee myFile.log) 2> >(tee myFile.log)
97     ...    return_stderr=True
98     ...    return_stdout=True
99     ...    return_rc=True
100     BuiltIn.log    ${result}
101     BuiltIn.Should be equal as integers    ${result[2]}    0
102     BuiltIn.Set Suite Variable    @{INTERFACE_NAMES}    v-ovsnsn6g1    v-ovsnsn1g1
103     DockerSfc.Docker Ovs Start    nodes=6    guests=1    tunnel=vxlan-gpe    odl_ip=${ODL_SYSTEM_IP}
104     BuiltIn.Wait Until Keyword Succeeds
105     ...    60s
106     ...    2s
107     ...    Utils.Check For Elements At URI
108     ...    ${OVSDB_TOPOLOGY_URI}
109     ...    ${INTERFACE_NAMES}
110     ${docker_name_list} =    DockerSfc.Get Docker Names As List
111     BuiltIn.Set Suite Variable    ${DOCKER_NAMES_LIST}    ${docker_name_list}
112     BuiltIn.log    ${ODL_STREAM}
113     BuiltIn.Set Suite Variable    ${SFP_NAME}    SFP1
114     BuiltIn.Set Suite Variable    ${CONFIG_DIR}    ${CURDIR}/../../../variables/sfc/master/full-deploy
115     BuiltIn.Set Suite Variable    ${SERVICE_FUNCTIONS_FILE}    ${CONFIG_DIR}/service-functions.json
116     BuiltIn.Set Suite Variable    ${SERVICE_FORWARDERS_FILE}    ${CONFIG_DIR}/service-function-forwarders.json
117     BuiltIn.Set Suite Variable    ${SERVICE_NODES_FILE}    ${CONFIG_DIR}/service-nodes.json
118     BuiltIn.Set Suite Variable    ${SERVICE_CHAINS_FILE}    ${CONFIG_DIR}/service-function-chains.json
119     BuiltIn.Set Suite Variable    ${SERVICE_FUNCTION_PATHS_FILE}    ${CONFIG_DIR}/service-function-paths.json
120     BuiltIn.Set Suite Variable    ${SERVICE_METADATA_FILE}    ${CONFIG_DIR}/service-function-metadata.json
121     BuiltIn.Set Suite Variable    ${SERVICE_FUNCTION_ACLS_FILE}    service-function-acls.json
122     BuiltIn.Set Suite Variable    ${SERVICE_CLASSIFIERS_FILE}    ${CONFIG_DIR}/service-function-classifiers.json
123     BuiltIn.Set Suite Variable    @{SF_NAMES}    "firewall-1"    "dpi-1"
124     SfcKeywords.Switch Ips In Json Files    ${CONFIG_DIR}    ${DOCKER_NAMES_LIST}
125
126 Cleanup Suite
127     [Documentation]    Clean up all docker containers created and delete sessions
128     DataModels.Get Model Dump    ${ODL_SYSTEM_IP}    ${sfc_data_models}
129     Utils.Remove All Elements At URI    ${SERVICE_CLASSIFIERS_URI}
130     Utils.Remove All Elements At URI    ${SERVICE_FUNCTION_ACLS_URI}
131     SfcKeywords.Delete Sfp And Wait For Rsps Deletion    ${SFP_NAME}
132     Utils.Remove All Elements At URI    ${SERVICE_FUNCTIONS_URI}
133     BuiltIn.Wait Until Keyword Succeeds    60s    2s    SfcKeywords.Check Service Function Types Removed    ${SF_NAMES}
134     Utils.Remove All Elements At URI    ${SERVICE_FORWARDERS_URI}
135     Utils.Remove All Elements At URI    ${SERVICE_NODES_URI}
136     Utils.Remove All Elements At URI    ${SERVICE_CHAINS_URI}
137     Utils.Remove All Elements At URI    ${SERVICE_METADATA_URI}
138     DockerSfc.Docker Ovs Clean    log_file=myFile4.log
139     RequestsLibrary.Delete All Sessions
140     SSHLibrary.Close Connection