From 9ec20c767cbcd1331fec383f6a1c4417011cc239 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 30 Jun 2021 11:07:12 +0200 Subject: [PATCH] Migrate pcep-spi to OSGi DS This is a simple whiteboard, refactor it to use OSGi DS (and others). The changes here cascade through all extensions, making them properly stateless. JIRA: BGPCEP-961 Change-Id: I1e8f253f2ea7a2eef494c84612a867b6318a93c6 Signed-off-by: Robert Varga --- .../auto/bandwidth/extension/Activator.java | 21 +- .../bandwidth/extension/ActivatorTest.java | 9 +- .../extension/PcRptMessageCodecTest.java | 26 +- .../parser/BaseParserExtensionActivator.java | 10 +- .../protocol/pcep/p2mp/te/lsp/Activator.java | 17 +- .../ietf/initiated/InitiatedActivator.java | 36 +- .../pcep/ietf/stateful/StatefulActivator.java | 7 +- .../SyncOptimizationsActivator.java | 7 +- .../pcep/ietf/PCEPObjectParserTest.java | 128 ++-- .../protocol/pcep/ietf/PCEPValidatorTest.java | 699 +++++++++--------- .../pcep/impl/PcepRROSubobjectParserTest.java | 54 +- .../impl/TestVendorInformationActivator.java | 22 +- .../protocol/pcep/pcc/mock/PCCActivator.java | 11 +- .../routing/SegmentRoutingActivator.java | 7 +- pcep/spi/pom.xml | 13 +- .../spi/PCEPExtensionProviderActivator.java | 9 +- ...bstractPCEPExtensionProviderActivator.java | 48 -- .../DefaultPCEPExtensionConsumerContext.java | 109 +++ ...PCEPExtensionProviderContextActivator.java | 51 -- .../resources/OSGI-INF/blueprint/pcep-spi.xml | 31 - .../protocol/pcep/spi/RegistryTest.java | 16 +- .../protocol/pcep/testtool/Main.java | 23 +- 22 files changed, 626 insertions(+), 728 deletions(-) delete mode 100644 pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/AbstractPCEPExtensionProviderActivator.java create mode 100644 pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/DefaultPCEPExtensionConsumerContext.java delete mode 100644 pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimplePCEPExtensionProviderContextActivator.java delete mode 100644 pcep/spi/src/main/resources/OSGI-INF/blueprint/pcep-spi.xml diff --git a/pcep/auto-bandwidth-extension/src/main/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/Activator.java b/pcep/auto-bandwidth-extension/src/main/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/Activator.java index 88feca0cf9..1afbe94cab 100644 --- a/pcep/auto-bandwidth-extension/src/main/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/Activator.java +++ b/pcep/auto-bandwidth-extension/src/main/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/Activator.java @@ -8,18 +8,16 @@ package org.opendaylight.protocol.pcep.auto.bandwidth.extension; import com.google.common.base.MoreObjects; -import java.util.ArrayList; import java.util.List; import org.kohsuke.MetaInfServices; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.auto.bandwidth.rev181109.bandwidth.usage.object.BandwidthUsage; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Pcrpt; import org.opendaylight.yangtools.concepts.Registration; -@MetaInfServices(value = PCEPExtensionProviderActivator.class) -public class Activator extends AbstractPCEPExtensionProviderActivator { +@MetaInfServices +public class Activator implements PCEPExtensionProviderActivator { private final int bandwidthUsageObjectType; public Activator() { @@ -31,19 +29,16 @@ public class Activator extends AbstractPCEPExtensionProviderActivator { } @Override - protected List startImpl(final PCEPExtensionProviderContext context) { - final List regs = new ArrayList<>(); - + public List start(final PCEPExtensionProviderContext context) { final BandwidthUsageObjectCodec bandwidthUsageObjectCodec = new BandwidthUsageObjectCodec(bandwidthUsageObjectType); - regs.add(context.registerObjectParser(bandwidthUsageObjectCodec)); - regs.add(context.registerObjectSerializer(BandwidthUsage.class, bandwidthUsageObjectCodec)); - final PcRptMessageCodec pcRptMessageCodec = new PcRptMessageCodec(context.getObjectHandlerRegistry()); - regs.add(context.registerMessageParser(PcRptMessageCodec.TYPE, pcRptMessageCodec)); - regs.add(context.registerMessageSerializer(Pcrpt.class, pcRptMessageCodec)); - return regs; + return List.of( + context.registerObjectParser(bandwidthUsageObjectCodec), + context.registerObjectSerializer(BandwidthUsage.class, bandwidthUsageObjectCodec), + context.registerMessageParser(PcRptMessageCodec.TYPE, pcRptMessageCodec), + context.registerMessageSerializer(Pcrpt.class, pcRptMessageCodec)); } @Override diff --git a/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/ActivatorTest.java b/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/ActivatorTest.java index a172a01d31..8ee56a34f1 100644 --- a/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/ActivatorTest.java +++ b/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/ActivatorTest.java @@ -11,17 +11,12 @@ import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Test; -import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; -import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext; +import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext; public class ActivatorTest { - @Test public void testStartImplPCEPExtensionProviderContext() { - final Activator activator = new Activator(1); - final PCEPExtensionProviderContext ctx = ServiceLoaderPCEPExtensionProviderContext.create(); - final List registrations = activator.startImpl(ctx); + final List registrations = new Activator().start(new SimplePCEPExtensionProviderContext()); assertEquals(4, registrations.size()); - activator.close(); } } diff --git a/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/PcRptMessageCodecTest.java b/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/PcRptMessageCodecTest.java index 6100bd869a..6af4ef053c 100644 --- a/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/PcRptMessageCodecTest.java +++ b/pcep/auto-bandwidth-extension/src/test/java/org/opendaylight/protocol/pcep/auto/bandwidth/extension/PcRptMessageCodecTest.java @@ -18,7 +18,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.xml.bind.DatatypeConverter; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.opendaylight.protocol.pcep.ietf.stateful.StatefulActivator; @@ -53,30 +52,15 @@ import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; public class PcRptMessageCodecTest { + private static final List BW = List.of(new Bandwidth(new byte[]{0, 0, 0, 1})); - private static final List BW = Collections.singletonList(new Bandwidth(new byte[]{0, 0, 0, 1})); - private SimplePCEPExtensionProviderContext ctx; - private BaseParserExtensionActivator act; - private StatefulActivator statefulAct; - private org.opendaylight.protocol.pcep.auto.bandwidth.extension.Activator autoBwActivator; + private final SimplePCEPExtensionProviderContext ctx = new SimplePCEPExtensionProviderContext(); @Before public void setUp() { - this.ctx = new SimplePCEPExtensionProviderContext(); - this.act = new BaseParserExtensionActivator(); - this.act.start(this.ctx); - this.statefulAct = new StatefulActivator(); - this.statefulAct.start(this.ctx); - this.autoBwActivator = new org.opendaylight.protocol.pcep.auto.bandwidth.extension - .Activator(5); - this.autoBwActivator.start(this.ctx); - } - - @After - public void tearDown() { - this.act.stop(); - this.statefulAct.stop(); - this.autoBwActivator.stop(); + new BaseParserExtensionActivator().start(this.ctx); + new StatefulActivator().start(this.ctx); + new org.opendaylight.protocol.pcep.auto.bandwidth.extension.Activator().start(this.ctx); } @Test diff --git a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/BaseParserExtensionActivator.java b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/BaseParserExtensionActivator.java index 55e4e29b98..96bc1ceafe 100644 --- a/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/BaseParserExtensionActivator.java +++ b/pcep/base-parser/src/main/java/org/opendaylight/protocol/pcep/parser/BaseParserExtensionActivator.java @@ -98,7 +98,6 @@ import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; import org.opendaylight.protocol.pcep.spi.RROSubobjectRegistry; import org.opendaylight.protocol.pcep.spi.TlvRegistry; import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.Close; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.Keepalive; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.Pcerr; @@ -155,17 +154,16 @@ import org.opendaylight.yangtools.concepts.Registration; import org.osgi.service.component.annotations.Component; @Singleton -@MetaInfServices(value = PCEPExtensionProviderActivator.class) -@Component(immediate = true, service = PCEPExtensionProviderActivator.class, - property = "type=org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator") -public final class BaseParserExtensionActivator extends AbstractPCEPExtensionProviderActivator { +@MetaInfServices +@Component(immediate = true, property = "type=org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator") +public final class BaseParserExtensionActivator implements PCEPExtensionProviderActivator { @Inject public BaseParserExtensionActivator() { // Exposed for DI } @Override - protected List startImpl(final PCEPExtensionProviderContext context) { + public List start(final PCEPExtensionProviderContext context) { final List regs = new ArrayList<>(); registerLabelParsers(regs, context); diff --git a/pcep/ietf-p2mp-te-lsp/src/main/java/org/opendaylight/protocol/pcep/p2mp/te/lsp/Activator.java b/pcep/ietf-p2mp-te-lsp/src/main/java/org/opendaylight/protocol/pcep/p2mp/te/lsp/Activator.java index c21b561d89..e5795341cf 100644 --- a/pcep/ietf-p2mp-te-lsp/src/main/java/org/opendaylight/protocol/pcep/p2mp/te/lsp/Activator.java +++ b/pcep/ietf-p2mp-te-lsp/src/main/java/org/opendaylight/protocol/pcep/p2mp/te/lsp/Activator.java @@ -7,24 +7,21 @@ */ package org.opendaylight.protocol.pcep.p2mp.te.lsp; -import java.util.ArrayList; import java.util.List; import org.kohsuke.MetaInfServices; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.p2mp.te.lsp.rev181109.p2mp.pce.capability.tlv.P2mpPceCapability; import org.opendaylight.yangtools.concepts.Registration; -@MetaInfServices(value = PCEPExtensionProviderActivator.class) -public final class Activator extends AbstractPCEPExtensionProviderActivator { +@MetaInfServices +public final class Activator implements PCEPExtensionProviderActivator { @Override - protected List startImpl(final PCEPExtensionProviderContext context) { - final List regs = new ArrayList<>(2); - + public List start(final PCEPExtensionProviderContext context) { final P2MPTeLspCapabilityParser p2mpCapabilityParser = new P2MPTeLspCapabilityParser(); - regs.add(context.registerTlvParser(P2MPTeLspCapabilityParser.TYPE, p2mpCapabilityParser)); - regs.add(context.registerTlvSerializer(P2mpPceCapability.class, p2mpCapabilityParser)); - return regs; + + return List.of( + context.registerTlvParser(P2MPTeLspCapabilityParser.TYPE, p2mpCapabilityParser), + context.registerTlvSerializer(P2mpPceCapability.class, p2mpCapabilityParser)); } } \ No newline at end of file diff --git a/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated/InitiatedActivator.java b/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated/InitiatedActivator.java index 3381b41b72..628185596c 100644 --- a/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated/InitiatedActivator.java +++ b/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated/InitiatedActivator.java @@ -7,42 +7,38 @@ */ package org.opendaylight.protocol.pcep.ietf.initiated; -import java.util.ArrayList; import java.util.List; import org.kohsuke.MetaInfServices; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; import org.opendaylight.protocol.pcep.spi.TlvRegistry; import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.Pcinitiate; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.Lsp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.srp.object.Srp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.stateful.capability.tlv.Stateful; import org.opendaylight.yangtools.concepts.Registration; -@MetaInfServices(value = PCEPExtensionProviderActivator.class) -public final class InitiatedActivator extends AbstractPCEPExtensionProviderActivator { +@MetaInfServices +public final class InitiatedActivator implements PCEPExtensionProviderActivator { @Override - protected List startImpl(final PCEPExtensionProviderContext context) { - final List regs = new ArrayList<>(); - - regs.add(context.registerMessageParser(InitiatedPCInitiateMessageParser.TYPE, - new InitiatedPCInitiateMessageParser(context.getObjectHandlerRegistry()))); - regs.add(context.registerMessageSerializer(Pcinitiate.class, - new InitiatedPCInitiateMessageParser(context.getObjectHandlerRegistry()))); - + public List start(final PCEPExtensionProviderContext context) { final TlvRegistry tlvReg = context.getTlvHandlerRegistry(); final VendorInformationTlvRegistry viTlvReg = context.getVendorInformationTlvRegistry(); - regs.add(context.registerObjectParser(new InitiatedLspObjectParser(tlvReg, viTlvReg))); - regs.add(context.registerObjectSerializer(Lsp.class, new InitiatedLspObjectParser(tlvReg, viTlvReg))); - regs.add(context.registerObjectParser(new InitiatedSrpObjectParser(tlvReg, viTlvReg))); - regs.add(context.registerObjectSerializer(Srp.class, new InitiatedSrpObjectParser(tlvReg, viTlvReg))); - regs.add(context.registerTlvParser(InitiatedStatefulCapabilityTlvParser.TYPE, - new InitiatedStatefulCapabilityTlvParser())); - regs.add(context.registerTlvSerializer(Stateful.class, new InitiatedStatefulCapabilityTlvParser())); + return List.of( + context.registerMessageParser(InitiatedPCInitiateMessageParser.TYPE, + new InitiatedPCInitiateMessageParser(context.getObjectHandlerRegistry())), + context.registerMessageSerializer(Pcinitiate.class, + new InitiatedPCInitiateMessageParser(context.getObjectHandlerRegistry())), + + context.registerObjectParser(new InitiatedLspObjectParser(tlvReg, viTlvReg)), + context.registerObjectSerializer(Lsp.class, new InitiatedLspObjectParser(tlvReg, viTlvReg)), + context.registerObjectParser(new InitiatedSrpObjectParser(tlvReg, viTlvReg)), + context.registerObjectSerializer(Srp.class, new InitiatedSrpObjectParser(tlvReg, viTlvReg)), - return regs; + context.registerTlvParser(InitiatedStatefulCapabilityTlvParser.TYPE, + new InitiatedStatefulCapabilityTlvParser()), + context.registerTlvSerializer(Stateful.class, new InitiatedStatefulCapabilityTlvParser())); } } diff --git a/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful/StatefulActivator.java b/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful/StatefulActivator.java index b53cff4f4f..3e07df5f69 100644 --- a/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful/StatefulActivator.java +++ b/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful/StatefulActivator.java @@ -15,7 +15,6 @@ import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; import org.opendaylight.protocol.pcep.spi.TlvRegistry; import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Pcrpt; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Pcupd; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.error.code.tlv.LspErrorCode; @@ -30,10 +29,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.mes import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open; import org.opendaylight.yangtools.concepts.Registration; -@MetaInfServices(value = PCEPExtensionProviderActivator.class) -public final class StatefulActivator extends AbstractPCEPExtensionProviderActivator { +@MetaInfServices +public final class StatefulActivator implements PCEPExtensionProviderActivator { @Override - protected List startImpl(final PCEPExtensionProviderContext context) { + public List start(final PCEPExtensionProviderContext context) { final List regs = new ArrayList<>(); final ObjectRegistry objReg = context.getObjectHandlerRegistry(); diff --git a/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsActivator.java b/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsActivator.java index 793ecc72ad..db6b08d813 100644 --- a/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsActivator.java +++ b/pcep/ietf-stateful/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsActivator.java @@ -14,7 +14,6 @@ import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; import org.opendaylight.protocol.pcep.spi.TlvRegistry; import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev200720.lsp.db.version.tlv.LspDbVersion; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev200720.speaker.entity.id.tlv.SpeakerEntityId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.Lsp; @@ -22,10 +21,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.iet import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open; import org.opendaylight.yangtools.concepts.Registration; -@MetaInfServices(value = PCEPExtensionProviderActivator.class) -public class SyncOptimizationsActivator extends AbstractPCEPExtensionProviderActivator { +@MetaInfServices +public class SyncOptimizationsActivator implements PCEPExtensionProviderActivator { @Override - protected List startImpl(final PCEPExtensionProviderContext context) { + public List start(final PCEPExtensionProviderContext context) { final List regs = new ArrayList<>(); final TlvRegistry tlvReg = context.getTlvHandlerRegistry(); diff --git a/pcep/ietf-stateful/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPObjectParserTest.java b/pcep/ietf-stateful/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPObjectParserTest.java index 88ef048a33..2aa9ea3a6e 100644 --- a/pcep/ietf-stateful/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPObjectParserTest.java +++ b/pcep/ietf-stateful/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPObjectParserTest.java @@ -92,88 +92,82 @@ public class PCEPObjectParserTest { @Test public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException { - try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) { - a.start(this.ctx); + new SyncOptimizationsActivator().start(ctx); - final SyncOptimizationsOpenObjectParser parser = new SyncOptimizationsOpenObjectParser( - this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry()); - final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes( - "src/test/resources/PCEPOpenObject1.bin")); + final SyncOptimizationsOpenObjectParser parser = new SyncOptimizationsOpenObjectParser( + this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry()); + final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes( + "src/test/resources/PCEPOpenObject1.bin")); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object - .OpenBuilder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types - .rev181109.open.object.OpenBuilder() - .setProcessingRule(false) - .setIgnore(false) - .setVersion(new ProtocolVersion(Uint8.ONE)) - .setKeepalive(Uint8.valueOf(30)) - .setDeadTimer(Uint8.valueOf(120)) - .setSessionId(Uint8.ONE); + final var builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 + .open.object.OpenBuilder() + .setProcessingRule(false) + .setIgnore(false) + .setVersion(new ProtocolVersion(Uint8.ONE)) + .setKeepalive(Uint8.valueOf(30)) + .setDeadTimer(Uint8.valueOf(120)) + .setSessionId(Uint8.ONE); - final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE) - .addAugmentation(new Stateful1Builder().build()).build(); + final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE) + .addAugmentation(new Stateful1Builder().build()).build(); - final Tlvs1Builder statBuilder = new Tlvs1Builder(); - statBuilder.setStateful(tlv1); + final Tlvs1Builder statBuilder = new Tlvs1Builder(); + statBuilder.setStateful(tlv1); - final Tlvs3Builder syncOptBuilder = new Tlvs3Builder() - .setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(DB_VERSION).build()) - .setSpeakerEntityId(new SpeakerEntityIdBuilder().setSpeakerEntityIdValue(SPEAKER_ID).build()); + final Tlvs3Builder syncOptBuilder = new Tlvs3Builder() + .setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(DB_VERSION).build()) + .setSpeakerEntityId(new SpeakerEntityIdBuilder().setSpeakerEntityIdValue(SPEAKER_ID).build()); - builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 - .open.object.open.TlvsBuilder() - .addAugmentation(statBuilder.build()) - .addAugmentation(syncOptBuilder.build()) - .build()); + builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 + .open.object.open.TlvsBuilder() + .addAugmentation(statBuilder.build()) + .addAugmentation(syncOptBuilder.build()) + .build()); - assertEquals(builder.build(), parser.parseObject( - new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4))); - final ByteBuf buf = Unpooled.buffer(); - parser.serializeObject(builder.build(), buf); - assertArrayEquals(result.array(), ByteArray.getAllBytes(buf)); - } + assertEquals(builder.build(), parser.parseObject( + new ObjectHeaderImpl(false, false), result.slice(4, result.readableBytes() - 4))); + final ByteBuf buf = Unpooled.buffer(); + parser.serializeObject(builder.build(), buf); + assertArrayEquals(result.array(), ByteArray.getAllBytes(buf)); } @Test public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException { - try (StatefulActivator a = new StatefulActivator(); - SyncOptimizationsActivator a2 = new SyncOptimizationsActivator()) { - a.start(this.ctx); - a2.start(this.ctx); + new StatefulActivator().start(ctx); + new SyncOptimizationsActivator().start(ctx); - final SyncOptimizationsLspObjectParser parser = new SyncOptimizationsLspObjectParser( - this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry()); - final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes( - "src/test/resources/PCEPLspObject1WithTLV.bin")); + final SyncOptimizationsLspObjectParser parser = new SyncOptimizationsLspObjectParser( + this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry()); + final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes( + "src/test/resources/PCEPLspObject1WithTLV.bin")); - final LspBuilder builder = new LspBuilder() - .setProcessingRule(true) - .setIgnore(true) - .setAdministrative(true) - .setDelegate(false) - .setRemove(true) - .setSync(false) - .addAugmentation(new Lsp1Builder().setCreate(false).build()) - .setOperational(OperationalStatus.GoingDown) - .setPlspId(new PlspId(Uint32.valueOf(0x12345))); + final LspBuilder builder = new LspBuilder() + .setProcessingRule(true) + .setIgnore(true) + .setAdministrative(true) + .setDelegate(false) + .setRemove(true) + .setSync(false) + .addAugmentation(new Lsp1Builder().setCreate(false).build()) + .setOperational(OperationalStatus.GoingDown) + .setPlspId(new PlspId(Uint32.valueOf(0x12345))); - final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(Uint32.valueOf(627610883)).build(); - final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName( - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720 - .SymbolicPathName("Med".getBytes())).build(); - final LspDbVersion lspDbVersion = new LspDbVersionBuilder().setLspDbVersionValue(DB_VERSION).build(); - builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful - .rev200720.lsp.object.lsp.TlvsBuilder().setLspErrorCode(tlv1).setSymbolicPathName(tlv2) - .addAugmentation(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller - .pcep.sync.optimizations.rev200720.Tlvs1Builder().setLspDbVersion(lspDbVersion).build()) - .build()); + final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(Uint32.valueOf(627610883)).build(); + final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName( + new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720 + .SymbolicPathName("Med".getBytes())).build(); + final LspDbVersion lspDbVersion = new LspDbVersionBuilder().setLspDbVersionValue(DB_VERSION).build(); + builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful + .rev200720.lsp.object.lsp.TlvsBuilder().setLspErrorCode(tlv1).setSymbolicPathName(tlv2) + .addAugmentation(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller + .pcep.sync.optimizations.rev200720.Tlvs1Builder().setLspDbVersion(lspDbVersion).build()) + .build()); - assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), - result.slice(4, result.readableBytes() - 4))); - final ByteBuf buf = Unpooled.buffer(); - parser.serializeObject(builder.build(), buf); - assertArrayEquals(result.array(),ByteArray.getAllBytes(buf)); - } + assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), + result.slice(4, result.readableBytes() - 4))); + final ByteBuf buf = Unpooled.buffer(); + parser.serializeObject(builder.build(), buf); + assertArrayEquals(result.array(),ByteArray.getAllBytes(buf)); } @Test diff --git a/pcep/ietf-stateful/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java b/pcep/ietf-stateful/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java index 550ae43a70..2bffcfc4a8 100644 --- a/pcep/ietf-stateful/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java +++ b/pcep/ietf-stateful/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java @@ -16,7 +16,6 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.junit.Before; import org.junit.Test; @@ -39,7 +38,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.iet import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.PcinitiateBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.Srp1Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.pcinitiate.message.PcinitiateMessageBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.pcinitiate.message.pcinitiate.message.Requests; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.pcinitiate.message.pcinitiate.message.RequestsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.OperationalStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.PcrptBuilder; @@ -47,9 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.iet import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.PlspId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.SrpIdNumber; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Tlvs1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.LspIdentifiers; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.LspIdentifiersBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.lsp.identifiers.AddressFamily; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.Lsp; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.LspBuilder; @@ -61,7 +57,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.iet import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.Reports; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.ReportsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcupd.message.PcupdMessageBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcupd.message.pcupd.message.Updates; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcupd.message.pcupd.message.UpdatesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcupd.message.pcupd.message.updates.PathBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.srp.object.Srp; @@ -280,357 +275,337 @@ public class PCEPValidatorTest { .setTlvs(new TlvsBuilder().build()) .addAugmentation(new Lsp1Builder().setCreate(false).build()); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp - .identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder builder = - new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp - .identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder(); - builder.setIpv4TunnelSenderAddress(new Ipv4AddressNoZone("127.0.1.1")); - final LspId lspId = new LspId(Uint32.ONE); - final TunnelId tunnelId = new TunnelId(Uint16.ONE); - builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4AddressNoZone("127.0.1.2"))); - builder.setIpv4TunnelEndpointAddress(new Ipv4AddressNoZone("127.0.1.3")); - final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build(); - final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId) - .setTunnelId(tunnelId).build(); this.lspSrp = lspBuilder.build(); - this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build(); - - final Ipv4Builder afi = new Ipv4Builder(); - afi.setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255")); - afi.setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255")); - - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object - .BandwidthBuilder bandwidthBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang - .pcep.types.rev181109.bandwidth.object.BandwidthBuilder(); - bandwidthBuilder.setIgnore(false); - bandwidthBuilder.setProcessingRule(false); - bandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 })); - this.bandwidth = bandwidthBuilder.build(); - - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization - .bandwidth.object.ReoptimizationBandwidthBuilder reoptimizationBandwidthBuilder = new org.opendaylight.yang - .gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization.bandwidth.object - .ReoptimizationBandwidthBuilder(); - reoptimizationBandwidthBuilder.setIgnore(false); - reoptimizationBandwidthBuilder.setProcessingRule(false); - reoptimizationBandwidthBuilder.setBandwidth( - new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 })); - this.reoptimizationBandwidth = reoptimizationBandwidthBuilder.build(); + this.lsp = lspBuilder.setTlvs(new TlvsBuilder() + .setLspIdentifiers(new LspIdentifiersBuilder() + .setAddressFamily(new Ipv4CaseBuilder() + .setIpv4(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful + .rev200720.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder() + .setIpv4TunnelSenderAddress(new Ipv4AddressNoZone("127.0.1.1")) + .setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4AddressNoZone("127.0.1.2"))) + .setIpv4TunnelEndpointAddress(new Ipv4AddressNoZone("127.0.1.3")) + .build()) + .build()) + .setLspId(new LspId(Uint32.ONE)) + .setTunnelId(new TunnelId(Uint16.ONE)) + .build()) + .build()) + .build(); + + final Ipv4Builder afi = new Ipv4Builder() + .setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255")) + .setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255")); + + this.bandwidth = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 + .bandwidth.object.BandwidthBuilder() + .setIgnore(false) + .setProcessingRule(false) + .setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 })) + .build(); + + this.reoptimizationBandwidth = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types + .rev181109.reoptimization.bandwidth.object.ReoptimizationBandwidthBuilder() + .setIgnore(false) + .setProcessingRule(false) + .setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 })) + .build(); } @Test public void testOpenMsg() throws IOException, PCEPDeserializerException { - try (StatefulActivator a = new StatefulActivator()) { - a.start(this.ctx); - final ByteBuf result = Unpooled.wrappedBuffer( - ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin")); - final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry()); - final OpenMessageBuilder builder = new OpenMessageBuilder(); - - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object - .OpenBuilder b = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types - .rev181109.open.object.OpenBuilder() - .setProcessingRule(false) - .setIgnore(false) - .setVersion(new ProtocolVersion(Uint8.ONE)) - .setKeepalive(Uint8.valueOf(30)) - .setDeadTimer(Uint8.valueOf(120)) - .setSessionId(Uint8.ONE) - .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 - .open.object.open.TlvsBuilder() - .addAugmentation(new Tlvs1Builder() - .setStateful(new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build()) - .build()) - .build()); - builder.setOpen(b.build()); - - assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4, - result.readableBytes() - 4), Collections.emptyList())); - final ByteBuf buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - } + new StatefulActivator().start(this.ctx); + + final ByteBuf result = Unpooled.wrappedBuffer( + ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin")); + final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry()); + final OpenMessageBuilder builder = new OpenMessageBuilder() + .setOpen(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open + .object.OpenBuilder() + .setProcessingRule(false) + .setIgnore(false) + .setVersion(new ProtocolVersion(Uint8.ONE)) + .setKeepalive(Uint8.valueOf(30)) + .setDeadTimer(Uint8.valueOf(120)) + .setSessionId(Uint8.ONE) + .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 + .open.object.open.TlvsBuilder() + .addAugmentation(new Tlvs1Builder() + .setStateful(new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build()) + .build()) + .build()) + .build()); + + assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), List.of())); + final ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); } @Test public void testSyncOptActivator() { - try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) { - a.start(this.ctx); - a.close(); - } + new SyncOptimizationsActivator().start(ctx); } @Test public void testUpdMsg() throws IOException, PCEPDeserializerException { - try (InitiatedActivator a = new InitiatedActivator()) { - a.start(this.ctx); - final StatefulPCUpdateRequestMessageParser parser = new StatefulPCUpdateRequestMessageParser( - this.ctx.getObjectHandlerRegistry()); - - final PcupdMessageBuilder builder = new PcupdMessageBuilder(); - - final List updates = new ArrayList<>(); - final PathBuilder pBuilder = new PathBuilder(); - pBuilder.setEro(this.ero); - pBuilder.setLspa(this.lspa); - updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); - builder.setUpdates(updates); - - ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin")); - assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), - parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList())); - ByteBuf buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - - final List updates1 = new ArrayList<>(); - final PathBuilder pBuilder1 = new PathBuilder(); - pBuilder1.setEro(this.ero); - pBuilder1.setLspa(this.lspa); - updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); - updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build()); - builder.setUpdates(updates1); - - result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin")); - assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), - parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList())); - buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - } + new InitiatedActivator().start(ctx); + final StatefulPCUpdateRequestMessageParser parser = new StatefulPCUpdateRequestMessageParser( + this.ctx.getObjectHandlerRegistry()); + + final PathBuilder pBuilder = new PathBuilder() + .setEro(this.ero) + .setLspa(this.lspa); + final PcupdMessageBuilder builder = new PcupdMessageBuilder() + .setUpdates(List.of( + new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build())); + + ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin")); + assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), + parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of())); + ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + builder.setUpdates(List.of( + new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build(), + new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(new PathBuilder() + .setEro(this.ero) + .setLspa(this.lspa) + .build()) + .build())); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin")); + assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), + parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); } @Test public void testRptMsg() throws IOException, PCEPDeserializerException { - try (InitiatedActivator a = new InitiatedActivator(); - StatefulActivator b = new StatefulActivator()) { - a.start(this.ctx); - b.start(this.ctx); - ByteBuf result = Unpooled.wrappedBuffer(PCRT1); - - final StatefulPCReportMessageParser parser = new StatefulPCReportMessageParser( - this.ctx.getObjectHandlerRegistry()); - - final PcrptMessageBuilder builder = new PcrptMessageBuilder(); - - final List reports = new ArrayList<>(); - reports.add(new ReportsBuilder().setLsp(this.lsp).build()); - builder.setReports(reports); - final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4), - Collections.emptyList()); - assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult); - ByteBuf buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - - result = Unpooled.wrappedBuffer(PCRT2); - - final List reports1 = new ArrayList<>(); - reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight - .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder() - .setEro(this.ero).setLspa(this.lspa).build()).build()); - builder.setReports(reports1); - - final ByteBuf input = result.slice(4, result.readableBytes() - 4); - assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), - parser.parseMessage(input, Collections.emptyList())); - buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - - result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin")); - - final List reports2 = new ArrayList<>(); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt - .message.pcrpt.message.reports.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight - .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder(); - pBuilder.setEro(this.ero); - pBuilder.setLspa(this.lspa); - pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics)); - pBuilder.setRro(this.rro); - reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); - builder.setReports(reports2); - - assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), - parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList())); - buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - - result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin")); - - final List reports3 = new ArrayList<>(); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt - .message.pcrpt.message.reports.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight - .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder(); - pBuilder1.setEro(this.ero); - pBuilder1.setLspa(this.lspa); - pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics)); - pBuilder1.setRro(this.rro); - reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); - reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build()); - builder.setReports(reports3); - - assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), - parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList())); - buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - - result = Unpooled.wrappedBuffer(PCRT3); - - final List reports4 = new ArrayList<>(); - reports4.add(new ReportsBuilder().setLsp(this.lsp).setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight - .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder() - .setEro(this.ero).setLspa(this.lspa).setBandwidth(this.bandwidth) - .setReoptimizationBandwidth(this.reoptimizationBandwidth).build()).build()); - builder.setReports(reports4); - - final ByteBuf input2 = result.slice(4, result.readableBytes() - 4); - assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), - parser.parseMessage(input2, Collections.emptyList())); - buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - } + new InitiatedActivator().start(ctx); + new StatefulActivator().start(ctx); + ByteBuf result = Unpooled.wrappedBuffer(PCRT1); + + final StatefulPCReportMessageParser parser = new StatefulPCReportMessageParser( + this.ctx.getObjectHandlerRegistry()); + + final PcrptMessageBuilder builder = new PcrptMessageBuilder(); + + final List reports = new ArrayList<>(); + reports.add(new ReportsBuilder().setLsp(this.lsp).build()); + builder.setReports(reports); + final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4), + List.of()); + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult); + ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(PCRT2); + + builder.setReports(List.of(new ReportsBuilder() + .setLsp(this.lsp) + .setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720 + .pcrpt.message.pcrpt.message.reports.PathBuilder() + .setEro(this.ero) + .setLspa(this.lspa) + .build()) + .build())); + + final ByteBuf input = result.slice(4, result.readableBytes() - 4); + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), + parser.parseMessage(input, List.of())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin")); + + final List reports2 = new ArrayList<>(); + final var pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful + .rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder(); + pBuilder.setEro(this.ero); + pBuilder.setLspa(this.lspa); + pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics)); + pBuilder.setRro(this.rro); + reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); + builder.setReports(reports2); + + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), + parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin")); + + final List reports3 = new ArrayList<>(); + final var pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful + .rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder(); + pBuilder1.setEro(this.ero); + pBuilder1.setLspa(this.lspa); + pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics)); + pBuilder1.setRro(this.rro); + reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); + reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build()); + builder.setReports(reports3); + + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), + parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(PCRT3); + + final List reports4 = new ArrayList<>(); + reports4.add(new ReportsBuilder().setLsp(this.lsp).setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight + .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder() + .setEro(this.ero).setLspa(this.lspa).setBandwidth(this.bandwidth) + .setReoptimizationBandwidth(this.reoptimizationBandwidth).build()).build()); + builder.setReports(reports4); + + final ByteBuf input2 = result.slice(4, result.readableBytes() - 4); + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), + parser.parseMessage(input2, List.of())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); } @Test public void testPcinitMsg() throws IOException, PCEPDeserializerException { - try (InitiatedActivator a = new InitiatedActivator()) { - a.start(this.ctx); - final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin")); - - final InitiatedPCInitiateMessageParser parser = new InitiatedPCInitiateMessageParser( - this.ctx.getObjectHandlerRegistry()); - - final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder(); - final RequestsBuilder rBuilder = new RequestsBuilder(); - - final List reqs = new ArrayList<>(); - rBuilder.setSrp(this.srp); - rBuilder.setLsp(this.lspSrp); - rBuilder.setEro(this.ero); - rBuilder.setLspa(this.lspa); - rBuilder.setMetrics(Lists.newArrayList(this.metrics)); - rBuilder.setIro(this.iro); - reqs.add(rBuilder.build()); - builder.setRequests(reqs); - - assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), - parser.parseMessage(result.slice(4,result.readableBytes() - 4), Collections.emptyList())); - final ByteBuf buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - } + new InitiatedActivator().start(ctx); + + final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin")); + + final InitiatedPCInitiateMessageParser parser = new InitiatedPCInitiateMessageParser( + this.ctx.getObjectHandlerRegistry()); + + final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder() + .setRequests(List.of(new RequestsBuilder() + .setSrp(this.srp) + .setLsp(this.lspSrp) + .setEro(this.ero) + .setLspa(this.lspa) + .setMetrics(List.of(this.metrics)) + .setIro(this.iro) + .build())); + + assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), + parser.parseMessage(result.slice(4,result.readableBytes() - 4), List.of())); + final ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); } @Test public void testErrorMsg() throws IOException, PCEPDeserializerException { - try (StatefulActivator a = new StatefulActivator()) { - a.start(this.ctx); - final StatefulErrorMessageParser parser = new StatefulErrorMessageParser( - this.ctx.getObjectHandlerRegistry()); - - ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false) - .setType(Uint8.valueOf(19)).setValue(Uint8.ONE).build(); - - List innerErr = new ArrayList<>(); - innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); - - PcerrMessageBuilder builder = new PcerrMessageBuilder(); - builder.setErrors(innerErr); - final List srps = new ArrayList<>(); - srps.add(new SrpsBuilder() - .setSrp(new SrpBuilder() - .setOperationId(new SrpIdNumber(Uint32.valueOf(3))) - .setIgnore(false) - .setProcessingRule(false) - .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful - .rev200720.srp.object.srp.TlvsBuilder().build()) - .build()) - .build()); - builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight - .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcerr.pcerr.message.error.type.stateful._case - .StatefulBuilder().setSrps(srps).build()).build()); - - ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin")); - assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), - parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList())); - ByteBuf buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - - error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3)) - .setValue(Uint8.ONE).build(); - - innerErr = new ArrayList<>(); - builder = new PcerrMessageBuilder(); - - final RpBuilder rpBuilder = new RpBuilder() - .setProcessingRule(true) - .setIgnore(false) - .setReoptimization(false) - .setBiDirectional(false) - .setLoose(true) - .setMakeBeforeBreak(false) - .setOrder(false) - .setPathKey(false) - .setSupplyOf(false) - .setFragmentation(false) - .setP2mp(false) - .setEroCompression(false) - .setPriority(Uint8.ONE) - .setRequestId(new RequestId(Uint32.TEN)) - .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 - .rp.object.rp.TlvsBuilder().build()) - .setProcessingRule(false); - final List rps = new ArrayList<>(); - rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr - .message.pcerr.message.error.type.request._case.request.RpsBuilder().setRp(rpBuilder.build()).build()); - - innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); - - builder.setErrors(innerErr); - builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build()); - - result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin")); - assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), - parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList())); - buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - - - builder = new PcerrMessageBuilder(); - error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3)) - .setValue(Uint8.ONE).build(); - - innerErr = new ArrayList<>(); - innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); - - builder.setErrors(innerErr); - builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder() - .setOpen(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open - .object.OpenBuilder() - .setDeadTimer(Uint8.ONE) - .setKeepalive(Uint8.ONE) - .setVersion(new ProtocolVersion(Uint8.ONE)) - .setSessionId(Uint8.ZERO) - .setIgnore(false) - .setProcessingRule(false) - .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types - .rev181109.open.object.open.TlvsBuilder().build()) - .build()).build()).build()); - - result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin")); - assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), - parser.parseMessage(result.slice(4,result.readableBytes() - 4), Collections.emptyList())); - buf = Unpooled.buffer(result.readableBytes()); - parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); - assertArrayEquals(result.array(), buf.array()); - } + new StatefulActivator().start(ctx); + + final StatefulErrorMessageParser parser = new StatefulErrorMessageParser( + this.ctx.getObjectHandlerRegistry()); + + ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false) + .setType(Uint8.valueOf(19)).setValue(Uint8.ONE).build(); + + List innerErr = new ArrayList<>(); + innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); + + PcerrMessageBuilder builder = new PcerrMessageBuilder(); + builder.setErrors(innerErr); + final List srps = new ArrayList<>(); + srps.add(new SrpsBuilder() + .setSrp(new SrpBuilder() + .setOperationId(new SrpIdNumber(Uint32.valueOf(3))) + .setIgnore(false) + .setProcessingRule(false) + .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful + .rev200720.srp.object.srp.TlvsBuilder().build()) + .build()) + .build()); + builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight + .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcerr.pcerr.message.error.type.stateful._case + .StatefulBuilder().setSrps(srps).build()).build()); + + ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin")); + assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), + parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of())); + ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3)) + .setValue(Uint8.ONE).build(); + + innerErr = new ArrayList<>(); + builder = new PcerrMessageBuilder(); + + final RpBuilder rpBuilder = new RpBuilder() + .setProcessingRule(true) + .setIgnore(false) + .setReoptimization(false) + .setBiDirectional(false) + .setLoose(true) + .setMakeBeforeBreak(false) + .setOrder(false) + .setPathKey(false) + .setSupplyOf(false) + .setFragmentation(false) + .setP2mp(false) + .setEroCompression(false) + .setPriority(Uint8.ONE) + .setRequestId(new RequestId(Uint32.TEN)) + .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109 + .rp.object.rp.TlvsBuilder().build()) + .setProcessingRule(false); + final List rps = new ArrayList<>(); + rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message + .pcerr.message.error.type.request._case.request.RpsBuilder().setRp(rpBuilder.build()).build()); + + innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); + + builder.setErrors(innerErr); + builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin")); + assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), + parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + builder = new PcerrMessageBuilder(); + error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3)) + .setValue(Uint8.ONE).build(); + + innerErr = new ArrayList<>(); + innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); + + builder.setErrors(innerErr); + builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder() + .setOpen(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open + .object.OpenBuilder() + .setDeadTimer(Uint8.ONE) + .setKeepalive(Uint8.ONE) + .setVersion(new ProtocolVersion(Uint8.ONE)) + .setSessionId(Uint8.ZERO) + .setIgnore(false) + .setProcessingRule(false) + .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types + .rev181109.open.object.open.TlvsBuilder().build()) + .build()).build()).build()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin")); + assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), + parser.parseMessage(result.slice(4,result.readableBytes() - 4), List.of())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); } @Test @@ -649,29 +624,26 @@ public class PCEPValidatorTest { (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00 }; - try (InitiatedActivator a = new InitiatedActivator(); - StatefulActivator b = new StatefulActivator()) { - a.start(this.ctx); - b.start(this.ctx); - final StatefulPCReportMessageParser parser = new StatefulPCReportMessageParser( - this.ctx.getObjectHandlerRegistry()); + new InitiatedActivator().start(ctx); + new StatefulActivator().start(ctx); + + final StatefulPCReportMessageParser parser = new StatefulPCReportMessageParser( + this.ctx.getObjectHandlerRegistry()); - final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder(); - errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder() + final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg); + final List errors = new ArrayList<>(); + parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors); + assertFalse(errors.isEmpty()); + assertEquals(new PcerrBuilder() + .setPcerrMessage(new PcerrMessageBuilder() + .setErrors(List.of(new ErrorsBuilder() .setErrorObject(new ErrorObjectBuilder() .setType(Uint8.valueOf(6)) .setValue(Uint8.valueOf(8)) .build()) - .build())); - final PcerrBuilder builder = new PcerrBuilder(); - builder.setPcerrMessage(errMsgBuilder.build()); - - final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg); - final List errors = new ArrayList<>(); - parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors); - assertFalse(errors.isEmpty()); - assertEquals(builder.build(), errors.get(0)); - } + .build())) + .build()) + .build(), errors.get(0)); } @Test @@ -701,27 +673,24 @@ public class PCEPValidatorTest { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }; - try (InitiatedActivator a = new InitiatedActivator()) { - a.start(this.ctx); + new InitiatedActivator().start(ctx); - final StatefulPCUpdateRequestMessageParser parser = new StatefulPCUpdateRequestMessageParser( - this.ctx.getObjectHandlerRegistry()); + final StatefulPCUpdateRequestMessageParser parser = new StatefulPCUpdateRequestMessageParser( + this.ctx.getObjectHandlerRegistry()); - final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder(); - errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder() + final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg); + final List errors = new ArrayList<>(); + parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors); + assertFalse(errors.isEmpty()); + assertEquals(new PcerrBuilder() + .setPcerrMessage(new PcerrMessageBuilder() + .setErrors(List.of(new ErrorsBuilder() .setErrorObject(new ErrorObjectBuilder() .setType(Uint8.valueOf(6)) .setValue(Uint8.valueOf(10)) .build()) - .build())); - final PcerrBuilder builder = new PcerrBuilder(); - builder.setPcerrMessage(errMsgBuilder.build()); - - final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg); - final List errors = new ArrayList<>(); - parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors); - assertFalse(errors.isEmpty()); - assertEquals(builder.build(), errors.get(0)); - } + .build())) + .build()) + .build(), errors.get(0)); } } diff --git a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PcepRROSubobjectParserTest.java b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PcepRROSubobjectParserTest.java index 6e36c9253d..2289d6a2b4 100644 --- a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PcepRROSubobjectParserTest.java +++ b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PcepRROSubobjectParserTest.java @@ -225,34 +225,34 @@ public class PcepRROSubobjectParserTest { @Test public void testRROLabelSubobject() throws Exception { final SimplePCEPExtensionProviderContext ctx = new SimplePCEPExtensionProviderContext(); - try (BaseParserExtensionActivator a = new BaseParserExtensionActivator()) { - a.start(ctx); - final RROLabelSubobjectParser parser = new RROLabelSubobjectParser(ctx.getLabelHandlerRegistry()); - final SubobjectBuilder subs = new SubobjectBuilder() - .setSubobjectType(new LabelCaseBuilder().setLabel( - new LabelBuilder().setUniDirectional(true).setGlobal(false).setLabelType( - new GeneralizedLabelCaseBuilder().setGeneralizedLabel( - new GeneralizedLabelBuilder().setGeneralizedLabel( - new byte[] { (byte) 0x12, (byte) 0x00, (byte) 0x25, (byte) 0xFF }) - .build()).build()).build()).build()); - assertEquals( - subs.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(LABEL_BYTES, 2)))); - final ByteBuf buff = Unpooled.buffer(); - parser.serializeSubobject(subs.build(), buff); - assertArrayEquals(LABEL_BYTES, ByteArray.getAllBytes(buff)); + final BaseParserExtensionActivator act = new BaseParserExtensionActivator(); + act.start(ctx); - try { - parser.parseSubobject(null); - fail(); - } catch (final IllegalArgumentException e) { - assertEquals("Array of bytes is mandatory. Can't be null or empty.", e.getMessage()); - } - try { - parser.parseSubobject(Unpooled.EMPTY_BUFFER); - fail(); - } catch (final IllegalArgumentException e) { - assertEquals("Array of bytes is mandatory. Can't be null or empty.", e.getMessage()); - } + final RROLabelSubobjectParser parser = new RROLabelSubobjectParser(ctx.getLabelHandlerRegistry()); + final SubobjectBuilder subs = new SubobjectBuilder() + .setSubobjectType(new LabelCaseBuilder().setLabel( + new LabelBuilder().setUniDirectional(true).setGlobal(false).setLabelType( + new GeneralizedLabelCaseBuilder().setGeneralizedLabel( + new GeneralizedLabelBuilder().setGeneralizedLabel( + new byte[] { (byte) 0x12, (byte) 0x00, (byte) 0x25, (byte) 0xFF }) + .build()).build()).build()).build()); + assertEquals( + subs.build(), parser.parseSubobject(Unpooled.wrappedBuffer(ByteArray.cutBytes(LABEL_BYTES, 2)))); + final ByteBuf buff = Unpooled.buffer(); + parser.serializeSubobject(subs.build(), buff); + assertArrayEquals(LABEL_BYTES, ByteArray.getAllBytes(buff)); + + try { + parser.parseSubobject(null); + fail(); + } catch (final IllegalArgumentException e) { + assertEquals("Array of bytes is mandatory. Can't be null or empty.", e.getMessage()); + } + try { + parser.parseSubobject(Unpooled.EMPTY_BUFFER); + fail(); + } catch (final IllegalArgumentException e) { + assertEquals("Array of bytes is mandatory. Can't be null or empty.", e.getMessage()); } } } diff --git a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/TestVendorInformationActivator.java b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/TestVendorInformationActivator.java index e3f3d5025a..1e61aac19a 100644 --- a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/TestVendorInformationActivator.java +++ b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/TestVendorInformationActivator.java @@ -7,25 +7,23 @@ */ package org.opendaylight.protocol.pcep.impl; -import java.util.ArrayList; import java.util.List; import org.opendaylight.protocol.pcep.impl.TestVendorInformationTlvParser.TestEnterpriseSpecificInformation; +import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yangtools.concepts.Registration; -public class TestVendorInformationActivator extends AbstractPCEPExtensionProviderActivator { +public class TestVendorInformationActivator implements PCEPExtensionProviderActivator { @Override - protected List startImpl(PCEPExtensionProviderContext context) { - final List regs = new ArrayList<>(); + public List start(final PCEPExtensionProviderContext context) { final TestVendorInformationTlvParser parser = new TestVendorInformationTlvParser(); - regs.add(context.registerVendorInformationTlvParser(parser.getEnterpriseNumber(), parser)); - regs.add(context.registerVendorInformationTlvSerializer(TestEnterpriseSpecificInformation.class, parser)); - - // Vendor-information object registration final TestVendorInformationObjectParser objParser = new TestVendorInformationObjectParser(); - regs.add(context.registerVendorInformationObjectParser(parser.getEnterpriseNumber(), objParser)); - regs.add(context.registerVendorInformationObjectSerializer(TestEnterpriseSpecificInformation.class, objParser)); - return regs; + + return List.of( + context.registerVendorInformationTlvParser(parser.getEnterpriseNumber(), parser), + context.registerVendorInformationTlvSerializer(TestEnterpriseSpecificInformation.class, parser), + // Vendor-information object registration + context.registerVendorInformationObjectParser(parser.getEnterpriseNumber(), objParser), + context.registerVendorInformationObjectSerializer(TestEnterpriseSpecificInformation.class, objParser)); } } diff --git a/pcep/pcc-mock/src/main/java/org/opendaylight/protocol/pcep/pcc/mock/PCCActivator.java b/pcep/pcc-mock/src/main/java/org/opendaylight/protocol/pcep/pcc/mock/PCCActivator.java index b721163184..6627c902c8 100644 --- a/pcep/pcc-mock/src/main/java/org/opendaylight/protocol/pcep/pcc/mock/PCCActivator.java +++ b/pcep/pcc-mock/src/main/java/org/opendaylight/protocol/pcep/pcc/mock/PCCActivator.java @@ -7,17 +7,14 @@ */ package org.opendaylight.protocol.pcep.pcc.mock; -import java.util.ArrayList; import java.util.List; +import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yangtools.concepts.Registration; -public class PCCActivator extends AbstractPCEPExtensionProviderActivator { +public class PCCActivator implements PCEPExtensionProviderActivator { @Override - protected List startImpl(final PCEPExtensionProviderContext context) { - final List regs = new ArrayList<>(); - regs.add(context.registerObjectParser(new PCCEndPointIpv4ObjectParser())); - return regs; + public List start(final PCEPExtensionProviderContext context) { + return List.of(context.registerObjectParser(new PCCEndPointIpv4ObjectParser())); } } diff --git a/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/SegmentRoutingActivator.java b/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/SegmentRoutingActivator.java index 65ae9ef134..b34fcb2cf9 100644 --- a/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/SegmentRoutingActivator.java +++ b/pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/SegmentRoutingActivator.java @@ -15,7 +15,6 @@ import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; import org.opendaylight.protocol.pcep.spi.TlvRegistry; import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev200720.add.lsp.input.arguments.ero.subobject.subobject.type.SrEroType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev200720.add.lsp.input.arguments.rro.subobject.subobject.type.SrRroType; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev200720.sr.pce.capability.tlv.SrPceCapability; @@ -23,8 +22,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.path.setup.type.tlv.PathSetupType; import org.opendaylight.yangtools.concepts.Registration; -@MetaInfServices(value = PCEPExtensionProviderActivator.class) -public class SegmentRoutingActivator extends AbstractPCEPExtensionProviderActivator { +@MetaInfServices +public class SegmentRoutingActivator implements PCEPExtensionProviderActivator { @Deprecated private final boolean ianaSrSubobjectsType; @@ -38,7 +37,7 @@ public class SegmentRoutingActivator extends AbstractPCEPExtensionProviderActiva } @Override - protected List startImpl(final PCEPExtensionProviderContext context) { + public List start(final PCEPExtensionProviderContext context) { final List regs = new ArrayList<>(); /* Tlvs */ diff --git a/pcep/spi/pom.xml b/pcep/spi/pom.xml index b53acf7cc3..cc9c1411c9 100644 --- a/pcep/spi/pom.xml +++ b/pcep/spi/pom.xml @@ -66,8 +66,17 @@ guava - org.checkerframework - checker-qual + com.guicedee.services + javax.inject + true + + + org.osgi + osgi.cmpn + + + org.kohsuke.metainf-services + metainf-services diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPExtensionProviderActivator.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPExtensionProviderActivator.java index 3d65f6ad54..55aa7328b0 100644 --- a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPExtensionProviderActivator.java +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPExtensionProviderActivator.java @@ -7,8 +7,11 @@ */ package org.opendaylight.protocol.pcep.spi; -public interface PCEPExtensionProviderActivator { - void start(PCEPExtensionProviderContext context); +import java.util.List; +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.opendaylight.yangtools.concepts.Registration; - void stop(); +@NonNullByDefault +public interface PCEPExtensionProviderActivator { + List start(PCEPExtensionProviderContext context); } \ No newline at end of file diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/AbstractPCEPExtensionProviderActivator.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/AbstractPCEPExtensionProviderActivator.java deleted file mode 100644 index e865c274b9..0000000000 --- a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/AbstractPCEPExtensionProviderActivator.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2013 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.pcep.spi.pojo; - -import static com.google.common.base.Preconditions.checkState; -import static java.util.Objects.requireNonNull; - -import java.util.List; -import org.checkerframework.checker.lock.qual.GuardedBy; -import org.checkerframework.checker.lock.qual.Holding; -import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; -import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; -import org.opendaylight.yangtools.concepts.Registration; - -public abstract class AbstractPCEPExtensionProviderActivator implements AutoCloseable, PCEPExtensionProviderActivator { - @GuardedBy("this") - private List registrations; - - @Holding("this") - protected abstract List startImpl(PCEPExtensionProviderContext context); - - @Override - public final synchronized void start(final PCEPExtensionProviderContext context) { - checkState(this.registrations == null); - - this.registrations = requireNonNull(startImpl(context)); - } - - @Override - public final synchronized void stop() { - if (this.registrations == null) { - return; - } - - this.registrations.forEach(Registration::close); - this.registrations = null; - } - - @Override - public final void close() { - stop(); - } -} diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/DefaultPCEPExtensionConsumerContext.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/DefaultPCEPExtensionConsumerContext.java new file mode 100644 index 0000000000..f682f12abb --- /dev/null +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/DefaultPCEPExtensionConsumerContext.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2016 Brocade Communications 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.pcep.spi.pojo; + +import com.google.common.annotations.VisibleForTesting; +import java.util.Arrays; +import java.util.List; +import java.util.ServiceLoader; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.eclipse.jdt.annotation.NonNull; +import org.kohsuke.MetaInfServices; +import org.opendaylight.protocol.pcep.spi.EROSubobjectRegistry; +import org.opendaylight.protocol.pcep.spi.LabelRegistry; +import org.opendaylight.protocol.pcep.spi.MessageRegistry; +import org.opendaylight.protocol.pcep.spi.ObjectRegistry; +import org.opendaylight.protocol.pcep.spi.PCEPExtensionConsumerContext; +import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; +import org.opendaylight.protocol.pcep.spi.RROSubobjectRegistry; +import org.opendaylight.protocol.pcep.spi.TlvRegistry; +import org.opendaylight.protocol.pcep.spi.VendorInformationObjectRegistry; +import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry; +import org.opendaylight.protocol.pcep.spi.XROSubobjectRegistry; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.component.annotations.ReferencePolicyOption; + +/** + * Starts and stops PCEPExtensionProviderActivator instances for a PCEPExtensionProviderContext. + * + * @author Thomas Pantelis + */ +@Singleton +@MetaInfServices +@Component(immediate = true) +public final class DefaultPCEPExtensionConsumerContext implements PCEPExtensionConsumerContext { + private final @NonNull SimplePCEPExtensionProviderContext delegate = new SimplePCEPExtensionProviderContext(); + + public DefaultPCEPExtensionConsumerContext() { + this(ServiceLoader.load(PCEPExtensionProviderActivator.class)); + } + + @VisibleForTesting + public DefaultPCEPExtensionConsumerContext(final PCEPExtensionProviderActivator... extensionActivators) { + this(Arrays.asList(extensionActivators)); + } + + @Inject + public DefaultPCEPExtensionConsumerContext(final Iterable extensionActivators) { + extensionActivators.forEach(activator -> activator.start(delegate)); + } + + @Activate + public DefaultPCEPExtensionConsumerContext(final @Reference(policyOption = ReferencePolicyOption.GREEDY) + List extensionActivators) { + extensionActivators.forEach(activator -> activator.start(delegate)); + } + + @Override + public LabelRegistry getLabelHandlerRegistry() { + return delegate.getLabelHandlerRegistry(); + } + + @Override + public MessageRegistry getMessageHandlerRegistry() { + return delegate.getMessageHandlerRegistry(); + } + + @Override + public ObjectRegistry getObjectHandlerRegistry() { + return delegate.getObjectHandlerRegistry(); + } + + @Override + public EROSubobjectRegistry getEROSubobjectHandlerRegistry() { + return delegate.getEROSubobjectHandlerRegistry(); + } + + @Override + public RROSubobjectRegistry getRROSubobjectHandlerRegistry() { + return delegate.getRROSubobjectHandlerRegistry(); + } + + @Override + public XROSubobjectRegistry getXROSubobjectHandlerRegistry() { + return delegate.getXROSubobjectHandlerRegistry(); + } + + @Override + public TlvRegistry getTlvHandlerRegistry() { + return delegate.getTlvHandlerRegistry(); + } + + @Override + public VendorInformationTlvRegistry getVendorInformationTlvRegistry() { + return delegate.getVendorInformationTlvRegistry(); + } + + @Override + public VendorInformationObjectRegistry getVendorInformationObjectRegistry() { + return delegate.getVendorInformationObjectRegistry(); + } +} diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimplePCEPExtensionProviderContextActivator.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimplePCEPExtensionProviderContextActivator.java deleted file mode 100644 index 06d3a0eb79..0000000000 --- a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimplePCEPExtensionProviderContextActivator.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2016 Brocade Communications 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.pcep.spi.pojo; - -import static java.util.Objects.requireNonNull; - -import java.util.List; -import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderActivator; -import org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Starts and stops PCEPExtensionProviderActivator instances for a PCEPExtensionProviderContext. - * - * @author Thomas Pantelis - */ -public class SimplePCEPExtensionProviderContextActivator implements AutoCloseable { - private static final Logger LOG = LoggerFactory.getLogger(SimplePCEPExtensionProviderContextActivator.class); - - private final PCEPExtensionProviderContext providerContext; - private final List extensionActivators; - - public SimplePCEPExtensionProviderContextActivator(final PCEPExtensionProviderContext providerContext, - final List extensionActivators) { - this.providerContext = requireNonNull(providerContext); - this.extensionActivators = requireNonNull(extensionActivators); - } - - public void start() { - LOG.debug("Starting {} PCEPExtensionProviderActivator instances", this.extensionActivators.size()); - - for (final PCEPExtensionProviderActivator e : this.extensionActivators) { - e.start(this.providerContext); - } - } - - @Override - public void close() { - LOG.debug("Stopping {} PCEPExtensionProviderActivator instances", this.extensionActivators.size()); - - for (final PCEPExtensionProviderActivator e : this.extensionActivators) { - e.stop(); - } - } -} diff --git a/pcep/spi/src/main/resources/OSGI-INF/blueprint/pcep-spi.xml b/pcep/spi/src/main/resources/OSGI-INF/blueprint/pcep-spi.xml deleted file mode 100644 index 3b9e4f30d5..0000000000 --- a/pcep/spi/src/main/resources/OSGI-INF/blueprint/pcep-spi.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - org.opendaylight.protocol.pcep.spi.PCEPExtensionProviderContext - org.opendaylight.protocol.pcep.spi.PCEPExtensionConsumerContext - - - \ No newline at end of file diff --git a/pcep/spi/src/test/java/org/opendaylight/protocol/pcep/spi/RegistryTest.java b/pcep/spi/src/test/java/org/opendaylight/protocol/pcep/spi/RegistryTest.java index b56002cb4b..adf1b4e35a 100644 --- a/pcep/spi/src/test/java/org/opendaylight/protocol/pcep/spi/RegistryTest.java +++ b/pcep/spi/src/test/java/org/opendaylight/protocol/pcep/spi/RegistryTest.java @@ -22,8 +22,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import org.opendaylight.protocol.pcep.spi.pojo.AbstractPCEPExtensionProviderActivator; -import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext; +import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext; 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.rev181109.Keepalive; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.KeepaliveBuilder; @@ -101,15 +100,7 @@ public class RegistryTest { public final List regs = new ArrayList<>(); - final AbstractPCEPExtensionProviderActivator activator = new AbstractPCEPExtensionProviderActivator() { - - @Override - protected List startImpl(final PCEPExtensionProviderContext context) { - return RegistryTest.this.regs; - } - }; - - final PCEPExtensionProviderContext ctx = ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance(); + final PCEPExtensionProviderContext ctx = new SimplePCEPExtensionProviderContext(); @SuppressWarnings("unchecked") @Before @@ -206,8 +197,5 @@ public class RegistryTest { this.ctx.getVendorInformationTlvRegistry().parseVendorInformationTlv( new EnterpriseNumber(Uint32.valueOf(12)), buffer); this.ctx.getVendorInformationTlvRegistry().serializeVendorInformationTlv(this.viTlv, buffer); - - this.activator.start(this.ctx); - this.activator.close(); } } diff --git a/pcep/testtool/src/main/java/org/opendaylight/protocol/pcep/testtool/Main.java b/pcep/testtool/src/main/java/org/opendaylight/protocol/pcep/testtool/Main.java index 37c00865ab..cbdf024b22 100644 --- a/pcep/testtool/src/main/java/org/opendaylight/protocol/pcep/testtool/Main.java +++ b/pcep/testtool/src/main/java/org/opendaylight/protocol/pcep/testtool/Main.java @@ -13,15 +13,16 @@ import java.net.InetSocketAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; +import java.util.ServiceLoader; import java.util.concurrent.ExecutionException; import org.opendaylight.protocol.pcep.PCEPCapability; import org.opendaylight.protocol.pcep.PCEPSessionProposalFactory; import org.opendaylight.protocol.pcep.ietf.stateful.PCEPStatefulCapability; -import org.opendaylight.protocol.pcep.ietf.stateful.StatefulActivator; import org.opendaylight.protocol.pcep.impl.BasePCEPSessionProposalFactory; import org.opendaylight.protocol.pcep.impl.DefaultPCEPSessionNegotiatorFactory; import org.opendaylight.protocol.pcep.impl.PCEPDispatcherImpl; -import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext; +import org.opendaylight.protocol.pcep.spi.MessageRegistry; +import org.opendaylight.protocol.pcep.spi.PCEPExtensionConsumerContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,7 +77,7 @@ public final class Main { } public static void main(final String[] args) throws UnknownHostException, InterruptedException, ExecutionException { - if (args.length == 0 || (args.length == 1 && args[0].equalsIgnoreCase("--help"))) { + if (args.length == 0 || args.length == 1 && args[0].equalsIgnoreCase("--help")) { LOG.info(Main.USAGE); return; } @@ -124,14 +125,12 @@ public final class Main { caps.add(new PCEPStatefulCapability(stateful, active, instant, false, false, false, false)); final PCEPSessionProposalFactory spf = new BasePCEPSessionProposalFactory(deadTimerValue, keepAliveValue, caps); - try (StatefulActivator activator07 = new StatefulActivator()) { - activator07.start(ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance()); - - final PCEPDispatcherImpl dispatcher = new PCEPDispatcherImpl( - ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getMessageHandlerRegistry(), - new DefaultPCEPSessionNegotiatorFactory(spf, MAX_UNKNOWN_MESSAGES), - new NioEventLoopGroup(), new NioEventLoopGroup()); - dispatcher.createServer(new TestToolPCEPDispatcherDependencies(address)).get(); - } + final MessageRegistry handlerRegistry = ServiceLoader.load(PCEPExtensionConsumerContext.class).findFirst() + .orElseThrow() + .getMessageHandlerRegistry(); + final PCEPDispatcherImpl dispatcher = new PCEPDispatcherImpl(handlerRegistry, + new DefaultPCEPSessionNegotiatorFactory(spf, MAX_UNKNOWN_MESSAGES), + new NioEventLoopGroup(), new NioEventLoopGroup()); + dispatcher.createServer(new TestToolPCEPDispatcherDependencies(address)).get(); } } -- 2.36.6