blob: cfede3062f11eaf100c3568a54772ea84710d95f [file] [log] [blame]
Phanendra Manda972ee9e2015-08-21 19:08:20 +05301/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2015-present Open Networking Foundation
Phanendra Manda972ee9e2015-08-21 19:08:20 +05303 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.provider.pcep.tunnel.impl;
17
Priyanka Bd2b28882016-04-04 16:57:04 +053018import static org.hamcrest.MatcherAssert.assertThat;
19import static org.hamcrest.Matchers.nullValue;
20import static org.hamcrest.core.Is.is;
21import static org.hamcrest.core.IsNot.not;
Phanendra Manda972ee9e2015-08-21 19:08:20 +053022import static org.onosproject.net.DefaultAnnotations.EMPTY;
harikrushna-Huaweia2c7c202017-04-10 18:22:00 +053023import static org.onosproject.pcep.server.LspType.WITH_SIGNALLING;
24import static org.onosproject.pcep.server.LspType.SR_WITHOUT_SIGNALLING;
25import static org.onosproject.pcep.server.LspType.WITHOUT_SIGNALLING_AND_WITHOUT_SR;
26import static org.onosproject.pcep.server.PcepAnnotationKeys.LSP_SIG_TYPE;
Phanendra Manda972ee9e2015-08-21 19:08:20 +053027
28import java.io.IOException;
29import java.util.ArrayList;
30import java.util.List;
31
32import org.junit.After;
Priyanka Bd2b28882016-04-04 16:57:04 +053033import org.junit.Before;
Phanendra Manda972ee9e2015-08-21 19:08:20 +053034import org.junit.Test;
35import org.onlab.packet.IpAddress;
chengfan2fff70f2015-08-24 18:20:19 -050036import org.onosproject.cfg.ComponentConfigAdapter;
Yi Tsengfa394de2017-02-01 11:26:40 -080037import org.onosproject.core.GroupId;
Phanendra Manda972ee9e2015-08-21 19:08:20 +053038import org.onosproject.incubator.net.tunnel.DefaultTunnel;
39import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
40import org.onosproject.incubator.net.tunnel.Tunnel;
41import org.onosproject.incubator.net.tunnel.TunnelId;
42import org.onosproject.incubator.net.tunnel.TunnelName;
Priyanka B413fbe82016-05-26 11:44:45 +053043import org.onosproject.mastership.MastershipServiceAdapter;
Avantika-Huawei56c11842016-04-28 00:56:56 +053044import org.onosproject.net.Annotations;
Phanendra Manda972ee9e2015-08-21 19:08:20 +053045import org.onosproject.net.ConnectPoint;
Avantika-Huawei56c11842016-04-28 00:56:56 +053046import org.onosproject.net.DefaultAnnotations;
Phanendra Manda972ee9e2015-08-21 19:08:20 +053047import org.onosproject.net.DefaultLink;
48import org.onosproject.net.DefaultPath;
49import org.onosproject.net.IpElementId;
50import org.onosproject.net.Link;
51import org.onosproject.net.Path;
52import org.onosproject.net.PortNumber;
Priyanka B413fbe82016-05-26 11:44:45 +053053import org.onosproject.net.device.DeviceServiceAdapter;
Phanendra Manda972ee9e2015-08-21 19:08:20 +053054import org.onosproject.net.provider.ProviderId;
harikrushna-Huaweia2c7c202017-04-10 18:22:00 +053055import org.onosproject.pcep.server.ClientCapability;
56import org.onosproject.pcep.server.PccId;
Avantika-Huawei56c11842016-04-28 00:56:56 +053057import org.onosproject.pcepio.types.StatefulIPv4LspIdentifiersTlv;
Phanendra Manda972ee9e2015-08-21 19:08:20 +053058
Priyanka Bd2b28882016-04-04 16:57:04 +053059/**
60 * Test for PCEP release tunnel.
61 */
Phanendra Manda972ee9e2015-08-21 19:08:20 +053062public class PcepReleaseTunnelProviderTest {
63
Brian Stanke9a108972016-04-11 15:25:17 -040064 private static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
Priyanka Bd2b28882016-04-04 16:57:04 +053065 private PcepTunnelProvider tunnelProvider = new PcepTunnelProvider();
Phanendra Manda972ee9e2015-08-21 19:08:20 +053066 private final TunnelProviderRegistryAdapter registry = new TunnelProviderRegistryAdapter();
67 private final PcepClientControllerAdapter controller = new PcepClientControllerAdapter();
68 private final PcepControllerAdapter ctl = new PcepControllerAdapter();
69 private final PcepTunnelApiMapper pcepTunnelAPIMapper = new PcepTunnelApiMapper();
chengfan2fff70f2015-08-24 18:20:19 -050070 private final TunnelServiceAdapter tunnelService = new TunnelServiceAdapter();
Priyanka B413fbe82016-05-26 11:44:45 +053071 private final DeviceServiceAdapter deviceService = new DeviceServiceAdapter();
72 private final MastershipServiceAdapter mastershipService = new MastershipServiceAdapter();
Phanendra Manda972ee9e2015-08-21 19:08:20 +053073
Priyanka Bd2b28882016-04-04 16:57:04 +053074 @Before
75 public void setUp() throws IOException {
Phanendra Manda972ee9e2015-08-21 19:08:20 +053076 tunnelProvider.tunnelProviderRegistry = registry;
77 tunnelProvider.pcepClientController = controller;
78 tunnelProvider.controller = ctl;
Priyanka B413fbe82016-05-26 11:44:45 +053079 tunnelProvider.deviceService = deviceService;
80 tunnelProvider.mastershipService = mastershipService;
chengfan2fff70f2015-08-24 18:20:19 -050081 tunnelProvider.tunnelService = tunnelService;
Jonathan Hart51539b82015-10-29 09:53:04 -070082 tunnelProvider.pcepTunnelApiMapper = pcepTunnelAPIMapper;
chengfan2fff70f2015-08-24 18:20:19 -050083 tunnelProvider.cfgService = new ComponentConfigAdapter();
Phanendra Manda972ee9e2015-08-21 19:08:20 +053084 tunnelProvider.activate();
Priyanka Bd2b28882016-04-04 16:57:04 +053085 }
Phanendra Manda972ee9e2015-08-21 19:08:20 +053086
Priyanka Bd2b28882016-04-04 16:57:04 +053087 /**
88 * Release tunnel with negotiated capability.
89 */
90 @Test
91 public void testCasePcepReleaseTunnel() {
Phanendra Manda972ee9e2015-08-21 19:08:20 +053092 Tunnel tunnel;
93 Path path;
Avantika-Huawei56c11842016-04-28 00:56:56 +053094 List<Link> links = new ArrayList<>();
Phanendra Manda972ee9e2015-08-21 19:08:20 +053095
96 ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
97
98 IpAddress srcIp = IpAddress.valueOf(0xB6024E20);
99 IpElementId srcElementId = IpElementId.ipElement(srcIp);
100
101 IpAddress dstIp = IpAddress.valueOf(0xB6024E21);
102 IpElementId dstElementId = IpElementId.ipElement(dstIp);
103
104 IpTunnelEndPoint ipTunnelEndPointSrc;
105 ipTunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp);
106
107 IpTunnelEndPoint ipTunnelEndPointDst;
108 ipTunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(dstIp);
109
110 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
111
112 ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023));
113
Ray Milkey2693bda2016-01-22 16:08:14 -0800114 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst)
115 .type(Link.Type.DIRECT).build();
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530116 links.add(link);
117
118 path = new DefaultPath(pid, links, 20, EMPTY);
119
Avantika-Huawei56c11842016-04-28 00:56:56 +0530120 Annotations annotations = DefaultAnnotations.builder()
121 .set(LSP_SIG_TYPE, WITH_SIGNALLING.name())
122 .build();
123
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530124 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
Yi Tsengfa394de2017-02-01 11:26:40 -0800125 new GroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
Avantika-Huawei56c11842016-04-28 00:56:56 +0530126 path, annotations);
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530127
128 // for releasing tunnel tunnel should exist in db
129 PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.DELETE);
130 pcepTunnelData.setPlspId(1);
Avantika-Huawei56c11842016-04-28 00:56:56 +0530131 StatefulIPv4LspIdentifiersTlv tlv = new StatefulIPv4LspIdentifiersTlv(0, (short) 1, (short) 2, 3, 4);
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530132 pcepTunnelData.setStatefulIpv4IndentifierTlv(tlv);
Jonathan Hart51539b82015-10-29 09:53:04 -0700133 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData);
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530134
Jonathan Hart51539b82015-10-29 09:53:04 -0700135 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
Priyanka B413fbe82016-05-26 11:44:45 +0530136 controller.getClient(PccId.pccId(IpAddress.valueOf(0xB6024E20))).setCapability(
137 new ClientCapability(true, true, true, true, true));
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530138
139 tunnelProvider.releaseTunnel(tunnel);
Priyanka Bd2b28882016-04-04 16:57:04 +0530140 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530141 }
142
Priyanka Bd2b28882016-04-04 16:57:04 +0530143 /**
144 * Doesn't send initiate message because PCC doesn't supports PCInitiate and stateful capability.
145 */
146 @Test
147 public void testCasePcepReleaseTunnel2() {
148 Tunnel tunnel;
149 Path path;
Avantika-Huawei56c11842016-04-28 00:56:56 +0530150 List<Link> links = new ArrayList<>();
Priyanka Bd2b28882016-04-04 16:57:04 +0530151
152 ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
153
154 IpAddress srcIp = IpAddress.valueOf(0xB6024E22);
155 IpElementId srcElementId = IpElementId.ipElement(srcIp);
156
157 IpAddress dstIp = IpAddress.valueOf(0xB6024E21);
158 IpElementId dstElementId = IpElementId.ipElement(dstIp);
159
160 IpTunnelEndPoint ipTunnelEndPointSrc;
161 ipTunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp);
162
163 IpTunnelEndPoint ipTunnelEndPointDst;
164 ipTunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(dstIp);
165
166 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
167
168 ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023));
169
170 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst)
171 .type(Link.Type.DIRECT).build();
172 links.add(link);
173
174 path = new DefaultPath(pid, links, 20, EMPTY);
175
Avantika-Huawei56c11842016-04-28 00:56:56 +0530176 Annotations annotations = DefaultAnnotations.builder()
177 .set(LSP_SIG_TYPE, WITH_SIGNALLING.name())
178 .build();
179
Priyanka Bd2b28882016-04-04 16:57:04 +0530180 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
Yi Tsengfa394de2017-02-01 11:26:40 -0800181 new GroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
Avantika-Huawei56c11842016-04-28 00:56:56 +0530182 path, annotations);
Priyanka Bd2b28882016-04-04 16:57:04 +0530183
184 // for releasing tunnel tunnel should exist in db
185 PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.DELETE);
186 pcepTunnelData.setPlspId(1);
Avantika-Huawei56c11842016-04-28 00:56:56 +0530187 StatefulIPv4LspIdentifiersTlv tlv = new StatefulIPv4LspIdentifiersTlv(0, (short) 1, (short) 2, 3, 4);
Priyanka Bd2b28882016-04-04 16:57:04 +0530188 pcepTunnelData.setStatefulIpv4IndentifierTlv(tlv);
189 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData);
190
191 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
Priyanka B413fbe82016-05-26 11:44:45 +0530192 controller.getClient(PccId.pccId(IpAddress.valueOf(0xB6024E22))).setCapability(
193 new ClientCapability(true, false, false, true, true));
Priyanka Bd2b28882016-04-04 16:57:04 +0530194
195 tunnelProvider.releaseTunnel(tunnel);
196 assertThat(tunnelProvider.pcepTunnelApiMapper.checkFromTunnelRequestQueue(1), is(false));
197 }
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530198
Avantika-Huawei56c11842016-04-28 00:56:56 +0530199 /**
200 * Tests releasing SR based tunnel.
201 */
202 @Test
203 public void testCasePcepReleaseSrTunnel() {
204 Tunnel tunnel;
205 Path path;
206 List<Link> links = new ArrayList<>();
207
208 ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
209
210 IpAddress srcIp = IpAddress.valueOf(0xB6024E20);
211 IpElementId srcElementId = IpElementId.ipElement(srcIp);
212
213 IpAddress dstIp = IpAddress.valueOf(0xB6024E21);
214 IpElementId dstElementId = IpElementId.ipElement(dstIp);
215
216 IpTunnelEndPoint ipTunnelEndPointSrc;
217 ipTunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp);
218
219 IpTunnelEndPoint ipTunnelEndPointDst;
220 ipTunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(dstIp);
221
222 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
223
224 ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023));
225
226 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst)
227 .type(Link.Type.DIRECT).build();
228 links.add(link);
229
230 path = new DefaultPath(pid, links, 20, EMPTY);
231
232 Annotations annotations = DefaultAnnotations.builder()
233 .set(LSP_SIG_TYPE, SR_WITHOUT_SIGNALLING.name())
234 .build();
235
236 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
Yi Tsengfa394de2017-02-01 11:26:40 -0800237 new GroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
Avantika-Huawei56c11842016-04-28 00:56:56 +0530238 path, annotations);
239
240 // for releasing tunnel tunnel should exist in db
241 PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.DELETE);
242 pcepTunnelData.setPlspId(1);
243 StatefulIPv4LspIdentifiersTlv tlv = new StatefulIPv4LspIdentifiersTlv(0, (short) 1, (short) 2, 3, 4);
244 pcepTunnelData.setStatefulIpv4IndentifierTlv(tlv);
245 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData);
246
247 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
Priyanka B413fbe82016-05-26 11:44:45 +0530248 controller.getClient(PccId.pccId(IpAddress.valueOf(0xB6024E20))).setCapability(
249 new ClientCapability(true, true, true, true, true));
Avantika-Huawei56c11842016-04-28 00:56:56 +0530250
251 tunnelProvider.releaseTunnel(tunnel);
252 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
253 }
254
255 /**
256 * Tests releasing tunnel without SR and without signalling.
257 */
258 @Test
259 public void testCasePcepReleaseTunnelWithoutSigSr() {
260 Tunnel tunnel;
261 Path path;
262 List<Link> links = new ArrayList<>();
263
264 ProviderId pid = new ProviderId("pcep", PROVIDER_ID);
265
266 IpAddress srcIp = IpAddress.valueOf(0xB6024E20);
267 IpElementId srcElementId = IpElementId.ipElement(srcIp);
268
269 IpAddress dstIp = IpAddress.valueOf(0xB6024E21);
270 IpElementId dstElementId = IpElementId.ipElement(dstIp);
271
272 IpTunnelEndPoint ipTunnelEndPointSrc;
273 ipTunnelEndPointSrc = IpTunnelEndPoint.ipTunnelPoint(srcIp);
274
275 IpTunnelEndPoint ipTunnelEndPointDst;
276 ipTunnelEndPointDst = IpTunnelEndPoint.ipTunnelPoint(dstIp);
277
278 ConnectPoint src = new ConnectPoint(srcElementId, PortNumber.portNumber(10023));
279
280 ConnectPoint dst = new ConnectPoint(dstElementId, PortNumber.portNumber(10023));
281
282 Link link = DefaultLink.builder().providerId(pid).src(src).dst(dst)
283 .type(Link.Type.DIRECT).build();
284 links.add(link);
285
286 path = new DefaultPath(pid, links, 20, EMPTY);
287
288 Annotations annotations = DefaultAnnotations.builder()
289 .set(LSP_SIG_TYPE, WITHOUT_SIGNALLING_AND_WITHOUT_SR.name())
290 .build();
291
292 tunnel = new DefaultTunnel(pid, ipTunnelEndPointSrc, ipTunnelEndPointDst, Tunnel.Type.MPLS,
Yi Tsengfa394de2017-02-01 11:26:40 -0800293 new GroupId(0), TunnelId.valueOf("1"), TunnelName.tunnelName("T123"),
Avantika-Huawei56c11842016-04-28 00:56:56 +0530294 path, annotations);
295
296 // for releasing tunnel tunnel should exist in db
297 PcepTunnelData pcepTunnelData = new PcepTunnelData(tunnel, path, RequestType.DELETE);
298 pcepTunnelData.setPlspId(1);
299 StatefulIPv4LspIdentifiersTlv tlv = new StatefulIPv4LspIdentifiersTlv(0, (short) 1, (short) 2, 3, 4);
300 pcepTunnelData.setStatefulIpv4IndentifierTlv(tlv);
301 tunnelProvider.pcepTunnelApiMapper.addToTunnelIdMap(pcepTunnelData);
302
303 tunnelProvider.pcepTunnelApiMapper.handleCreateTunnelRequestQueue(1, pcepTunnelData);
Priyanka B413fbe82016-05-26 11:44:45 +0530304 controller.getClient(PccId.pccId(IpAddress.valueOf(0xB6024E20))).setCapability(
305 new ClientCapability(true, true, true, true, true));
Avantika-Huawei56c11842016-04-28 00:56:56 +0530306
307 tunnelProvider.releaseTunnel(tunnel);
308 assertThat(tunnelProvider.pcepTunnelApiMapper, not(nullValue()));
309 }
310
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530311 @After
312 public void tearDown() throws IOException {
313 tunnelProvider.deactivate();
314 tunnelProvider.controller = null;
315 tunnelProvider.pcepClientController = null;
316 tunnelProvider.tunnelProviderRegistry = null;
Priyanka B413fbe82016-05-26 11:44:45 +0530317 tunnelProvider.deviceService = null;
318 tunnelProvider.mastershipService = null;
Phanendra Manda972ee9e2015-08-21 19:08:20 +0530319 }
320}