2 * Copyright (c) 2015 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
8 package org.opendaylight.controller.config.yang.pcep.spi;
10 import static org.junit.Assert.assertEquals;
11 import io.netty.buffer.ByteBuf;
12 import io.netty.buffer.Unpooled;
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.List;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.mockito.Mock;
19 import org.mockito.Mockito;
20 import org.mockito.MockitoAnnotations;
21 import org.opendaylight.protocol.pcep.spi.EROSubobjectParser;
22 import org.opendaylight.protocol.pcep.spi.EROSubobjectSerializer;
23 import org.opendaylight.protocol.pcep.spi.LabelParser;
24 import org.opendaylight.protocol.pcep.spi.LabelSerializer;
25 import org.opendaylight.protocol.pcep.spi.MessageParser;
26 import org.opendaylight.protocol.pcep.spi.MessageSerializer;
27 import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
28 import org.opendaylight.protocol.pcep.spi.ObjectParser;
29 import org.opendaylight.protocol.pcep.spi.ObjectSerializer;
30 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
31 import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator;
32 import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext;
33 import org.opendaylight.protocol.pcep.spi.RROSubobjectParser;
34 import org.opendaylight.protocol.pcep.spi.RROSubobjectSerializer;
35 import org.opendaylight.protocol.pcep.spi.TlvParser;
36 import org.opendaylight.protocol.pcep.spi.TlvSerializer;
37 import org.opendaylight.protocol.pcep.spi.XROSubobjectParser;
38 import org.opendaylight.protocol.pcep.spi.XROSubobjectSerializer;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Keepalive;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.KeepaliveBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.xro.Subobject;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.xro.SubobjectBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.list.tlv.OfList;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.list.tlv.OfListBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.EnterpriseSpecificInformation;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.objects.VendorInformationObject;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.tlvs.VendorInformationTlv;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.IpPrefixCase;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1LabelCase;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1LabelCaseBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.IpPrefixCaseBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.LabelCase;
64 * Created by cgasparini on 17.6.2015.
66 public class ReusablePCEPExtensionProviderContextTest {
68 List<PCEPExtensionProviderContext> AuxList = new ArrayList<>();
71 XROSubobjectParser xroParser;
73 XROSubobjectSerializer xroSerializer;
76 RROSubobjectParser rroParser;
78 RROSubobjectSerializer rroSerializer;
81 EROSubobjectParser eroParser;
83 EROSubobjectSerializer eroSerializer;
88 TlvSerializer tlvSerializer;
91 ObjectParser objectParser;
93 ObjectSerializer objectSerializer;
96 MessageParser msgParser;
98 MessageSerializer msgSerializer;
101 LabelParser labelParser;
103 LabelSerializer labelSerializer;
105 VendorInformationTlv viTlv;
107 EnterpriseSpecificInformation es;
109 VendorInformationObject esi;
112 public void setUp() throws PCEPDeserializerException {
113 MockitoAnnotations.initMocks(this);
115 Mockito.doReturn(null).when(this.xroParser).parseSubobject(Mockito.any(ByteBuf.class), Mockito.anyBoolean());
116 Mockito.doNothing().when(this.xroSerializer).serializeSubobject(Mockito.any(Subobject.class), Mockito.any(ByteBuf.class));
118 Mockito.doReturn(null).when(this.rroParser).parseSubobject(Mockito.any(ByteBuf.class));
119 Mockito.doNothing().when(this.rroSerializer).serializeSubobject(Mockito.any(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.Subobject.class), Mockito.any(ByteBuf.class));
121 Mockito.doReturn(null).when(this.eroParser).parseSubobject(Mockito.any(ByteBuf.class), Mockito.anyBoolean());
122 Mockito.doNothing().when(this.eroSerializer).serializeSubobject(Mockito.any(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobject.class), Mockito.any(ByteBuf.class));
124 Mockito.doReturn(this.viTlv).when(this.tlvParser).parseTlv(Mockito.any(ByteBuf.class));
125 Mockito.doNothing().when(this.tlvSerializer).serializeTlv(Mockito.any(Tlv.class), Mockito.any(ByteBuf.class));
127 Mockito.doReturn(new OpenBuilder().build()).when(this.objectParser).parseObject(Mockito.any(ObjectHeader.class), Mockito.any(ByteBuf.class));
128 Mockito.doNothing().when(this.objectSerializer).serializeObject(Mockito.any(org.opendaylight.yang.gen.v1.urn
129 .opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object.class), Mockito.any(ByteBuf.class));
131 Mockito.doReturn(null).when(this.msgParser).parseMessage(Mockito.any(ByteBuf.class), Mockito.any(List.class));
132 Mockito.doNothing().when(this.msgSerializer).serializeMessage(Mockito.any(Message.class), Mockito.any(ByteBuf.class));
134 Mockito.doReturn(null).when(this.labelParser).parseLabel(Mockito.any(ByteBuf.class));
135 Mockito.doNothing().when(this.labelSerializer).serializeLabel(Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.any(LabelType.class), Mockito.any(ByteBuf.class));
137 Mockito.doReturn(this.es).when(this.esi).getEnterpriseSpecificInformation();
139 Mockito.doReturn(EnterpriseSpecificInformation.class).when(this.es).getImplementedInterface();
141 Mockito.doReturn(this.es).when(this.viTlv).getEnterpriseSpecificInformation();
143 Mockito.doReturn(EnterpriseSpecificInformation.class).when(this.es).getImplementedInterface();
147 public void testReusablePCEPExtensionProviderContext() throws PCEPDeserializerException {
148 List<PCEPExtensionProviderActivator> list = new ArrayList<>();
149 list.add(new simplePCEPExtensionProviderActivator());
150 list.add(new simplePCEPExtensionProviderActivator());
153 ReusablePCEPExtensionProviderContext ctx = new ReusablePCEPExtensionProviderContext();
156 assertEquals(2, AuxList.size());
158 final List<PCEPExtensionProviderActivator> listReconf = new ArrayList<>();
159 listReconf.add(new simplePCEPExtensionProviderActivator());
160 listReconf.add(new simplePCEPExtensionProviderActivator());
161 listReconf.add(new simplePCEPExtensionProviderActivator());
162 listReconf.add(new simplePCEPExtensionProviderActivator());
163 ctx.reconfigure(listReconf);
164 assertEquals(4, AuxList.size());
166 ctx.registerLabelParser(1, this.labelParser);
167 ctx.registerLabelSerializer(Type1LabelCase.class, this.labelSerializer);
169 ctx.registerEROSubobjectParser(2, this.eroParser);
170 ctx.registerEROSubobjectSerializer(IpPrefixCase.class, this.eroSerializer);
172 ctx.registerMessageParser(6, this.msgParser);
173 ctx.registerMessageSerializer(Keepalive.class, this.msgSerializer);
175 ctx.registerObjectParser(5, 1, this.objectParser);
176 ctx.registerObjectSerializer(Rp.class, this.objectSerializer);
178 ctx.registerRROSubobjectParser(3, this.rroParser);
179 ctx.registerRROSubobjectSerializer(LabelCase.class, this.rroSerializer);
181 ctx.registerTlvParser(1, this.tlvParser);
182 ctx.registerTlvSerializer(OfList.class, this.tlvSerializer);
184 ctx.registerXROSubobjectParser(2, this.xroParser);
185 ctx.registerXROSubobjectSerializer(AsNumberCase.class, this.xroSerializer);
187 ctx.registerVendorInformationTlvSerializer(EnterpriseSpecificInformation.class, this.tlvSerializer);
188 ctx.registerVendorInformationTlvParser(new EnterpriseNumber(12L), this.tlvParser);
190 ctx.registerVendorInformationObjectParser(new EnterpriseNumber(10L), this.objectParser);
191 ctx.registerVendorInformationObjectSerializer(EnterpriseSpecificInformation.class, this.objectSerializer);
193 final ByteBuf buffer = Unpooled.buffer();
194 ctx.getEROSubobjectHandlerRegistry().parseSubobject(3, buffer, true);
196 ctx.getEROSubobjectHandlerRegistry().serializeSubobject(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.
197 SubobjectBuilder().setSubobjectType(new AsNumberCaseBuilder().build()).build(), buffer);
199 ctx.getLabelHandlerRegistry().parseLabel(1, buffer);
200 ctx.getLabelHandlerRegistry().serializeLabel(true, false, new Type1LabelCaseBuilder().build(), buffer);
202 ctx.getMessageHandlerRegistry().parseMessage(6, buffer, Collections.<Message>emptyList());
203 ctx.getMessageHandlerRegistry().serializeMessage(new KeepaliveBuilder().build(), buffer);
205 ctx.getObjectHandlerRegistry().parseObject(4, 1, new ObjectHeaderImpl(true, false), buffer);
206 ctx.getObjectHandlerRegistry().serializeObject(new OpenBuilder().build(), buffer);
208 ctx.getRROSubobjectHandlerRegistry().parseSubobject(4, buffer);
209 ctx.getRROSubobjectHandlerRegistry().serializeSubobject(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectBuilder().setSubobjectType(new IpPrefixCaseBuilder().build()).build(), buffer);
211 ctx.getTlvHandlerRegistry().parseTlv(2, buffer);
212 ctx.getTlvHandlerRegistry().serializeTlv(new OfListBuilder().build(), buffer);
214 ctx.getVendorInformationObjectRegistry().parseVendorInformationObject(new EnterpriseNumber(10L), new ObjectHeaderImpl(true, false), buffer);
215 ctx.getVendorInformationObjectRegistry().serializeVendorInformationObject(this.esi, buffer);
217 ctx.getVendorInformationTlvRegistry().parseVendorInformationTlv(new EnterpriseNumber(12L), buffer);
218 ctx.getVendorInformationTlvRegistry().serializeVendorInformationTlv(this.viTlv, buffer);
220 ctx.getXROSubobjectHandlerRegistry().parseSubobject(2, buffer, false);
221 ctx.getXROSubobjectHandlerRegistry().serializeSubobject(new SubobjectBuilder().setSubobjectType(new AsNumberCaseBuilder().build()).build(), buffer);
224 assertEquals(0, AuxList.size());
227 class simplePCEPExtensionProviderActivator implements PCEPExtensionProviderActivator {
229 public void start(final PCEPExtensionProviderContext context) {
230 AuxList.add(context);
235 AuxList.remove(AuxList.size() - 1);