Further migration of test code from legacy setters
[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 package org.opendaylight.protocol.pcep.pcc.mock;
9
10 import static org.mockito.Mockito.verify;
11
12 import java.util.ArrayList;
13 import java.util.Collections;
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.rev181109.PcinitiateBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.PcinitiateMessage;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Srp1;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Srp1Builder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.pcinitiate.message.PcinitiateMessageBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.pcinitiate.message.pcinitiate.message.Requests;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.pcinitiate.message.pcinitiate.message.RequestsBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.OperationalStatus;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Pcupd;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcupdBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PlspId;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.SrpIdNumber;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.LspBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcupd.message.PcupdMessageBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcupd.message.pcupd.message.Updates;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcupd.message.pcupd.message.UpdatesBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcupd.message.pcupd.message.updates.PathBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.SrpBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Message;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.object.EndpointsObjBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.EroBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.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 import org.opendaylight.yangtools.yang.common.Uint32;
55
56 public class PCCSessionListenerTest {
57
58     @Mock
59     private PCEPSession mockedSession;
60
61     @Mock
62     private PCCTunnelManager tunnelManager;
63
64     private final List<Message> sendMessages = new ArrayList<>();
65
66     @Before
67     public void setup() {
68         MockitoAnnotations.initMocks(this);
69         Mockito.doAnswer(invocation -> {
70             PCCSessionListenerTest.this.sendMessages.add((Message) invocation.getArguments()[0]);
71             return null;
72         }).when(this.mockedSession).sendMessage(Mockito.any(Message.class));
73     }
74
75     @After
76     public void cleanup() {
77         this.sendMessages.clear();
78     }
79
80     @Test
81     public void testOnMessage() {
82         final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
83         listener.onMessage(this.mockedSession, createUpdMsg(true));
84         verify(this.tunnelManager).onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
85         verify(this.tunnelManager, Mockito.never())
86             .onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
87         listener.onMessage(this.mockedSession, createUpdMsg(false));
88         verify(this.tunnelManager, Mockito.times(2))
89             .onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
90         verify(this.tunnelManager, Mockito.never())
91             .onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
92         listener.onMessage(this.mockedSession, createInitMsg(false, true));
93         verify(this.tunnelManager, Mockito.times(2))
94             .onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
95         verify(this.tunnelManager).onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
96         listener.onMessage(this.mockedSession, createInitMsg(true, false));
97         verify(this.tunnelManager, Mockito.times(2))
98             .onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
99         verify(this.tunnelManager, Mockito.times(2))
100             .onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
101         listener.onMessage(this.mockedSession, createInitMsg(false, false));
102         verify(this.tunnelManager, Mockito.times(2))
103             .onMessagePcupd(Mockito.any(Updates.class), Mockito.any(PCCSession.class));
104         verify(this.tunnelManager, Mockito.times(3))
105             .onMessagePcInitiate(Mockito.any(Requests.class), Mockito.any(PCCSession.class));
106     }
107
108     @Test
109     public void testOnMessageErrorMode() {
110         final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, true);
111         listener.onMessage(this.mockedSession, createUpdMsg(true));
112         verify(this.mockedSession).sendMessage(Mockito.any(Message.class));
113     }
114
115     @Test
116     public void testOnSessionUp() {
117         final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
118         listener.onSessionUp(this.mockedSession);
119         verify(this.tunnelManager).onSessionUp(Mockito.any(PCCSession.class));
120     }
121
122     @Test
123     public void testOnSessionDown() {
124         final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
125         listener.onSessionDown(this.mockedSession, new Exception());
126         verify(this.tunnelManager).onSessionDown(Mockito.any(PCCSession.class));
127     }
128
129     @Test
130     public void testSendError() {
131         final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
132         listener.onSessionUp(this.mockedSession);
133         listener.sendError(MsgBuilderUtil.createErrorMsg(PCEPErrors.ATTEMPT_2ND_SESSION, Uint32.ZERO));
134         verify(this.mockedSession).sendMessage(Mockito.any());
135     }
136
137     @Test
138     public void testSendReport() {
139         final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
140         listener.onSessionUp(this.mockedSession);
141         listener.sendReport(null);
142         verify(this.mockedSession).sendMessage(Mockito.any());
143     }
144
145     @Test
146     public void testGetId() {
147         final PCCSessionListener listener = new PCCSessionListener(1, this.tunnelManager, false);
148         Assert.assertEquals(1, listener.getId());
149     }
150
151     private static PcinitiateMessage createInitMsg(final boolean remove, final boolean endpoint) {
152         // lsp with "unknown" plsp-id
153         final LspBuilder lspBuilder = new LspBuilder()
154             .setAdministrative(true)
155             .setDelegate(true)
156             .setIgnore(false)
157             .setOperational(OperationalStatus.Up)
158             .setPlspId(new PlspId(Uint32.valueOf(999)))
159             .setProcessingRule(false)
160             .setRemove(remove)
161             .setSync(true);
162
163         final List<Requests> requests = new ArrayList<>();
164         final RequestsBuilder reqBuilder = new RequestsBuilder()
165             .setLsp(lspBuilder.build())
166             .setSrp(new SrpBuilder(MsgBuilderUtil.createSrp(Uint32.valueOf(123))).addAugmentation(Srp1.class,
167                 new Srp1Builder().setRemove(remove).build()).build());
168         if (endpoint) {
169             reqBuilder.setEndpointsObj(new EndpointsObjBuilder().build());
170         }
171         requests.add(reqBuilder.build());
172
173         final PcinitiateMessageBuilder initBuilder = new PcinitiateMessageBuilder().setRequests(requests);
174         return new PcinitiateBuilder().setPcinitiateMessage(initBuilder.build()).build();
175     }
176
177     private static Pcupd createUpdMsg(final boolean delegation) {
178         final PcupdMessageBuilder msgBuilder = new PcupdMessageBuilder();
179         final UpdatesBuilder updsBuilder = new UpdatesBuilder();
180         updsBuilder.setLsp(new LspBuilder().setDelegate(delegation).setPlspId(new PlspId(Uint32.ONE)).build());
181         final PathBuilder pathBuilder = new PathBuilder();
182         pathBuilder.setEro(new EroBuilder().setSubobject(Collections.singletonList(new SubobjectBuilder()
183             .setSubobjectType(new IpPrefixCaseBuilder().setIpPrefix(new IpPrefixBuilder()
184                 .setIpPrefix(new IpPrefix(new Ipv4Prefix("127.0.0.2/32"))).build()).build()).build())).build());
185         updsBuilder.setPath(pathBuilder.build());
186         updsBuilder.setSrp(new SrpBuilder().setOperationId(new SrpIdNumber(Uint32.ZERO)).build());
187         msgBuilder.setUpdates(Collections.singletonList(updsBuilder.build()));
188         return new PcupdBuilder().setPcupdMessage(msgBuilder.build()).build();
189     }
190 }