2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.protocol.pcep.pcc.mock;
11 import static org.mockito.Mockito.verify;
13 import com.google.common.collect.Lists;
14 import java.util.List;
15 import org.junit.After;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.mockito.Mock;
20 import org.mockito.Mockito;
21 import org.mockito.MockitoAnnotations;
22 import org.opendaylight.protocol.pcep.PCEPSession;
23 import org.opendaylight.protocol.pcep.pcc.mock.api.PCCSession;
24 import org.opendaylight.protocol.pcep.pcc.mock.api.PCCTunnelManager;
25 import org.opendaylight.protocol.pcep.pcc.mock.protocol.PCCSessionListener;
26 import org.opendaylight.protocol.pcep.pcc.mock.spi.MsgBuilderUtil;
27 import org.opendaylight.protocol.pcep.spi.PCEPErrors;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateMessage;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.PcinitiateMessageBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.Requests;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.RequestsBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Pcupd;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcupdBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.PcupdMessageBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.Updates;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.UpdatesBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.updates.PathBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObjBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.IpPrefixCaseBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.ip.prefix._case.IpPrefixBuilder;
55 public class PCCSessionListenerTest {
58 private PCEPSession mockedSession;
61 private PCCTunnelManager tunnelManager;
63 private final List<Message> sendMessages = Lists.newArrayList();
67 MockitoAnnotations.initMocks(this);
68 Mockito.doAnswer(invocation -> {
69 PCCSessionListenerTest.this.sendMessages.add((Message) invocation.getArguments()[0]);
71 }).when(this.mockedSession).sendMessage(Mockito.any(Message.class));
75 public void cleanup() {
76 this.sendMessages.clear();
80 public void testOnMessage() {
81 final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
82 listener.onMessage(this.mockedSession, createUpdMsg(true));
83 verify(this.tunnelManager).onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
84 verify(this.tunnelManager, Mockito.never())
85 .onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
86 listener.onMessage(this.mockedSession, createUpdMsg(false));
87 verify(this.tunnelManager, Mockito.times(2))
88 .onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
89 verify(this.tunnelManager, Mockito.never())
90 .onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
91 listener.onMessage(this.mockedSession, createInitMsg(false, true));
92 verify(this.tunnelManager, Mockito.times(2))
93 .onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
94 verify(this.tunnelManager).onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
95 listener.onMessage(this.mockedSession, createInitMsg(true, false));
96 verify(this.tunnelManager, Mockito.times(2))
97 .onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
98 verify(this.tunnelManager, Mockito.times(2))
99 .onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
100 listener.onMessage(this.mockedSession, createInitMsg(false, false));
101 verify(this.tunnelManager, Mockito.times(2))
102 .onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
103 verify(this.tunnelManager, Mockito.times(3))
104 .onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
108 public void testOnMessageErrorMode() {
109 final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, true);
110 listener.onMessage(this.mockedSession, createUpdMsg(true));
111 verify(this.mockedSession).sendMessage(Mockito.any(Message.class));
115 public void testOnSessionUp() {
116 final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
117 listener.onSessionUp(this.mockedSession);
118 verify(this.tunnelManager).onSessionUp(Mockito.any(PCCSession.class));
122 public void testOnSessionDown() {
123 final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
124 listener.onSessionDown(this.mockedSession, new Exception());
125 verify(this.tunnelManager).onSessionDown(Mockito.any(PCCSession.class));
129 public void testSendError() {
130 final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
131 listener.onSessionUp(this.mockedSession);
132 listener.sendError(MsgBuilderUtil.createErrorMsg(PCEPErrors.ATTEMPT_2ND_SESSION, 0));
133 verify(this.mockedSession).sendMessage(Mockito.any());
137 public void testSendReport() {
138 final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
139 listener.onSessionUp(this.mockedSession);
140 listener.sendReport(null);
141 verify(this.mockedSession).sendMessage(Mockito.any());
145 public void testGetId() {
146 final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
147 Assert.assertEquals(1, listener.getId());
150 private static PcinitiateMessage createInitMsg(final boolean remove, final boolean endpoint) {
151 // lsp with "unknown" plsp-id
152 final LspBuilder lspBuilder = new LspBuilder()
153 .setAdministrative(true)
156 .setOperational(OperationalStatus.Up)
157 .setPlspId(new PlspId(999L))
158 .setProcessingRule(false)
162 final List<Requests> requests = Lists.newArrayList();
163 final RequestsBuilder reqBuilder = new RequestsBuilder()
164 .setLsp(lspBuilder.build())
165 .setSrp(new SrpBuilder(MsgBuilderUtil.createSrp(123)).addAugmentation(Srp1.class,
166 new Srp1Builder().setRemove(remove).build()).build());
168 reqBuilder.setEndpointsObj(new EndpointsObjBuilder().build());
170 requests.add(reqBuilder.build());
172 final PcinitiateMessageBuilder initBuilder = new PcinitiateMessageBuilder().setRequests(requests);
173 return new PcinitiateBuilder().setPcinitiateMessage(initBuilder.build()).build();
176 private static Pcupd createUpdMsg(final boolean delegation) {
177 final PcupdMessageBuilder msgBuilder = new PcupdMessageBuilder();
178 final UpdatesBuilder updsBuilder = new UpdatesBuilder();
179 updsBuilder.setLsp(new LspBuilder().setDelegate(delegation).setPlspId(new PlspId(1L)).build());
180 final PathBuilder pathBuilder = new PathBuilder();
181 pathBuilder.setEro(new EroBuilder().setSubobject(Lists.newArrayList(new SubobjectBuilder()
182 .setSubobjectType(new IpPrefixCaseBuilder().setIpPrefix(new IpPrefixBuilder()
183 .setIpPrefix(new IpPrefix(new Ipv4Prefix("127.0.0.2/32"))).build()).build()).build())).build());
184 updsBuilder.setPath(pathBuilder.build());
185 updsBuilder.setSrp(new SrpBuilder().setOperationId(new SrpIdNumber(0L)).build());
186 msgBuilder.setUpdates(Lists.newArrayList(updsBuilder.build()));
187 return new PcupdBuilder().setPcupdMessage(msgBuilder.build()).build();