<scope>provided</scope>
</dependency>
<!-- test scope dependencies -->
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>config-manager</artifactId>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>bgp-rib-spi</artifactId>
+ <type>test-jar</type>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.controller</groupId>
+ <artifactId>config-manager</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.yang.bgp.flowspec;
+
+import com.google.common.collect.Lists;
+import javax.management.ObjectName;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.controller.config.api.jmx.CommitStatus;
+import org.opendaylight.controller.config.manager.impl.AbstractConfigTest;
+import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver;
+import org.opendaylight.controller.config.util.ConfigTransactionJMXClient;
+import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleFactory;
+import org.opendaylight.controller.config.yang.bgp.parser.spi.SimpleBGPExtensionProviderContextModuleTest;
+import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleFactory;
+import org.opendaylight.controller.config.yang.bgp.rib.spi.RIBExtensionsImplModuleTest;
+
+/**
+ * Created by cgasparini on 18.6.2015.
+ */
+public class FlowspecModuleTest extends AbstractConfigTest {
+
+ private static final String FACTORY_NAME = FlowspecModuleFactory.NAME;
+ private static final String INSTANCE_NAME = "bgp-flowspec-impl";
+
+ @Before
+ public void setUp() {
+ super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, new FlowspecModuleFactory(),
+ new SimpleBGPExtensionProviderContextModuleFactory(), new RIBExtensionsImplModuleFactory()));
+ }
+
+ @Test
+ public void testLSTypeDefaultValue() throws Exception {
+ final CommitStatus status = createFlowspecModuleInstance();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 3, 0, 0);
+ }
+
+ @Test
+ public void testCreateBean() throws Exception {
+ final CommitStatus status = createFlowspecModuleInstance();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 3, 0, 0);
+ }
+
+ @Test
+ public void testReusingOldInstance() throws Exception {
+ createFlowspecModuleInstance();
+ final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+ assertBeanCount(1, FACTORY_NAME);
+ final CommitStatus status = transaction.commit();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 0, 0, 3);
+ }
+
+ @Test
+ public void testReconfigureInstance() throws Exception {
+ createFlowspecModuleInstance();
+ ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+ assertBeanCount(1, FACTORY_NAME);
+ CommitStatus status = transaction.commit();
+ assertBeanCount(1, FACTORY_NAME);
+ assertStatus(status, 0, 0, 3);
+ }
+
+ private CommitStatus createFlowspecModuleInstance() throws Exception {
+ final ConfigTransactionJMXClient transaction = configRegistryClient.createTransaction();
+ final ObjectName flowspecON = transaction.createModule(FACTORY_NAME, INSTANCE_NAME);
+
+ SimpleBGPExtensionProviderContextModuleTest.createBGPExtensionsModuleInstance(transaction, Lists.newArrayList(flowspecON));
+ RIBExtensionsImplModuleTest.createRIBExtensionsModuleInstance(transaction, Lists.newArrayList(flowspecON));
+ return transaction.commit();
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.protocol.bgp.linkstate;
+
+import static org.junit.Assert.assertEquals;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import org.opendaylight.protocol.bgp.linkstate.nlri.LinkstateNlriParser;
+import org.opendaylight.protocol.bgp.linkstate.nlri.NodeNlriParser;
+import org.opendaylight.protocol.bgp.parser.BGPParsingException;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.LinkstateAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.LinkstateSubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.destination.CLinkstateDestination;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.node.identifier.CRouterIdentifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.Attributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpReachNlri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.update.attributes.MpUnreachNlri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.tables.Routes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.CNextHop;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.Ipv4NextHopCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.next.hop.c.next.hop.ipv4.next.hop._case.Ipv4NextHopBuilder;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListEntryNode;
+import org.opendaylight.yangtools.yang.data.api.schema.UnkeyedListNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListEntryNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableUnkeyedListNodeBuilder;
+
+/**
+ * Created by cgasparini on 17.6.2015.
+ */
+public class LinkstateRIBSupportTest {
+
+ private static final Ipv4Address ipv4 = new Ipv4Address("42.42.42.42");
+ final LinkstateRIBSupport link = LinkstateRIBSupport.getInstance();
+ final List<MapEntryNode> linkList = new ArrayList<>();
+ private List<YangInstanceIdentifier> routes;
+
+ @Mock
+ private DOMDataWriteTransaction tx;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ routes = new ArrayList<>();
+ Mockito.doAnswer(new Answer<Object>() {
+ @Override
+ public Object answer(final InvocationOnMock invocation) throws Throwable {
+ final Object[] args = invocation.getArguments();
+ LinkstateRIBSupportTest.this.routes.add((YangInstanceIdentifier) args[1]);
+ return args[1];
+ }
+ }).when(this.tx).put(Mockito.any(LogicalDatastoreType.class), Mockito.any(YangInstanceIdentifier.class), Mockito.any(NormalizedNode.class));
+
+ Mockito.doAnswer(new Answer<Object>() {
+ @Override
+ public Object answer(final InvocationOnMock invocation) throws Throwable {
+ final Object[] args = invocation.getArguments();
+ LinkstateRIBSupportTest.this.routes.remove((YangInstanceIdentifier) args[1]);
+ return args[1];
+ }
+ }).when(this.tx).delete(Mockito.any(LogicalDatastoreType.class), Mockito.any(YangInstanceIdentifier.class));
+ }
+
+ @Test
+ public void testbuildReach() throws BGPParsingException {
+ final CNextHop hop = new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder().setGlobal(ipv4).build()).build();
+ MpReachNlri result = link.buildReach(linkList, hop);
+ assertEquals(LinkstateAddressFamily.class, result.getAfi());
+ assertEquals(LinkstateSubsequentAddressFamily.class, result.getSafi());
+ assertEquals(new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder().setGlobal(new Ipv4Address("42.42.42.42")).build()).build(), result.getCNextHop());
+ }
+
+ @Test
+ public void testBuildUnreach() {
+ final MpUnreachNlri result = link.buildUnreach(linkList);
+ assertEquals(LinkstateAddressFamily.class, result.getAfi());
+ assertEquals(LinkstateSubsequentAddressFamily.class, result.getSafi());
+ }
+
+ @Test
+ public void testDestinationRoutes() {
+ final YangInstanceIdentifier yangIdentifier = YangInstanceIdentifier.of(Routes.QNAME);
+
+ final DataContainerNodeAttrBuilder<NodeIdentifier, UnkeyedListEntryNode> linkstateBI = ImmutableUnkeyedListEntryNodeBuilder.create();
+ linkstateBI.withNodeIdentifier(new NodeIdentifier(CLinkstateDestination.QNAME));
+
+ final ImmutableLeafNodeBuilder<String> protocolId = new ImmutableLeafNodeBuilder<>();
+ protocolId.withNodeIdentifier(LinkstateNlriParser.PROTOCOL_ID_NID);
+ protocolId.withValue("isis-level2");
+ linkstateBI.addChild(protocolId.build());
+
+ final ImmutableLeafNodeBuilder<BigInteger> identifier = new ImmutableLeafNodeBuilder<>();
+ identifier.withNodeIdentifier(LinkstateNlriParser.IDENTIFIER_NID);
+ identifier.withValue(BigInteger.ONE);
+ linkstateBI.addChild(identifier.build());
+
+ final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> objectType = Builders.choiceBuilder();
+ objectType.withNodeIdentifier(LinkstateNlriParser.OBJECT_TYPE_NID);
+
+ final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> nodeDescriptors = Builders.containerBuilder();
+ nodeDescriptors.withNodeIdentifier(LinkstateNlriParser.NODE_DESCRIPTORS_NID);
+
+ final ImmutableLeafNodeBuilder<Long> asNumber = new ImmutableLeafNodeBuilder<>();
+ asNumber.withNodeIdentifier(NodeNlriParser.AS_NUMBER_NID);
+ asNumber.withValue(72L);
+ nodeDescriptors.addChild(asNumber.build());
+
+ final ImmutableLeafNodeBuilder<Long> areaID = new ImmutableLeafNodeBuilder<>();
+ areaID.withNodeIdentifier(NodeNlriParser.AREA_NID);
+ areaID.withValue(2697513L);
+ nodeDescriptors.addChild(areaID.build());
+
+ final ImmutableLeafNodeBuilder<Long> domainID = new ImmutableLeafNodeBuilder<>();
+ domainID.withNodeIdentifier(NodeNlriParser.DOMAIN_NID);
+ domainID.withValue(0x28282828L);
+ nodeDescriptors.addChild(domainID.build());
+
+ final DataContainerNodeBuilder<NodeIdentifier, ChoiceNode> crouterId = Builders.choiceBuilder();
+ crouterId.withNodeIdentifier(new NodeIdentifier(CRouterIdentifier.QNAME));
+
+ final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> isisNode = Builders.containerBuilder();
+ isisNode.withNodeIdentifier(NodeNlriParser.ISIS_PSEUDONODE_NID);
+
+ final ImmutableLeafNodeBuilder<byte[]> isoSystemID = new ImmutableLeafNodeBuilder<>();
+ isoSystemID.withNodeIdentifier(NodeNlriParser.ISO_SYSTEM_NID);
+ isoSystemID.withValue(new byte[]{0, 0, 0, 0, 0, (byte) 0x39});
+ isisNode.addChild(isoSystemID.build());
+ isisNode.addChild(Builders.leafBuilder().withNodeIdentifier(NodeNlriParser.PSN_NID).withValue((short) 5).build());
+ crouterId.addChild(isisNode.build());
+
+ nodeDescriptors.addChild(crouterId.build());
+ objectType.addChild(nodeDescriptors.build());
+ linkstateBI.addChild(objectType.build());
+
+ final UnkeyedListNode routes = ImmutableUnkeyedListNodeBuilder.create()
+ .withNodeIdentifier(new NodeIdentifier(CLinkstateDestination.QNAME))
+ .addChild(linkstateBI.build())
+ .build();
+
+ final ContainerNode destination = ImmutableContainerNodeBuilder.create().
+ addChild(routes)
+ .withNodeIdentifier(new NodeIdentifier(CLinkstateDestination.QNAME))
+ .build();
+
+ final ContainerNode attributes = ImmutableContainerNodeBuilder.create()
+ .withNodeIdentifier(new NodeIdentifier(Attributes.QNAME))
+ .build();
+
+ link.putDestinationRoutes(tx, yangIdentifier, destination, attributes);
+
+ Assert.assertEquals(1, this.routes.size());
+
+ link.deleteDestinationRoutes(tx, yangIdentifier, destination);
+
+ Assert.assertEquals(0, this.routes.size());
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.yang.pcep.spi;
+
+import static org.junit.Assert.assertEquals;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.opendaylight.protocol.pcep.spi.EROSubobjectParser;
+import org.opendaylight.protocol.pcep.spi.EROSubobjectSerializer;
+import org.opendaylight.protocol.pcep.spi.LabelParser;
+import org.opendaylight.protocol.pcep.spi.LabelSerializer;
+import org.opendaylight.protocol.pcep.spi.MessageParser;
+import org.opendaylight.protocol.pcep.spi.MessageSerializer;
+import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
+import org.opendaylight.protocol.pcep.spi.ObjectParser;
+import org.opendaylight.protocol.pcep.spi.ObjectSerializer;
+import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
+import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator;
+import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext;
+import org.opendaylight.protocol.pcep.spi.RROSubobjectParser;
+import org.opendaylight.protocol.pcep.spi.RROSubobjectSerializer;
+import org.opendaylight.protocol.pcep.spi.TlvParser;
+import org.opendaylight.protocol.pcep.spi.TlvSerializer;
+import org.opendaylight.protocol.pcep.spi.XROSubobjectParser;
+import org.opendaylight.protocol.pcep.spi.XROSubobjectSerializer;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Keepalive;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.KeepaliveBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.xro.Subobject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.xro.SubobjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.list.tlv.OfList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.list.tlv.OfListBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.EnterpriseSpecificInformation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.objects.VendorInformationObject;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vendor.information.tlvs.VendorInformationTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.IpPrefixCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.LabelType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1LabelCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.label.subobject.label.type.Type1LabelCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.IpPrefixCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.LabelCase;
+
+/**
+ * Created by cgasparini on 17.6.2015.
+ */
+public class ReusablePCEPExtensionProviderContextTest {
+
+ List<PCEPExtensionProviderContext> AuxList = new ArrayList<>();
+
+ @Mock
+ XROSubobjectParser xroParser;
+ @Mock
+ XROSubobjectSerializer xroSerializer;
+
+ @Mock
+ RROSubobjectParser rroParser;
+ @Mock
+ RROSubobjectSerializer rroSerializer;
+
+ @Mock
+ EROSubobjectParser eroParser;
+ @Mock
+ EROSubobjectSerializer eroSerializer;
+
+ @Mock
+ TlvParser tlvParser;
+ @Mock
+ TlvSerializer tlvSerializer;
+
+ @Mock
+ ObjectParser objectParser;
+ @Mock
+ ObjectSerializer objectSerializer;
+
+ @Mock
+ MessageParser msgParser;
+ @Mock
+ MessageSerializer msgSerializer;
+
+ @Mock
+ LabelParser labelParser;
+ @Mock
+ LabelSerializer labelSerializer;
+ @Mock
+ VendorInformationTlv viTlv;
+ @Mock
+ EnterpriseSpecificInformation es;
+ @Mock
+ VendorInformationObject esi;
+
+ @Before
+ public void setUp() throws PCEPDeserializerException {
+ MockitoAnnotations.initMocks(this);
+
+ Mockito.doReturn(null).when(this.xroParser).parseSubobject(Mockito.any(ByteBuf.class), Mockito.anyBoolean());
+ Mockito.doNothing().when(this.xroSerializer).serializeSubobject(Mockito.any(Subobject.class), Mockito.any(ByteBuf.class));
+
+ Mockito.doReturn(null).when(this.rroParser).parseSubobject(Mockito.any(ByteBuf.class));
+ 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));
+
+ Mockito.doReturn(null).when(this.eroParser).parseSubobject(Mockito.any(ByteBuf.class), Mockito.anyBoolean());
+ 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));
+
+ Mockito.doReturn(this.viTlv).when(this.tlvParser).parseTlv(Mockito.any(ByteBuf.class));
+ Mockito.doNothing().when(this.tlvSerializer).serializeTlv(Mockito.any(Tlv.class), Mockito.any(ByteBuf.class));
+
+ Mockito.doReturn(new OpenBuilder().build()).when(this.objectParser).parseObject(Mockito.any(ObjectHeader.class), Mockito.any(ByteBuf.class));
+ Mockito.doNothing().when(this.objectSerializer).serializeObject(Mockito.any(org.opendaylight.yang.gen.v1.urn
+ .opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object.class), Mockito.any(ByteBuf.class));
+
+ Mockito.doReturn(null).when(this.msgParser).parseMessage(Mockito.any(ByteBuf.class), Mockito.any(List.class));
+ Mockito.doNothing().when(this.msgSerializer).serializeMessage(Mockito.any(Message.class), Mockito.any(ByteBuf.class));
+
+ Mockito.doReturn(null).when(this.labelParser).parseLabel(Mockito.any(ByteBuf.class));
+ Mockito.doNothing().when(this.labelSerializer).serializeLabel(Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.any(LabelType.class), Mockito.any(ByteBuf.class));
+
+ Mockito.doReturn(this.es).when(this.esi).getEnterpriseSpecificInformation();
+
+ Mockito.doReturn(EnterpriseSpecificInformation.class).when(this.es).getImplementedInterface();
+
+ Mockito.doReturn(this.es).when(this.viTlv).getEnterpriseSpecificInformation();
+
+ Mockito.doReturn(EnterpriseSpecificInformation.class).when(this.es).getImplementedInterface();
+ }
+
+ @Test
+ public void testReusablePCEPExtensionProviderContext() throws PCEPDeserializerException {
+ List<PCEPExtensionProviderActivator> list = new ArrayList<>();
+ list.add(new simplePCEPExtensionProviderActivator());
+ list.add(new simplePCEPExtensionProviderActivator());
+
+
+ ReusablePCEPExtensionProviderContext ctx = new ReusablePCEPExtensionProviderContext();
+ ctx.start(list);
+
+ assertEquals(2, AuxList.size());
+
+ final List<PCEPExtensionProviderActivator> listReconf = new ArrayList<>();
+ listReconf.add(new simplePCEPExtensionProviderActivator());
+ listReconf.add(new simplePCEPExtensionProviderActivator());
+ listReconf.add(new simplePCEPExtensionProviderActivator());
+ listReconf.add(new simplePCEPExtensionProviderActivator());
+ ctx.reconfigure(listReconf);
+ assertEquals(4, AuxList.size());
+
+ ctx.registerLabelParser(1, this.labelParser);
+ ctx.registerLabelSerializer(Type1LabelCase.class, this.labelSerializer);
+
+ ctx.registerEROSubobjectParser(2, this.eroParser);
+ ctx.registerEROSubobjectSerializer(IpPrefixCase.class, this.eroSerializer);
+
+ ctx.registerMessageParser(6, this.msgParser);
+ ctx.registerMessageSerializer(Keepalive.class, this.msgSerializer);
+
+ ctx.registerObjectParser(5, 1, this.objectParser);
+ ctx.registerObjectSerializer(Rp.class, this.objectSerializer);
+
+ ctx.registerRROSubobjectParser(3, this.rroParser);
+ ctx.registerRROSubobjectSerializer(LabelCase.class, this.rroSerializer);
+
+ ctx.registerTlvParser(1, this.tlvParser);
+ ctx.registerTlvSerializer(OfList.class, this.tlvSerializer);
+
+ ctx.registerXROSubobjectParser(2, this.xroParser);
+ ctx.registerXROSubobjectSerializer(AsNumberCase.class, this.xroSerializer);
+
+ ctx.registerVendorInformationTlvSerializer(EnterpriseSpecificInformation.class, this.tlvSerializer);
+ ctx.registerVendorInformationTlvParser(new EnterpriseNumber(12L), this.tlvParser);
+
+ ctx.registerVendorInformationObjectParser(new EnterpriseNumber(10L), this.objectParser);
+ ctx.registerVendorInformationObjectSerializer(EnterpriseSpecificInformation.class, this.objectSerializer);
+
+ final ByteBuf buffer = Unpooled.buffer();
+ ctx.getEROSubobjectHandlerRegistry().parseSubobject(3, buffer, true);
+
+ ctx.getEROSubobjectHandlerRegistry().serializeSubobject(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.
+ SubobjectBuilder().setSubobjectType(new AsNumberCaseBuilder().build()).build(), buffer);
+
+ ctx.getLabelHandlerRegistry().parseLabel(1, buffer);
+ ctx.getLabelHandlerRegistry().serializeLabel(true, false, new Type1LabelCaseBuilder().build(), buffer);
+
+ ctx.getMessageHandlerRegistry().parseMessage(6, buffer, Collections.<Message>emptyList());
+ ctx.getMessageHandlerRegistry().serializeMessage(new KeepaliveBuilder().build(), buffer);
+
+ ctx.getObjectHandlerRegistry().parseObject(4, 1, new ObjectHeaderImpl(true, false), buffer);
+ ctx.getObjectHandlerRegistry().serializeObject(new OpenBuilder().build(), buffer);
+
+ ctx.getRROSubobjectHandlerRegistry().parseSubobject(4, buffer);
+ 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);
+
+ ctx.getTlvHandlerRegistry().parseTlv(2, buffer);
+ ctx.getTlvHandlerRegistry().serializeTlv(new OfListBuilder().build(), buffer);
+
+ ctx.getVendorInformationObjectRegistry().parseVendorInformationObject(new EnterpriseNumber(10L), new ObjectHeaderImpl(true, false), buffer);
+ ctx.getVendorInformationObjectRegistry().serializeVendorInformationObject(this.esi, buffer);
+
+ ctx.getVendorInformationTlvRegistry().parseVendorInformationTlv(new EnterpriseNumber(12L), buffer);
+ ctx.getVendorInformationTlvRegistry().serializeVendorInformationTlv(this.viTlv, buffer);
+
+ ctx.getXROSubobjectHandlerRegistry().parseSubobject(2, buffer, false);
+ ctx.getXROSubobjectHandlerRegistry().serializeSubobject(new SubobjectBuilder().setSubobjectType(new AsNumberCaseBuilder().build()).build(), buffer);
+
+ ctx.close();
+ assertEquals(0, AuxList.size());
+ }
+
+ class simplePCEPExtensionProviderActivator implements PCEPExtensionProviderActivator {
+ @Override
+ public void start(final PCEPExtensionProviderContext context) {
+ AuxList.add(context);
+ }
+
+ @Override
+ public void stop() {
+ AuxList.remove(AuxList.size() - 1);
+ }
+ }
+}
\ No newline at end of file