Merge "BUG-2383 : fixed various small bugs in end-to-end RIB integration"
authorRobert Varga <nite@hq.sk>
Tue, 7 Apr 2015 15:25:13 +0000 (15:25 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 7 Apr 2015 15:25:13 +0000 (15:25 +0000)
pcep/pcc-mock/src/main/java/org/opendaylight/protocol/pcep/pcc/mock/Main.java
pcep/pcc-mock/src/main/java/org/opendaylight/protocol/pcep/pcc/mock/MsgBuilderUtil.java
pcep/pcc-mock/src/main/java/org/opendaylight/protocol/pcep/pcc/mock/PCCDispatcher.java
pcep/pcc-mock/src/main/java/org/opendaylight/protocol/pcep/pcc/mock/SimpleSessionListener.java
pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing/SegmentRoutingActivator.java
pcep/segment-routing/src/test/java/org/opendaylight/protocol/pcep/segment/routing/SrObjectParserTest.java
pcep/topology-provider/src/test/java/org/opendaylight/bgpcep/pcep/topology/provider/Stateful07TopologySessionListenerTest.java

index 74d8e526fba9e397008067bcc1ce2f4af97ac67c..6b032b94203d8223da061c5ac2fe511cc9022770 100644 (file)
@@ -24,9 +24,12 @@ import java.net.UnknownHostException;
 import java.util.Arrays;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
-import org.opendaylight.protocol.framework.ReconnectImmediatelyStrategy;
+import org.opendaylight.protocol.framework.NeverReconnectStrategy;
+import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
 import org.opendaylight.protocol.framework.SessionListenerFactory;
 import org.opendaylight.protocol.framework.SessionNegotiatorFactory;
+import org.opendaylight.protocol.framework.TimedReconnectStrategy;
 import org.opendaylight.protocol.pcep.PCEPSessionListener;
 import org.opendaylight.protocol.pcep.ietf.initiated00.CrabbeInitiatedActivator;
 import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
@@ -70,6 +73,7 @@ public final class Main {
         short ka = DEFAULT_KEEP_ALIVE;
         short dt = DEFAULT_DEAD_TIMER;
         String password = null;
+        int reconnectTime = -1;
 
         getRootLogger(lc).setLevel(ch.qos.logback.classic.Level.INFO);
         int argIdx = 0;
@@ -92,17 +96,19 @@ public final class Main {
                 dt = Short.valueOf(args[++argIdx]);
             } else if (args[argIdx].equals("--password")) {
                 password = args[++argIdx];
+            } else if (args[argIdx].equals("--reconnect")) {
+                reconnectTime = Integer.valueOf(args[++argIdx]).intValue() * 1000;
             } else {
                 LOG.warn("WARNING: Unrecognized argument: {}", args[argIdx]);
             }
             argIdx++;
         }
-        createPCCs(lsps, pcError, pccCount, localAddress, remoteAddress, ka, dt, password);
+        createPCCs(lsps, pcError, pccCount, localAddress, remoteAddress, ka, dt, password, reconnectTime);
     }
 
     public static void createPCCs(final int lspsPerPcc, final boolean pcerr, final int pccCount,
             final InetSocketAddress localAddress, final List<InetSocketAddress> remoteAddress, final short keepalive, final short deadtimer,
-            final String password) throws InterruptedException, ExecutionException {
+            final String password, final int reconnectTime) throws InterruptedException, ExecutionException {
         startActivators();
         InetAddress currentAddress = localAddress.getAddress();
         final Open openMessage = getOpenMessage(keepalive, deadtimer);
@@ -110,17 +116,18 @@ public final class Main {
                 getSessionNegotiatorFactory(openMessage));
         for (int i = 0; i < pccCount; i++) {
             createPCC(lspsPerPcc, pcerr, new InetSocketAddress(currentAddress, localAddress.getPort()),
-                    remoteAddress, openMessage, pccDispatcher, password);
+                    remoteAddress, openMessage, pccDispatcher, password, reconnectTime);
             currentAddress = InetAddresses.increment(currentAddress);
         }
     }
 
+    @SuppressWarnings("deprecation")
     private static void createPCC(final int lspsPerPcc, final boolean pcerr, final InetSocketAddress localAddress,
             final List<InetSocketAddress> remoteAddress, final Open openMessage, final PCCDispatcher pccDispatcher,
-            final String password) throws InterruptedException, ExecutionException {
+            final String password, final int reconnectTime) throws InterruptedException, ExecutionException {
         final SessionNegotiatorFactory<Message, PCEPSessionImpl, PCEPSessionListener> snf = getSessionNegotiatorFactory(openMessage);
         for (final InetSocketAddress pceAddress : remoteAddress) {
-            pccDispatcher.createClient(localAddress, pceAddress, new ReconnectImmediatelyStrategy(GlobalEventExecutor.INSTANCE, RECONNECT_STRATEGY_TIMEOUT), new SessionListenerFactory<PCEPSessionListener>() {
+            pccDispatcher.createClient(localAddress, pceAddress, reconnectTime == -1 ? getNeverReconnectStrategyFactory() : getTimedReconnectStrategyFactory(reconnectTime), new SessionListenerFactory<PCEPSessionListener>() {
                 @Override
                 public PCEPSessionListener getSessionListener() {
                     return new SimpleSessionListener(lspsPerPcc, pcerr, localAddress.getAddress());
@@ -129,6 +136,7 @@ public final class Main {
         }
     }
 
+    @SuppressWarnings("deprecation")
     private static SessionNegotiatorFactory<Message, PCEPSessionImpl, PCEPSessionListener> getSessionNegotiatorFactory(final Open openMessage) {
         return new DefaultPCEPSessionNegotiatorFactory(openMessage, 0);
     }
@@ -182,4 +190,26 @@ public final class Main {
         activator.start(ctx);
     }
 
+    @SuppressWarnings("deprecation")
+    private static ReconnectStrategyFactory getNeverReconnectStrategyFactory() {
+        return new ReconnectStrategyFactory() {
+
+            @Override
+            public ReconnectStrategy createReconnectStrategy() {
+                return new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, RECONNECT_STRATEGY_TIMEOUT);
+            }
+        };
+    }
+
+    @SuppressWarnings("deprecation")
+    private static ReconnectStrategyFactory getTimedReconnectStrategyFactory(final int reconnectTime) {
+        return new ReconnectStrategyFactory() {
+
+            @Override
+            public ReconnectStrategy createReconnectStrategy() {
+                return new TimedReconnectStrategy(GlobalEventExecutor.INSTANCE, RECONNECT_STRATEGY_TIMEOUT, reconnectTime, 1.0, null, null, null);
+            }
+        };
+    }
+
 }
index 2945c3d8f235eb62fbf3310fb2bfac8084a36749..40ad4b0af8ec5d48eb2f26cdfbeec3f0c2938581 100644 (file)
@@ -109,8 +109,8 @@ public final class MsgBuilderUtil {
         return pathBuilder.build();
     }
 
-    public static Tlvs createLspTlvs(final long lspId, final boolean symbolicPathName, String tunnelEndpoint,
-            String tunnelSender, String extendedTunnelAddress) {
+    public static Tlvs createLspTlvs(final long lspId, final boolean symbolicPathName, final String tunnelEndpoint,
+            final String tunnelSender, final String extendedTunnelAddress, final Optional<byte[]> symbolicName) {
         final TlvsBuilder tlvs = new TlvsBuilder().setLspIdentifiers(new LspIdentifiersBuilder()
                 .setLspId(new LspId(lspId))
                 .setAddressFamily(
@@ -122,9 +122,14 @@ public final class MsgBuilderUtil {
                                                 new Ipv4ExtendedTunnelId(extendedTunnelAddress))
                                         .build()).build()).setTunnelId(new TunnelId((int) lspId)).build());
         if (symbolicPathName) {
-            final String pathName = "pcc_" + tunnelSender + "_tunnel_" + lspId;
+            final byte[] pathName;
+            if (symbolicName.isPresent()) {
+                pathName = symbolicName.get();
+            } else {
+                pathName = ("pcc_" + tunnelSender + "_tunnel_" + lspId).getBytes(Charsets.UTF_8);
+            }
             tlvs.setSymbolicPathName(new SymbolicPathNameBuilder().setPathName(
-                    new SymbolicPathName(pathName.getBytes(Charsets.UTF_8))).build());
+                    new SymbolicPathName(pathName)).build());
         }
         return tlvs.build();
     }
index c1d410d3d5331fd7c764c17b5fda3164642424fe..7592305d3e5f6e430ddadfa806f4e8be8b5cac70 100644 (file)
@@ -11,10 +11,9 @@ package org.opendaylight.protocol.pcep.pcc.mock;
 import io.netty.bootstrap.Bootstrap;
 import io.netty.channel.nio.NioEventLoopGroup;
 import io.netty.channel.socket.SocketChannel;
-import io.netty.util.concurrent.Future;
 import io.netty.util.concurrent.Promise;
 import java.net.InetSocketAddress;
-import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
 import org.opendaylight.protocol.framework.SessionListenerFactory;
 import org.opendaylight.protocol.framework.SessionNegotiatorFactory;
 import org.opendaylight.protocol.pcep.PCEPSessionListener;
@@ -63,12 +62,12 @@ public final class PCCDispatcher extends PCEPDispatcherImpl {
         }
     }
 
-    public synchronized Future<PCEPSessionImpl> createClient(final InetSocketAddress localAddress, final InetSocketAddress remoteAddress,
-            final ReconnectStrategy strategy, final SessionListenerFactory<PCEPSessionListener> listenerFactory,
+    public synchronized void createClient(final InetSocketAddress localAddress, final InetSocketAddress remoteAddress,
+            final ReconnectStrategyFactory strategyFactory, final SessionListenerFactory<PCEPSessionListener> listenerFactory,
             final SessionNegotiatorFactory<Message, PCEPSessionImpl, PCEPSessionListener> negotiatorFactory, final KeyMapping keys) {
         this.localAddress = localAddress;
         this.keys = keys;
-        final Future<PCEPSessionImpl> futureClient = super.createClient(remoteAddress, strategy, new PipelineInitializer<PCEPSessionImpl>() {
+        super.createReconnectingClient(remoteAddress, strategyFactory, new PipelineInitializer<PCEPSessionImpl>() {
             @Override
             public void initializeChannel(final SocketChannel ch, final Promise<PCEPSessionImpl> promise) {
                 ch.pipeline().addLast(PCCDispatcher.this.factory.getDecoders());
@@ -79,7 +78,6 @@ public final class PCCDispatcher extends PCEPDispatcherImpl {
         });
         this.localAddress = null;
         this.keys = null;
-        return futureClient;
     }
 
     private static final class DeafultKeyAccessFactory {
index ef001933a3cd07e4d7c6f4b3cefde641c559db8c..cb84261e91b54c629cdf8583c3051a956b3a73ae 100644 (file)
@@ -21,9 +21,12 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import java.net.InetAddress;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicLong;
+import javax.annotation.concurrent.GuardedBy;
 import org.opendaylight.protocol.pcep.PCEPSession;
 import org.opendaylight.protocol.pcep.PCEPSessionListener;
 import org.opendaylight.protocol.pcep.PCEPTerminationReason;
@@ -40,7 +43,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.rev131222.PlspId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
 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.ietf.stateful.rev131222.pcupd.message.pcupd.message.Updates;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
@@ -66,6 +68,8 @@ public class SimpleSessionListener implements PCEPSessionListener {
     private final boolean pcError;
     private final String address;
     private final AtomicLong plspIDs;
+    @GuardedBy("this")
+    private final Map<Long, byte[]> pathNames = new HashMap<>();
 
     public SimpleSessionListener(final int lspsCount, final boolean pcError, final InetAddress address) {
         Preconditions.checkArgument(lspsCount >= 0);
@@ -85,8 +89,9 @@ public class SimpleSessionListener implements PCEPSessionListener {
             if (this.pcError) {
                 session.sendMessage(MsgBuilderUtil.createErrorMsg(getRandomError(), srpId));
             } else {
-                final Tlvs tlvs = createLspTlvs(updates.getLsp().getPlspId().getValue(), false,
-                        getDestinationAddress(updates.getPath().getEro().getSubobject()), this.address, this.address);
+                final Tlvs tlvs = createLspTlvs(updates.getLsp().getPlspId().getValue(), true,
+                        getDestinationAddress(updates.getPath().getEro().getSubobject()), this.address, this.address,
+                        Optional.fromNullable(pathNames.get(updates.getLsp().getPlspId().getValue())));
                 final Pcrpt pcRpt = createPcRtpMessage(new LspBuilder(updates.getLsp()).setTlvs(tlvs).build(),
                         Optional.fromNullable(createSrp(srpId)), updToRptPath(updates.getPath()));
                 session.sendMessage(pcRpt);
@@ -100,14 +105,17 @@ public class SimpleSessionListener implements PCEPSessionListener {
                 final Pcrpt pcRpt;
                 if (request.getSrp().getAugmentation(Srp1.class) != null && request.getSrp().getAugmentation(Srp1.class).isRemove()) {
                     pcRpt = createPcRtpMessage(request.getLsp(), Optional.fromNullable(request.getSrp()), reqToRptPath(request));
+                    this.pathNames.remove(request.getLsp().getPlspId().getValue());
                 } else {
                     final LspBuilder lspBuilder = new LspBuilder(request.getLsp());
                     lspBuilder.setPlspId(new PlspId(this.plspIDs.incrementAndGet()));
                     lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(true).build());
-                    final Tlvs tlvs = createLspTlvs(lspBuilder.getPlspId().getValue(), false,
-                            ((Ipv4Case) request.getEndpointsObj().getAddressFamily()).getIpv4().getDestinationIpv4Address().getValue(), this.address, this.address);
-                    lspBuilder.setTlvs(new TlvsBuilder(tlvs).setSymbolicPathName(request.getLsp().getTlvs().getSymbolicPathName()).build());
+                    final Tlvs tlvs = createLspTlvs(lspBuilder.getPlspId().getValue(), true,
+                            ((Ipv4Case) request.getEndpointsObj().getAddressFamily()).getIpv4().getDestinationIpv4Address().getValue(), this.address, this.address,
+                            Optional.of(request.getLsp().getTlvs().getSymbolicPathName().getPathName().getValue()));
+                    lspBuilder.setTlvs(tlvs);
                     pcRpt = createPcRtpMessage(lspBuilder.build(), Optional.fromNullable(request.getSrp()), reqToRptPath(request));
+                    this.pathNames.put(lspBuilder.getPlspId().getValue(), tlvs.getSymbolicPathName().getPathName().getValue());
                 }
                 session.sendMessage(pcRpt);
             }
@@ -119,7 +127,7 @@ public class SimpleSessionListener implements PCEPSessionListener {
         LOG.debug("Session up.");
         for (int i = 1; i <= this.lspsCount; i++) {
             final Tlvs tlvs = MsgBuilderUtil.createLspTlvs(i, true, ENDPOINT_ADDRESS, this.address,
-                    this.address);
+                    this.address, Optional.<byte[]>absent());
             session.sendMessage(createPcRtpMessage(
                     createLsp(i, true, Optional.<Tlvs> fromNullable(tlvs)), Optional.<Srp> absent(),
                     createPath(Lists.newArrayList(DEFAULT_ENDPOINT_HOP))));
index a42e2690afcf06bae023fab658f2de76b5eabb1a..48b37fcf4c89401d68c3add4649777a1e483771e 100644 (file)
@@ -34,10 +34,57 @@ public class SegmentRoutingActivator extends AbstractPCEPExtensionProviderActiva
         regs.add(context.registerTlvSerializer(SrPceCapability.class, new SrPceCapabilityTlvParser()));
 
         /* Subobjects */
-        regs.add(context.registerEROSubobjectParser(SrEroSubobjectParser.TYPE, new SrEroSubobjectParser()));
-        regs.add(context.registerEROSubobjectSerializer(SrEroType.class, new SrEroSubobjectParser()));
-        regs.add(context.registerRROSubobjectParser(SrRroSubobjectParser.TYPE, new SrRroSubobjectParser()));
-        regs.add(context.registerRROSubobjectSerializer(SrRroType.class, new SrRroSubobjectParser()));
+        final SrEroSubobjectParser srEroSubobjectParser = new SrEroSubobjectParser();
+        regs.add(context.registerEROSubobjectParser(SrEroSubobjectParser.TYPE, srEroSubobjectParser));
+        regs.add(context.registerEROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.network.topology.topology.node.path.computation.client.reported.lsp.path.ero.subobject.subobject.type.SrEroType.class,
+                srEroSubobjectParser));
+        regs.add(context.registerEROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcinitiate.pcinitiate.message.requests.ero.subobject.subobject.type.SrEroType.class,
+                srEroSubobjectParser));
+        regs.add(context.registerEROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcrep.pcrep.message.replies.result.success._case.success.paths.ero.subobject.subobject.type.SrEroType.class,
+                srEroSubobjectParser));
+        regs.add(context.registerEROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcrpt.pcrpt.message.reports.path.ero.subobject.subobject.type.SrEroType.class,
+                srEroSubobjectParser));
+        regs.add(context.registerEROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcupd.pcupd.message.updates.path.ero.subobject.subobject.type.SrEroType.class,
+                srEroSubobjectParser));
+        regs.add(context.registerEROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.update.lsp.input.arguments.ero.subobject.subobject.type.SrEroType.class,
+                srEroSubobjectParser));
+        regs.add(context.registerEROSubobjectSerializer(SrEroType.class, srEroSubobjectParser));
+
+        final SrRroSubobjectParser srRroSubobjectParser = new SrRroSubobjectParser();
+        regs.add(context.registerRROSubobjectParser(SrRroSubobjectParser.TYPE, srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.network.topology.topology.node.path.computation.client.reported.lsp.path.rro.subobject.subobject.type.SrRroType.class,
+                srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcinitiate.pcinitiate.message.requests.rro.subobject.subobject.type.SrRroType.class,
+                srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcrep.pcrep.message.replies.result.failure._case.rro.subobject.subobject.type.SrRroType.class,
+                srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcreq.pcreq.message.requests.segment.computation.p2p.reported.route.rro.subobject.subobject.type.SrRroType.class,
+                srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcrpt.pcrpt.message.reports.path.rro.subobject.subobject.type.SrRroType.class,
+                srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcupd.pcupd.message.updates.path.rro.subobject.subobject.type.SrRroType.class,
+                srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.update.lsp.input.arguments.rro.subobject.subobject.type.SrRroType.class, srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcrep.pcrep.message.replies.result.success._case.success.paths.rro.subobject.subobject.type.SrRroType.class,
+                srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(
+                org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.pcreq.pcreq.message.requests.segment.computation.p2p.rro.subobject.subobject.type.SrRroType.class,
+                srRroSubobjectParser));
+        regs.add(context.registerRROSubobjectSerializer(SrRroType.class, srRroSubobjectParser));
 
         /* Objects */
         final TlvRegistry tlvReg = context.getTlvHandlerRegistry();
index 902cd5e742334adbeb7835a62605c338f881f24d..221a1722112d9432304a22132bcc3cf78db5bc55 100644 (file)
@@ -123,4 +123,27 @@ public class SrObjectParserTest {
         assertArrayEquals(srEroObjectBytes, ByteArray.getAllBytes(buffer));
     }
 
+    @Test
+    public void testSrEroSerializerWithUpdateLspAugmentation() throws PCEPDeserializerException {
+        final PCEPExplicitRouteObjectParser parser = new PCEPExplicitRouteObjectParser(this.ctx.getEROSubobjectHandlerRegistry());
+
+        final EroBuilder builder = new EroBuilder();
+        builder.setProcessingRule(false);
+        builder.setIgnore(false);
+
+        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.update.lsp.input.arguments.ero.subobject.subobject.type.SrEroTypeBuilder srEroSubBuilder =
+                new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.segment.routing.rev150112.update.lsp.input.arguments.ero.subobject.subobject.type.SrEroTypeBuilder();
+        srEroSubBuilder.setCFlag(false);
+        srEroSubBuilder.setMFlag(false);
+        srEroSubBuilder.setSidType(SidType.Ipv4NodeId);
+        srEroSubBuilder.setSid(123456L);
+        srEroSubBuilder.setNai(new IpNodeIdBuilder().setIpAddress(new IpAddress(new Ipv4Address("74.125.43.99"))).build());
+        final SubobjectBuilder subobjBuilder = new SubobjectBuilder().setSubobjectType(srEroSubBuilder.build()).setLoose(false);
+        builder.setSubobject(Lists.newArrayList(subobjBuilder.build()));
+
+        final ByteBuf buffer = Unpooled.buffer();
+        parser.serializeObject(builder.build(), buffer);
+        assertArrayEquals(srEroObjectBytes, ByteArray.getAllBytes(buffer));
+    }
+
 }
index 53be117e81cf56697f03885fd92530accd82589c..ab00b1490332371072e0f2d40cf98e315c18ef19 100644 (file)
@@ -129,7 +129,7 @@ public class Stateful07TopologySessionListenerTest extends AbstractPCEPSessionTe
         final Requests req = pcinitiate.getPcinitiateMessage().getRequests().get(0);
         final long srpId = req.getSrp().getOperationId().getValue();
         final Tlvs tlvs = createLspTlvs(req.getLsp().getPlspId().getValue(), true,
-                TEST_ADDRESS, TEST_ADDRESS, TEST_ADDRESS);
+                TEST_ADDRESS, TEST_ADDRESS, TEST_ADDRESS, Optional.<byte[]>absent());
         final Pcrpt pcRpt = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req.getLsp()).setTlvs(tlvs).setPlspId(new PlspId(1L)).setSync(false).setRemove(false).setOperational(OperationalStatus.Active).build(), Optional.of(MsgBuilderUtil.createSrp(srpId)), MsgBuilderUtil.createPath(req.getEro().getSubobject()));
         final Pcrpt esm = MsgBuilderUtil.createPcRtpMessage(new LspBuilder().setSync(false).build(), Optional.of(MsgBuilderUtil.createSrp(0L)), null);
         this.listener.onMessage(this.session, esm);
@@ -176,7 +176,7 @@ public class Stateful07TopologySessionListenerTest extends AbstractPCEPSessionTe
         final Updates upd = updateMsg.getPcupdMessage().getUpdates().get(0);
         final long srpId2 = upd.getSrp().getOperationId().getValue();
         final Tlvs tlvs2 = createLspTlvs(upd.getLsp().getPlspId().getValue(), false,
-                NEW_DESTINATION_ADDRESS, TEST_ADDRESS, TEST_ADDRESS);
+                NEW_DESTINATION_ADDRESS, TEST_ADDRESS, TEST_ADDRESS, Optional.<byte[]>absent());
         final Pcrpt pcRpt2 = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(upd.getLsp()).setTlvs(tlvs2).setSync(true).setRemove(false).setOperational(OperationalStatus.Active).build(), Optional.of(MsgBuilderUtil.createSrp(srpId2)), MsgBuilderUtil.createPath(upd.getPath().getEro().getSubobject()));
         this.listener.onMessage(this.session, pcRpt2);
         //check updated lsp
@@ -219,7 +219,7 @@ public class Stateful07TopologySessionListenerTest extends AbstractPCEPSessionTe
         final Requests req2 = pcinitiate2.getPcinitiateMessage().getRequests().get(0);
         final long srpId3 = req2.getSrp().getOperationId().getValue();
         final Tlvs tlvs3 = createLspTlvs(req2.getLsp().getPlspId().getValue(), false,
-                TEST_ADDRESS, TEST_ADDRESS, TEST_ADDRESS);
+                TEST_ADDRESS, TEST_ADDRESS, TEST_ADDRESS, Optional.<byte[]>absent());
         final Pcrpt pcRpt3 = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req2.getLsp()).setTlvs(tlvs3).setRemove(true).setSync(true).setOperational(OperationalStatus.Down).build(), Optional.of(MsgBuilderUtil.createSrp(srpId3)), MsgBuilderUtil.createPath(Collections.<Subobject>emptyList()));
         this.listener.onMessage(this.session, pcRpt3);
         // check if lsp was removed
@@ -286,7 +286,7 @@ public class Stateful07TopologySessionListenerTest extends AbstractPCEPSessionTe
         final Requests req = pcinitiate.getPcinitiateMessage().getRequests().get(0);
         final long srpId = req.getSrp().getOperationId().getValue();
         final Tlvs tlvs = createLspTlvs(req.getLsp().getPlspId().getValue(), true,
-                TEST_ADDRESS, TEST_ADDRESS, TEST_ADDRESS);
+                TEST_ADDRESS, TEST_ADDRESS, TEST_ADDRESS, Optional.<byte[]>absent());
         final Pcrpt pcRpt = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req.getLsp()).setTlvs(tlvs).setSync(true).setRemove(false).setOperational(OperationalStatus.Active).build(), Optional.of(MsgBuilderUtil.createSrp(srpId)), MsgBuilderUtil.createPath(req.getEro().getSubobject()));
         this.listener.onMessage(this.session, pcRpt);
         assertEquals(1, getTopology().get().getNode().size());
@@ -346,7 +346,7 @@ public class Stateful07TopologySessionListenerTest extends AbstractPCEPSessionTe
         final Requests req = pcinitiate.getPcinitiateMessage().getRequests().get(0);
         final long srpId = req.getSrp().getOperationId().getValue();
         final Tlvs tlvs = createLspTlvs(req.getLsp().getPlspId().getValue(), true,
-                TEST_ADDRESS, TEST_ADDRESS, TEST_ADDRESS);
+                TEST_ADDRESS, TEST_ADDRESS, TEST_ADDRESS, Optional.<byte[]>absent());
         final Pcrpt pcRpt = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req.getLsp()).setTlvs(tlvs).setPlspId(new PlspId(1L)).setSync(false).setRemove(false).setOperational(OperationalStatus.Active).build(), Optional.of(MsgBuilderUtil.createSrp(srpId)), MsgBuilderUtil.createPath(req.getEro().getSubobject()));
         this.listener.onMessage(this.session, pcRpt);