cleaning up system variables
[integration/test.git] / csit / suites / bgpcep / pcepuser / pcepuser.robot
1 *** Settings ***
2 Documentation     Basic tests for odl-bgpcep-pcep-all feature.
3 ...
4 ...               Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
5 ...
6 ...               This program and the accompanying materials are made available under the
7 ...               terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 ...               and is available at http://www.eclipse.org/legal/epl-v10.html
9 Suite Setup       Set_It_Up
10 Suite Teardown    Tear_It_Down
11 Library           OperatingSystem
12 Library           SSHLibrary
13 Library           RequestsLibrary
14 Library           ${CURDIR}/../../../libraries/HsfJson/hsf_json.py
15 Resource          ${CURDIR}/../../../libraries/NexusKeywords.robot
16 Resource          ${CURDIR}/../../../libraries/PcepOperations.robot
17 Resource          ${CURDIR}/../../../libraries/Utils.robot
18 Variables         ${CURDIR}/../../../variables/Variables.py
19 Variables         ${CURDIR}/../../../variables/pcepuser/variables.py    ${TOOLS_SYSTEM_IP}
20
21 *** Variables ***
22 ${OUTPUT_TIMEOUT}    10
23 # FIXME: Unify parameter naming and case.
24 ${ExpDir}         ${CURDIR}/expected
25 ${ActDir}         ${CURDIR}/actual
26
27 *** Test Cases ***
28 Topology_Precondition
29     [Documentation]    Compare current pcep-topology to off_json variable.
30     ...    Timeout is long enough to ODL boot, to see that pcep is ready, with no PCC is connected.
31     [Tags]    critical
32     Wait_Until_Keyword_Succeeds    300    1    Compare_Topology    ${off_json}    010_Topology_Precondition
33
34 Start_Pcc_Mock
35     [Documentation]    Execute pcc-mock on Mininet, fail is Open is not sent, keep it running for next tests.
36     ${command}=    NexusKeywords.Compose_Full_Java_Command    -jar ${filename} --local-address ${TOOLS_SYSTEM_IP} --remote-address ${ODL_SYSTEM_IP} 2>&1 | tee pccmock.log
37     Log    ${command}
38     Write    ${command}
39     Read_Until    started, sent proposal Open
40
41 Topology_Default
42     [Documentation]    Compare pcep-topology to default_json, which includes a tunnel from pcc-mock.
43     ...    Timeout is lower than in Precondition, as state from pcc-mock should be updated quickly.
44     [Tags]    critical
45     Wait_Until_Keyword_succeeds    5    1    Compare_Topology    ${default_json}    020_Topology_Default
46
47 Update_Delegated
48     [Documentation]    Perform update-lsp on the mocked tunnel, check response is success.
49     [Tags]    critical
50     ${text}=    Update_Xml_Lsp_Return_Json    ${update_delegated_xml}
51     Pcep_Json_Is_Success    ${text}
52
53 Topology_Updated
54     [Documentation]    Compare pcep-topology to default_json, which includes the updated tunnel.
55     [Tags]    critical
56     Wait_Until_Keyword_succeeds    5    1    Compare_Topology    ${updated_json}    030_Topology_Updated
57
58 Refuse_Remove_Delegated
59     [Documentation]    Perform remove-lsp on the mocked tunnel, check that mock-pcc has refused to remove it.
60     [Tags]    critical
61     ${text}=    Remove_Xml_Lsp_Return_Json    ${remove_delegated_xml}
62     Pcep_Json_Is_Refused    ${text}
63
64 Topology_Still_Updated
65     [Documentation]    Compare pcep-topology to default_json, which includes the updated tunnel, to verify that refusal did not break topology.
66     [Tags]    critical
67     Wait_Until_Keyword_succeeds    5    1    Compare_Topology    ${updated_json}    040_Topology_Still_Updated
68
69 Add_Instantiated
70     [Documentation]    Perform add-lsp to create new tunnel, check that response is success.
71     [Tags]    critical
72     ${text}=    Add_Xml_Lsp_Return_Json    ${add_instantiated_xml}
73     Pcep_Json_Is_Success    ${text}
74
75 Topology_Second_Default
76     [Documentation]    Compare pcep-topology to default_json, which includes the updated delegated and default instantiated tunnel.
77     [Tags]    critical
78     Wait_Until_Keyword_succeeds    5    1    Compare_Topology    ${updated_default_json}    050_Topology_Second_Default
79
80 Update_Instantiated
81     [Documentation]    Perform update-lsp on the newly instantiated tunnel, check that response is success.
82     [Tags]    critical
83     ${text}=    Update_Xml_Lsp_Return_Json    ${update_instantiated_xml}
84     Pcep_Json_Is_Success    ${text}
85
86 Topology_Second_Updated
87     [Documentation]    Compare pcep-topology to default_json, which includes the updated delegated and updated instantiated tunnel.
88     [Tags]    critical
89     Wait_Until_Keyword_succeeds    5    1    Compare_Topology    ${updated_updated_json}    060_Topology_Second_Updated
90
91 Remove_Instantiated
92     [Documentation]    Perform remove-lsp on the instantiated tunnel, check that response is success.
93     [Tags]    critical
94     ${text}=    Remove_Xml_Lsp_Return_Json    ${remove_instantiated_xml}
95     Pcep_Json_Is_Success    ${text}
96
97 Topology_Again_Updated
98     [Documentation]    Compare pcep-topology to default_json, which includes the updated tunnel, to verify that instantiated tunnel was removed.
99     [Tags]    critical
100     Wait_Until_Keyword_succeeds    5    1    Compare_Topology    ${updated_json}    070_Topology_Again_Updated
101
102 Stop_Pcc_Mock
103     [Documentation]    Send ctrl+c to pcc-mock, fails if no prompt is seen
104     ...    after 3 seconds (the default for SSHLibrary)
105     ${command}=    Evaluate    chr(int(3))
106     Log    ${command}
107     Write    ${command}
108     Read_Until_Prompt
109
110 Topology_Postcondition
111     [Documentation]    Compare curent pcep-topology to "off_json" again.
112     [Tags]    critical
113     Wait_Until_Keyword_Succeeds    5    1    Compare_Topology    ${off_json}    080_Topology_Postcondition
114
115 *** Keywords ***
116 Set_It_Up
117     [Documentation]    Create SSH session to Mininet machine, prepare HTTP client session to Controller.
118     ...    Figure out latest pcc-mock version and download it from Nexus to Mininet.
119     ...    Also, delete and create directories for json diff handling.
120     NexusKeywords.Initialize_Artifact_Deployment_And_Usage
121     # FIXME: Unify Module prefix usage across whole file.
122     Create_Session    ses    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}/restconf/operational/network-topology:network-topology    auth=${AUTH}
123     ${name}=    NexusKeywords.Deploy_Test_Tool    bgpcep    pcep-pcc-mock
124     BuiltIn.Set_Suite_Variable    ${filename}    ${name}
125     Remove_Directory    ${ExpDir}
126     Remove_Directory    ${ActDir}
127     Create_Directory    ${ExpDir}
128     Create_Directory    ${ActDir}
129     Setup_Pcep_Operations
130
131 Compare_Topology
132     [Arguments]    ${expected}    ${name}
133     [Documentation]    Get current pcep-topology as json, normalize both expected and actual json.
134     ...    Save normalized jsons to files for later processing.
135     ...    Error codes and normalized jsons should match exactly.
136     ${normexp}=    Hsf_Json    ${expected}
137     Log    ${normexp}
138     Create_File    ${ExpDir}${/}${name}    ${normexp}
139     ${resp}=    RequestsLibrary.Get Request    ses    topology/pcep-topology
140     Log    ${resp}
141     Log    ${resp.text}
142     ${normresp}=    Hsf_Json    ${resp.text}
143     Log    ${normresp}
144     Create_File    ${ActDir}${/}${name}    ${normresp}
145     Should_Be_Equal_As_Strings    ${resp.status_code}    200
146     Should_Be_Equal    ${normresp}    ${normexp}
147
148 Tear_It_Down
149     [Documentation]    Download pccmock.log and Log its contents.
150     ...    Compute and Log the diff between expected and actual normalized responses.
151     ...    Close both HTTP client session and SSH connection to Mininet.
152     SSHLibrary.Get_File    pccmock.log
153     ${pccmocklog}=    Run    cat pccmock.log
154     Log    ${pccmocklog}
155     ${diff}=    Run    diff -dur ${ExpDir} ${ActDir}
156     Log    ${diff}
157     Teardown_Pcep_Operations
158     Delete_All_Sessions
159     Close_All_Connections