BUG-139: PCEP TLVs extensions implementation 01/24201/13
authorIveta Halanova <iveta.halanova@pantheon.sk>
Thu, 16 Jul 2015 13:23:09 +0000 (15:23 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 20 Jul 2015 11:04:42 +0000 (11:04 +0000)
- yang model augmented by LSP-DB-VERSION and SPEAKER-ENTITY-ID
- parsers/serializers implementation
- integration into Lsp and Open objects
- expansion of unit tests

Change-Id: I07d2da05f27a5fdb1fe87ebdb58793ab59a08012
Signed-off-by: Iveta Halanova <iveta.halanova@pantheon.sk>
pcep/ietf-stateful07/src/main/java/org/opendaylight/controller/config/yang/pcep/stateful07/cfg/SyncOptimizationsPCEPParserModule.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/LspDbVersionTlvParser.java [new file with mode: 0644]
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SpeakerEntityIdTlvParser.java [new file with mode: 0644]
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsActivator.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsLspObjectParser.java [new file with mode: 0644]
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsOpenObjectParser.java [new file with mode: 0644]
pcep/ietf-stateful07/src/main/yang/odl-pcep-sync-optimizations.yang
pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPObjectParserTest.java
pcep/ietf-stateful07/src/test/resources/PCEPLspObject1WithTLV.bin
pcep/ietf-stateful07/src/test/resources/PCEPOpenObject1.bin

index 42db6cbd52488132c65d57419235e5d2c186f12b..5806771f2a27c4fad82fd4c8ba78740c59bbe75d 100644 (file)
@@ -9,7 +9,7 @@ package org.opendaylight.controller.config.yang.pcep.stateful07.cfg;
 
 import org.opendaylight.controller.config.api.DependencyResolver;
 import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
+import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsActivator;
 
 public class SyncOptimizationsPCEPParserModule extends AbstractSyncOptimizationsPCEPParserModule {
 
@@ -24,7 +24,7 @@ public class SyncOptimizationsPCEPParserModule extends AbstractSyncOptimizations
 
     @Override
     protected AutoCloseable createInstance() {
-        return new StatefulActivator();
+        return new SyncOptimizationsActivator();
     }
 
 }
diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/LspDbVersionTlvParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/LspDbVersionTlvParser.java
new file mode 100644 (file)
index 0000000..6d63d65
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * 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.pcep.sync.optimizations;
+
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedLong;
+import com.google.common.base.Preconditions;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import java.math.BigInteger;
+import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
+import org.opendaylight.protocol.pcep.spi.TlvParser;
+import org.opendaylight.protocol.pcep.spi.TlvSerializer;
+import org.opendaylight.protocol.pcep.spi.TlvUtil;
+import org.opendaylight.protocol.util.ByteArray;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersion;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
+
+public class LspDbVersionTlvParser implements TlvParser, TlvSerializer {
+
+    public static final int TYPE = 23;
+
+    @Override
+    public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
+        Preconditions.checkArgument(tlv instanceof LspDbVersion, "Tlv object is not instance of LspDbVersion.");
+        final ByteBuf body = Unpooled.buffer();
+        writeUnsignedLong(((LspDbVersion) tlv).getLspDbVersionValue(), body);
+        TlvUtil.formatTlv(TYPE, body, buffer);
+    }
+
+    @Override
+    public Tlv parseTlv(final ByteBuf buffer) throws PCEPDeserializerException {
+        if (buffer == null) {
+            return null;
+        }
+        return new LspDbVersionBuilder().setLspDbVersionValue(new BigInteger(ByteArray.readAllBytes(buffer))).build();
+    }
+
+}
diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SpeakerEntityIdTlvParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SpeakerEntityIdTlvParser.java
new file mode 100644 (file)
index 0000000..21f4162
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * 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.pcep.sync.optimizations;
+
+import com.google.common.base.Preconditions;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
+import org.opendaylight.protocol.pcep.spi.TlvParser;
+import org.opendaylight.protocol.pcep.spi.TlvSerializer;
+import org.opendaylight.protocol.pcep.spi.TlvUtil;
+import org.opendaylight.protocol.util.ByteArray;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.speaker.entity.id.tlv.SpeakerEntityId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.speaker.entity.id.tlv.SpeakerEntityIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
+
+public class SpeakerEntityIdTlvParser implements TlvParser, TlvSerializer {
+
+    public static final int TYPE = 24;
+
+    @Override
+    public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
+        Preconditions.checkArgument(tlv instanceof SpeakerEntityId, "Tlv object is not instance of SpeakerEntityId.");
+        final ByteBuf body = Unpooled.buffer();
+        body.writeBytes(((SpeakerEntityId) tlv).getSpeakerEntityIdValue());
+        TlvUtil.formatTlv(TYPE, body, buffer);
+    }
+
+    @Override
+    public Tlv parseTlv(final ByteBuf buffer) throws PCEPDeserializerException {
+        if (buffer == null) {
+            return null;
+        }
+        return new SpeakerEntityIdBuilder().setSpeakerEntityIdValue(ByteArray.readAllBytes(buffer)).build();
+    }
+
+}
index e5231cf1d2fe36f2580d3cfab6668f0025b05bae..0dee0b652e135e8671a510601116ce97e0d7b18e 100644 (file)
@@ -10,8 +10,14 @@ package org.opendaylight.protocol.pcep.sync.optimizations;
 import java.util.ArrayList;
 import java.util.List;
 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.rev150714.lsp.db.version.tlv.LspDbVersion;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.speaker.entity.id.tlv.SpeakerEntityId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
 
 public class SyncOptimizationsActivator extends AbstractPCEPExtensionProviderActivator {
 
@@ -19,6 +25,22 @@ public class SyncOptimizationsActivator extends AbstractPCEPExtensionProviderAct
     protected List<AutoCloseable> startImpl(final PCEPExtensionProviderContext context) {
         final List<AutoCloseable> regs = new ArrayList<>();
 
+        final TlvRegistry tlvReg = context.getTlvHandlerRegistry();
+        final VendorInformationTlvRegistry viTlvReg = context.getVendorInformationTlvRegistry();
+        regs.add(context.registerObjectParser(SyncOptimizationsLspObjectParser.CLASS, SyncOptimizationsLspObjectParser.TYPE,
+            new SyncOptimizationsLspObjectParser(tlvReg, viTlvReg)));
+        regs.add(context.registerObjectSerializer(Lsp.class, new SyncOptimizationsLspObjectParser(tlvReg, viTlvReg)));
+
+        regs.add(context.registerObjectParser(SyncOptimizationsOpenObjectParser.CLASS, SyncOptimizationsOpenObjectParser.TYPE,
+            new SyncOptimizationsOpenObjectParser(tlvReg, viTlvReg)));
+        regs.add(context.registerObjectSerializer(Open.class, new SyncOptimizationsOpenObjectParser(tlvReg, viTlvReg)));
+
+        regs.add(context.registerTlvParser(LspDbVersionTlvParser.TYPE, new LspDbVersionTlvParser()));
+        regs.add(context.registerTlvSerializer(LspDbVersion.class, new LspDbVersionTlvParser()));
+
+        regs.add(context.registerTlvParser(SpeakerEntityIdTlvParser.TYPE, new SpeakerEntityIdTlvParser()));
+        regs.add(context.registerTlvSerializer(SpeakerEntityId.class, new SpeakerEntityIdTlvParser()));
+
         regs.add(context.registerTlvParser(SyncOptimizationsCapabilityTlvParser.TYPE, new SyncOptimizationsCapabilityTlvParser()));
         regs.add(context.registerTlvSerializer(Stateful.class, new SyncOptimizationsCapabilityTlvParser()));
 
diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsLspObjectParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsLspObjectParser.java
new file mode 100644 (file)
index 0000000..33f651f
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * 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.pcep.sync.optimizations;
+
+import com.google.common.base.Preconditions;
+import io.netty.buffer.ByteBuf;
+import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00LspObjectParser;
+import org.opendaylight.protocol.pcep.spi.TlvRegistry;
+import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.LspDbVersionTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs1Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersion;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.Tlvs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
+
+public class SyncOptimizationsLspObjectParser extends CInitiated00LspObjectParser {
+
+    public SyncOptimizationsLspObjectParser(final TlvRegistry tlvReg, final VendorInformationTlvRegistry viTlvReg) {
+        super(tlvReg, viTlvReg);
+    }
+
+    @Override
+    public void serializeTlvs(final Tlvs tlvs, final ByteBuf body) {
+        super.serializeTlvs(tlvs, body);
+        serializeAugmentation(tlvs.getAugmentation(Tlvs1.class), body);
+    }
+
+    private void serializeAugmentation(final Tlvs1 tlv, final ByteBuf body) {
+        if (tlv == null) {
+            return;
+        }
+        Preconditions.checkArgument(tlv instanceof LspDbVersionTlv, "TLV object is not instance of LspDbVersionTlv.");
+        final LspDbVersionTlv dbVersion = tlv;
+        serializeTlv(dbVersion.getLspDbVersion(), body);
+    }
+
+    @Override
+    public void addTlv(final TlvsBuilder tbuilder, final Tlv tlv) {
+        super.addTlv(tbuilder, tlv);
+        final Tlvs1Builder syncOptTlvsBuilder = new Tlvs1Builder();
+        if (tbuilder.getAugmentation(Tlvs1.class) != null) {
+            final Tlvs1 t = tbuilder.getAugmentation(Tlvs1.class);
+            if (t.getLspDbVersion() != null) {
+                syncOptTlvsBuilder.setLspDbVersion(t.getLspDbVersion());
+            }
+        }
+        if (tlv instanceof LspDbVersion) {
+            syncOptTlvsBuilder.setLspDbVersion((LspDbVersion) tlv);
+        }
+        tbuilder.addAugmentation(Tlvs1.class, syncOptTlvsBuilder.build());
+    }
+}
diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsOpenObjectParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/sync/optimizations/SyncOptimizationsOpenObjectParser.java
new file mode 100644 (file)
index 0000000..5fd3487
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * 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.pcep.sync.optimizations;
+
+import io.netty.buffer.ByteBuf;
+import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07OpenObjectParser;
+import org.opendaylight.protocol.pcep.spi.TlvRegistry;
+import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs3;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs3Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersion;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.speaker.entity.id.tlv.SpeakerEntityId;
+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.open.object.open.Tlvs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder;
+
+public class SyncOptimizationsOpenObjectParser extends Stateful07OpenObjectParser {
+
+    public SyncOptimizationsOpenObjectParser(final TlvRegistry tlvReg, final VendorInformationTlvRegistry viTlvReg) {
+        super(tlvReg, viTlvReg);
+    }
+
+
+    @Override
+    public void addTlv(final TlvsBuilder tbuilder, final Tlv tlv) {
+        super.addTlv(tbuilder, tlv);
+        final Tlvs3Builder syncOptTlvsBuilder = new Tlvs3Builder();
+        if (tbuilder.getAugmentation(Tlvs3.class) != null) {
+            final Tlvs3 t = tbuilder.getAugmentation(Tlvs3.class);
+            if (t.getLspDbVersion() != null) {
+                syncOptTlvsBuilder.setLspDbVersion(t.getLspDbVersion());
+            }
+            if (t.getSpeakerEntityId() != null) {
+                syncOptTlvsBuilder.setSpeakerEntityId(t.getSpeakerEntityId());
+            }
+        }
+        if (tlv instanceof LspDbVersion) {
+            syncOptTlvsBuilder.setLspDbVersion((LspDbVersion) tlv);
+        }
+        if (tlv instanceof SpeakerEntityId) {
+            syncOptTlvsBuilder.setSpeakerEntityId((SpeakerEntityId) tlv);
+        }
+        tbuilder.addAugmentation(Tlvs3.class, syncOptTlvsBuilder.build());
+    }
+
+    @Override
+    public void serializeTlvs(final Tlvs tlvs, final ByteBuf body) {
+        if (tlvs == null) {
+            return;
+        }
+        super.serializeTlvs(tlvs, body);
+        if (tlvs.getAugmentation(Tlvs3.class) != null) {
+            final Tlvs3 syncOptTlvs = tlvs.getAugmentation(Tlvs3.class);
+            if (syncOptTlvs.getLspDbVersion() != null) {
+                serializeTlv(syncOptTlvs.getLspDbVersion(), body);
+            }
+            if (syncOptTlvs.getSpeakerEntityId() != null) {
+                serializeTlv(syncOptTlvs.getSpeakerEntityId(), body);
+            }
+        }
+    }
+}
index cd6551b987a4861b8dce8ba94dbc2ee564f74ffc..d5020ea1ec975bdafb3cb9c0a60d80d9d86c0b04 100644 (file)
@@ -49,6 +49,24 @@ module odl-pcep-sync-optimizations {
         }
     }
 
+    grouping lsp-db-version-tlv {
+        container lsp-db-version {
+            uses pcep:tlv;
+            leaf lsp-db-version-value {
+                type uint64;
+            }
+        }
+    }
+
+    grouping speaker-entity-id-tlv {
+        container speaker-entity-id {
+            uses pcep:tlv;
+            leaf speaker-entity-id-value {
+                type binary;
+            }
+        }
+    }
+
     augment "/msg:open/msg:open-message/msg:open/msg:tlvs/stateful:stateful" {
         uses sync-optimizations-capability-tlv;
     }
@@ -56,4 +74,34 @@ module odl-pcep-sync-optimizations {
     augment "/nt:network-topology/nt:topology/nt:node/topo:path-computation-client/topo:stateful-tlv/stateful:stateful" {
         uses sync-optimizations-capability-tlv;
     }
+
+    augment "/msg:open/msg:open-message/msg:open/msg:tlvs" {
+        uses lsp-db-version-tlv;
+        uses speaker-entity-id-tlv;
+    }
+
+    augment "/stateful:pcupd/stateful:pcupd-message/stateful:updates/stateful:lsp/stateful:tlvs" {
+        uses lsp-db-version-tlv;
+    }
+
+    augment "/stateful:pcrpt/stateful:pcrpt-message/stateful:reports/stateful:lsp/stateful:tlvs" {
+        uses lsp-db-version-tlv;
+    }
+
+    augment "/nt:network-topology/nt:topology/nt:node/topo:path-computation-client/topo:reported-lsp/topo:path/stateful:lsp/stateful:tlvs" {
+        uses lsp-db-version-tlv;
+    }
+
+    augment "/topo:add-lsp/topo:input/topo:arguments/stateful:lsp/stateful:tlvs" {
+        uses lsp-db-version-tlv;
+    }
+
+    augment "/topo:update-lsp/topo:input/topo:arguments/stateful:lsp/stateful:tlvs" {
+        uses lsp-db-version-tlv;
+    }
+
+    augment "/msg:pcerr/msg:pcerr-message/msg:error-type/msg:session-case/msg:session/msg:open/msg:tlvs" {
+        uses lsp-db-version-tlv;
+        uses speaker-entity-id-tlv;
+    }
 }
\ No newline at end of file
index 0abe24da5b76af4b394060306c37216c4905fc86..bcf67a780bc4f5c5265f86845fbb90e060b668a6 100644 (file)
@@ -9,25 +9,36 @@ package org.opendaylight.protocol.pcep.ietf;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
-
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import java.io.IOException;
+import java.math.BigInteger;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00LspObjectParser;
 import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00SrpObjectParser;
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07LspObjectParser;
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07LspaObjectParser;
-import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07OpenObjectParser;
+import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
+import org.opendaylight.protocol.pcep.impl.Activator;
 import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvRegistry;
 import org.opendaylight.protocol.pcep.spi.VendorInformationTlvRegistry;
 import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
+import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
+import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsActivator;
+import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsLspObjectParser;
+import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsOpenObjectParser;
 import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.protocol.util.Ipv4Util;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Stateful1Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs3;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs3Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersion;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.lsp.db.version.tlv.LspDbVersionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.speaker.entity.id.tlv.SpeakerEntityIdBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
@@ -59,7 +70,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.types.rev131005.ProtocolVersion;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
-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.path.setup.type.tlv.PathSetupTypeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AttributeFilter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.Ipv4ExtendedTunnelId;
@@ -68,68 +78,96 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev
 
 public class PCEPObjectParserTest {
 
-    private TlvRegistry tlvRegistry;
+    private SimplePCEPExtensionProviderContext ctx;
+    private Activator act;
 
+    private TlvRegistry tlvRegistry;
     private VendorInformationTlvRegistry viTlvRegistry;
 
+    private static final byte[] DB_VERSION = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
+    private static final byte[] SPEAKER_ID = {0x01, 0x02, 0x03, 0x04};
+
     @Before
     public void setUp() throws Exception {
+        this.ctx = new SimplePCEPExtensionProviderContext();
+        this.act = new Activator();
+        this.act.start(this.ctx);
         this.tlvRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getTlvHandlerRegistry();
         this.viTlvRegistry = ServiceLoaderPCEPExtensionProviderContext.getSingletonInstance().getVendorInformationTlvRegistry();
     }
 
     @Test
     public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException {
-        final Stateful07OpenObjectParser parser = new Stateful07OpenObjectParser(this.tlvRegistry, this.viTlvRegistry);
-        final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin"));
+        try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
+            a.start(this.ctx);
 
-        final OpenBuilder builder = new OpenBuilder();
-        builder.setProcessingRule(false);
-        builder.setIgnore(false);
-        builder.setVersion(new ProtocolVersion((short) 1));
-        builder.setKeepalive((short) 30);
-        builder.setDeadTimer((short) 120);
-        builder.setSessionId((short) 1);
+            final SyncOptimizationsOpenObjectParser parser = new SyncOptimizationsOpenObjectParser(this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry());
+            final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin"));
 
-        final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build();
+            final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder();
+            builder.setProcessingRule(false);
+            builder.setIgnore(false);
+            builder.setVersion(new ProtocolVersion((short) 1));
+            builder.setKeepalive((short) 30);
+            builder.setDeadTimer((short) 120);
+            builder.setSessionId((short) 1);
 
-        final Tlvs1Builder statBuilder = new Tlvs1Builder();
-        statBuilder.setStateful(tlv1);
+            final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).addAugmentation(Stateful1.class, new Stateful1Builder().build()).build();
 
-        builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(
-                Tlvs1.class, statBuilder.build()).build());
+            final Tlvs1Builder statBuilder = new Tlvs1Builder();
+            statBuilder.setStateful(tlv1);
 
-        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));
+            final Tlvs3Builder syncOptBuilder = new Tlvs3Builder();
+            syncOptBuilder.setLspDbVersion(new LspDbVersionBuilder().setLspDbVersionValue(new BigInteger(DB_VERSION)).build());
+            syncOptBuilder.setSpeakerEntityId(new SpeakerEntityIdBuilder().setSpeakerEntityIdValue(SPEAKER_ID).build());
+
+            builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder()
+                .addAugmentation(Tlvs1.class, statBuilder.build())
+                .addAugmentation(Tlvs3.class, 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));
+        }
     }
 
     @Test
     public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException {
-        final CInitiated00LspObjectParser parser = new CInitiated00LspObjectParser(this.tlvRegistry, this.viTlvRegistry);
-        final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin"));
+        try (StatefulActivator a = new StatefulActivator();
+            SyncOptimizationsActivator a2 = new SyncOptimizationsActivator()) {
+            a.start(this.ctx);
+            a2.start(this.ctx);
 
-        final LspBuilder builder = new LspBuilder();
-        builder.setProcessingRule(true);
-        builder.setIgnore(true);
-        builder.setAdministrative(true);
-        builder.setDelegate(false);
-        builder.setRemove(true);
-        builder.setSync(false);
-        builder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
-        builder.setOperational(OperationalStatus.GoingDown);
-        builder.setPlspId(new PlspId(0x12345L));
+            final SyncOptimizationsLspObjectParser parser = new SyncOptimizationsLspObjectParser(this.ctx.getTlvHandlerRegistry(), this.ctx.getVendorInformationTlvRegistry());
+            final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin"));
 
-        final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
-        final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
-                new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName("Med".getBytes())).build();
-        builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
-                tlv1).setSymbolicPathName(tlv2).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));
+            final LspBuilder builder = new LspBuilder();
+            builder.setProcessingRule(true);
+            builder.setIgnore(true);
+            builder.setAdministrative(true);
+            builder.setDelegate(false);
+            builder.setRemove(true);
+            builder.setSync(false);
+            builder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
+            builder.setOperational(OperationalStatus.GoingDown);
+            builder.setPlspId(new PlspId(0x12345L));
+
+            final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
+            final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
+                    new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName("Med".getBytes())).build();
+            final LspDbVersion lspDbVersion = new LspDbVersionBuilder().setLspDbVersionValue(new BigInteger(DB_VERSION)).build();
+            builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
+                    tlv1).setSymbolicPathName(tlv2)
+                    .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.Tlvs1.class, new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.pcep.sync.optimizations.rev150714.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));
+        }
     }
 
     @Test
index 0b28aae333ea2afe04eab810f9f4050ed7bad2de..2ee7d24e2741f0e2c76d5385005954aaac0a80fe 100755 (executable)
Binary files a/pcep/ietf-stateful07/src/test/resources/PCEPLspObject1WithTLV.bin and b/pcep/ietf-stateful07/src/test/resources/PCEPLspObject1WithTLV.bin differ
index 388f09874fcf75203cea354a1d1ff1a19e87eb7b..56d83ad541169b87a95505fdabce190f56d062b1 100644 (file)
Binary files a/pcep/ietf-stateful07/src/test/resources/PCEPOpenObject1.bin and b/pcep/ietf-stateful07/src/test/resources/PCEPOpenObject1.bin differ