2 Documentation Basic tests for odl-bgpcep-pcep-all feature.
4 ... Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
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
10 Suite Teardown Tear_It_Down
11 Library OperatingSystem
13 Library RequestsLibrary
14 Library ../../../libraries/norm_json.py
15 Resource ../../../libraries/NexusKeywords.robot
16 Resource ../../../libraries/PcepOperations.robot
17 Resource ../../../libraries/Utils.robot
18 Resource ../../../libraries/RemoteBash.robot
19 Resource ../../../libraries/TemplatedRequests.robot
20 Resource ../../../libraries/CompareStream.robot
21 Resource ../../../variables/Variables.robot
22 Variables ../../../variables/pcepuser/variables.py ${TOOLS_SYSTEM_IP}
25 ${CONFIG_SESSION} session
26 ${PATH_SESSION_URI} node/pcc:%2F%2F${TOOLS_SYSTEM_IP}/path-computation-client
27 ${PCEP_VARIABLES_FOLDER} ${CURDIR}/../../../variables/pcepuser/
31 [Documentation] Compare current pcep-topology to off_json variable.
32 ... Timeout is long enough to ODL boot, to see that pcep is ready, with no PCC is connected.
34 Wait_Until_Keyword_Succeeds 300s 1s Compare_Topology ${off_json}
37 [Documentation] Execute pcc-mock on Mininet, fail is Open is not sent, keep it running for next tests.
38 ${command}= NexusKeywords.Compose_Full_Java_Command -jar ${filename} --reconnect 1 --local-address ${TOOLS_SYSTEM_IP} --remote-address ${ODL_SYSTEM_IP} 2>&1 | tee pccmock.log
41 Read_Until started, sent proposal Open
43 Configure_Speaker_Entity_Identifier
44 [Documentation] Additional PCEP Speaker configuration for at least oxygen streams.
45 ... Allows PCEP speaker to determine if state synchronization can be skipped when a PCEP session is restarted.
46 &{mapping} BuiltIn.Create_Dictionary IP=${ODL_SYSTEM_IP}
47 CompareStream.Run_Keyword_If_At_Least_Oxygen TemplatedRequests.Put_As_Xml_Templated ${PCEP_VARIABLES_FOLDER}${/}node_speaker_entity_identifier mapping=${mapping} session=${CONFIG_SESSION}
50 [Documentation] Compare pcep-topology to default_json, which includes a tunnel from pcc-mock.
51 ... Timeout is lower than in Precondition, as state from pcc-mock should be updated quickly.
53 Wait_Until_Keyword_succeeds 10s 1s Compare_Topology ${default_json} ${PATH_SESSION_URI}
56 [Documentation] Perform update-lsp on the mocked tunnel, check response is success.
58 ${text}= Update_Xml_Lsp_Return_Json ${update_delegated_xml}
59 Pcep_Json_Is_Success ${text}
62 [Documentation] Compare pcep-topology to default_json, which includes the updated tunnel.
64 Wait_Until_Keyword_succeeds 10s 1s Compare_Topology ${updated_json} ${PATH_SESSION_URI}
66 Refuse_Remove_Delegated
67 [Documentation] Perform remove-lsp on the mocked tunnel, check that mock-pcc has refused to remove it.
69 ${text}= Remove_Xml_Lsp_Return_Json ${remove_delegated_xml}
70 Pcep_Json_Is_Refused ${text}
72 Topology_Still_Updated
73 [Documentation] Compare pcep-topology to default_json, which includes the updated tunnel, to verify that refusal did not break topology.
75 Wait_Until_Keyword_succeeds 10s 1s Compare_Topology ${updated_json} ${PATH_SESSION_URI}
78 [Documentation] Perform add-lsp to create new tunnel, check that response is success.
80 ${text}= Add_Xml_Lsp_Return_Json ${add_instantiated_xml}
81 Pcep_Json_Is_Success ${text}
83 Topology_Second_Default
84 [Documentation] Compare pcep-topology to default_json, which includes the updated delegated and default instantiated tunnel.
86 Wait_Until_Keyword_succeeds 10s 1s Compare_Topology ${updated_default_json} ${PATH_SESSION_URI}
89 [Documentation] Perform update-lsp on the newly instantiated tunnel, check that response is success.
91 ${text}= Update_Xml_Lsp_Return_Json ${update_instantiated_xml}
92 Pcep_Json_Is_Success ${text}
94 Topology_Second_Updated
95 [Documentation] Compare pcep-topology to default_json, which includes the updated delegated and updated instantiated tunnel.
97 Wait_Until_Keyword_succeeds 10s 1s Compare_Topology ${updated_updated_json} ${PATH_SESSION_URI}
100 [Documentation] Perform remove-lsp on the instantiated tunnel, check that response is success.
102 ${text}= Remove_Xml_Lsp_Return_Json ${remove_instantiated_xml}
103 Pcep_Json_Is_Success ${text}
105 Topology_Again_Updated
106 [Documentation] Compare pcep-topology to default_json, which includes the updated tunnel, to verify that instantiated tunnel was removed.
108 Wait_Until_Keyword_succeeds 10s 1s Compare_Topology ${updated_json} ${PATH_SESSION_URI}
111 [Documentation] Send ctrl+c to pcc-mock, fails if no prompt is seen
112 ... after 3 seconds (the default for SSHLibrary)
113 RemoteBash.Write_Bare_Ctrl_C
114 ${output}= SSHLibrary.Read_Until_Prompt
115 BuiltIn.Log ${output}
117 Topology_Postcondition
118 [Documentation] Compare curent pcep-topology to "off_json" again.
120 Wait_Until_Keyword_Succeeds 10s 1s Compare_Topology ${off_json}
124 [Documentation] Create SSH session to Mininet machine, prepare HTTP client session to Controller.
125 ... Figure out latest pcc-mock version and download it from Nexus to Mininet.
126 NexusKeywords.Initialize_Artifact_Deployment_And_Usage
127 RequestsLibrary.Create_Session ${CONFIG_SESSION} http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH}
128 ${name}= NexusKeywords.Deploy_Test_Tool bgpcep pcep-pcc-mock
129 BuiltIn.Set_Suite_Variable ${filename} ${name}
130 PcepOperations.Setup_Pcep_Operations
133 [Documentation] Download pccmock.log and Log its contents.
134 ... Compute and Log the diff between expected and actual normalized responses.
135 ... Close both HTTP client session and SSH connection to Mininet.
136 SSHLibrary.Get_File pccmock.log
137 ${pccmocklog}= OperatingSystem.Run cat pccmock.log
138 BuiltIn.Log ${pccmocklog}
139 PcepOperations.Teardown_Pcep_Operations
141 Close_All_Connections
144 [Arguments] ${exp} ${uri}=${EMPTY}
145 [Documentation] Get current pcep-topology as json, compare both expected and actual json.
146 ... Error codes and normalized jsons should match exactly.
147 # TODO: Add Node Session State Check For Oxygen, see tcpmd5user
148 # TODO: Possibly remake all tests with TemplatedRequests
149 ${response}= RequestsLibrary.Get Request ${CONFIG_SESSION} ${OPERATIONAL_TOPO_API}/topology/pcep-topology/${uri}
150 BuiltIn.Should_Be_Equal_As_Strings ${response.status_code} 200
151 TemplatedRequests.Normalize_Jsons_And_Compare ${exp} ${response.text}