Code clean up
[bgpcep.git] / pcep / pcc-mock / src / test / java / org / opendaylight / protocol / pcep / pcc / mock / PCCSessionListenerTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.protocol.pcep.pcc.mock;
10
11 import com.google.common.collect.Lists;
12 import java.util.List;
13 import org.junit.After;
14 import org.junit.Assert;
15 import org.junit.Before;
16 import org.junit.Test;
17 import org.mockito.Mock;
18 import org.mockito.Mockito;
19 import org.mockito.MockitoAnnotations;
20 import org.mockito.invocation.InvocationOnMock;
21 import org.mockito.stubbing.Answer;
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;
54
55 public class PCCSessionListenerTest {
56
57     @Mock
58     private PCEPSession mockedSession;
59
60     @Mock
61     private PCCTunnelManager tunnelManager;
62
63     private final List<Message> sendMessages = Lists.newArrayList();
64
65     @Before
66     public void setup() {
67         MockitoAnnotations.initMocks(this);
68         Mockito.doAnswer(new Answer<Void>() {
69             @Override
70             public Void answer(final InvocationOnMock invocation) throws Throwable {
71                 PCCSessionListenerTest.this.sendMessages.add((Message) invocation.getArguments()[0]);
72                 return null;
73             }
74         }).when(mockedSession).sendMessage(Mockito.any(Message.class));
75     }
76
77     @After
78     public void cleanup() {
79         this.sendMessages.clear();
80     }
81
82     @Test
83     public void testOnMessage() {
84         final PCCSessionListener listener = new PCCSessionListener(1, tunnelManager, false);
85         listener.onMessage(mockedSession, createUpdMsg(true));
86         Mockito.verify(tunnelManager).onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
87         Mockito.verify(tunnelManager, Mockito.never()).onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
88         listener.onMessage(mockedSession, createUpdMsg(false));
89         Mockito.verify(tunnelManager, Mockito.times(2)).onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
90         Mockito.verify(tunnelManager, Mockito.never()).onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
91
92         listener.onMessage(mockedSession, createInitMsg(false, true));
93         Mockito.verify(tunnelManager, Mockito.times(2)).onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
94         Mockito.verify(tunnelManager).onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
95         listener.onMessage(mockedSession, createInitMsg(true, false));
96         Mockito.verify(tunnelManager, Mockito.times(2)).onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
97         Mockito.verify(tunnelManager, Mockito.times(2)).onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
98         listener.onMessage(mockedSession, createInitMsg(false, false));
99         Mockito.verify(tunnelManager, Mockito.times(2)).onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
100         Mockito.verify(tunnelManager, Mockito.times(3)).onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
101     }
102
103     @Test
104     public void testOnMessageErrorMode() {
105         final PCCSessionListener listener = new PCCSessionListener(1, tunnelManager, true);
106         listener.onMessage(mockedSession, createUpdMsg(true));
107         Mockito.verify(mockedSession).sendMessage(Mockito.any(Message.class));
108     }
109
110     @Test
111     public void testOnSessionUp() {
112         final PCCSessionListener listener = new PCCSessionListener(1, tunnelManager, false);
113         listener.onSessionUp(mockedSession);
114         Mockito.verify(tunnelManager).onSessionUp(Mockito.any(PCCSession.class));
115     }
116
117     @Test
118     public void testOnSessionDown() {
119         final PCCSessionListener listener = new PCCSessionListener(1, tunnelManager, false);
120         listener.onSessionDown(mockedSession, new Exception());
121         Mockito.verify(tunnelManager).onSessionDown(Mockito.any(PCCSession.class));
122     }
123
124     @Test
125     public void testSendError() {
126         final PCCSessionListener listener = new PCCSessionListener(1, tunnelManager, false);
127         listener.onSessionUp(mockedSession);
128         listener.sendError(MsgBuilderUtil.createErrorMsg(PCEPErrors.ATTEMPT_2ND_SESSION, 0));
129         Mockito.verify(mockedSession).sendMessage(Mockito.any());
130     }
131
132     @Test
133     public void testSendReport() {
134         final PCCSessionListener listener = new PCCSessionListener(1, tunnelManager, false);
135         listener.onSessionUp(mockedSession);
136         listener.sendReport(null);
137         Mockito.verify(mockedSession).sendMessage(Mockito.any());
138     }
139
140     @Test
141     public void testGetId() {
142         final PCCSessionListener listener = new PCCSessionListener(1, tunnelManager, false);
143         Assert.assertEquals(1, listener.getId());
144     }
145
146     private static PcinitiateMessage createInitMsg(final boolean remove, final boolean endpoint) {
147         // lsp with "unknown" plsp-id
148         final LspBuilder lspBuilder = new LspBuilder()
149             .setAdministrative(true)
150             .setDelegate(true)
151             .setIgnore(false)
152             .setOperational(OperationalStatus.Up)
153             .setPlspId(new PlspId(999L))
154             .setProcessingRule(false)
155             .setRemove(remove)
156             .setSync(true);
157
158         final List<Requests> requests = Lists.newArrayList();
159         final RequestsBuilder reqBuilder = new RequestsBuilder()
160             .setLsp(lspBuilder.build())
161             .setSrp(new SrpBuilder(MsgBuilderUtil.createSrp(123)).addAugmentation(Srp1.class, new Srp1Builder().setRemove(remove).build()).build());
162         if (endpoint) {
163             reqBuilder.setEndpointsObj(new EndpointsObjBuilder().build());
164         }
165         requests.add(reqBuilder.build());
166
167         final PcinitiateMessageBuilder initBuilder = new PcinitiateMessageBuilder().setRequests(requests);
168         return new PcinitiateBuilder().setPcinitiateMessage(initBuilder.build()).build();
169     }
170
171     private static Pcupd createUpdMsg(final boolean delegation) {
172         final PcupdMessageBuilder msgBuilder = new PcupdMessageBuilder();
173         final UpdatesBuilder updsBuilder = new UpdatesBuilder();
174         updsBuilder.setLsp(new LspBuilder().setDelegate(delegation).setPlspId(new PlspId(1L)).build());
175         final PathBuilder pathBuilder = new PathBuilder();
176         pathBuilder.setEro(
177                 new EroBuilder()
178                     .setSubobject(Lists.newArrayList(new SubobjectBuilder().setSubobjectType(new IpPrefixCaseBuilder().setIpPrefix(
179                         new IpPrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix("127.0.0.2/32"))).build()).build()).build())).build());
180         updsBuilder.setPath(pathBuilder.build());
181         updsBuilder.setSrp(new SrpBuilder().setOperationId(new SrpIdNumber(0L)).build());
182         msgBuilder.setUpdates(Lists.newArrayList(updsBuilder.build()));
183         return new PcupdBuilder().setPcupdMessage(msgBuilder.build()).build();
184     }
185 }