BUG-4594: ISIS PseudoNode NPE 36/29436/4
authorClaudio D. Gasparini <cgaspari@cisco.com>
Mon, 9 Nov 2015 11:07:28 +0000 (12:07 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 9 Nov 2015 21:07:21 +0000 (21:07 +0000)
NPE caused beacuse of wrong container.
Fix by:  add missing is-is-router Container
which contains ISO System ID. Affecting
isis-node-case and isis-pseudonode-case.

Change-Id: I256c36ea980326bd39db4e8189ef092e20491c54
Signed-off-by: Claudio D. Gasparini <cgaspari@cisco.com>
bgp/linkstate/src/main/java/org/opendaylight/protocol/bgp/linkstate/nlri/NodeNlriParser.java
bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateNlriParserTest.java
bgp/linkstate/src/test/java/org/opendaylight/protocol/bgp/linkstate/LinkstateRIBSupportTest.java

index a17f224c9ac931251c6319a3aff4ce3a2d33a062..12d2b9c2b723f7c9bafc7cdd80c2462110fdf863 100644 (file)
@@ -109,6 +109,8 @@ public final class NodeNlriParser {
     @VisibleForTesting
     public static final NodeIdentifier ISO_SYSTEM_NID = new NodeIdentifier(QName.cachedReference(QName.create(NodeDescriptors.QNAME, "iso-system-id")));
     @VisibleForTesting
+    public static final NodeIdentifier ISIS_ROUTER_NID = new NodeIdentifier(QName.cachedReference(QName.create(NodeDescriptors.QNAME, "is-is-router-identifier")));
+    @VisibleForTesting
     public static final NodeIdentifier PSN_NID = new NodeIdentifier(QName.cachedReference(QName.create(NodeDescriptors.QNAME, "psn")));
     @VisibleForTesting
     public static final NodeIdentifier OSPF_ROUTER_NID = new NodeIdentifier(QName.cachedReference(QName.create(NodeDescriptors.QNAME, "ospf-router-id")));
@@ -252,12 +254,15 @@ public final class NodeNlriParser {
     }
 
     private static IsisPseudonodeCase serializeIsisPseudoNode(final ContainerNode pseudoIsisNode) {
-        final IsisPseudonodeCaseBuilder builder = new IsisPseudonodeCaseBuilder();
-        final IsisPseudonodeBuilder nodeBuilder = new IsisPseudonodeBuilder();
         final IsIsRouterIdentifierBuilder isisRouterId = new IsIsRouterIdentifierBuilder();
-        if (pseudoIsisNode.getChild(ISO_SYSTEM_NID).isPresent()) {
-            isisRouterId.setIsoSystemId(new IsoSystemIdentifier((byte[]) pseudoIsisNode.getChild(ISO_SYSTEM_NID).get().getValue()));
+        if (pseudoIsisNode.getChild(ISIS_ROUTER_NID).isPresent()) {
+            final ContainerNode isisRouterNid = (ContainerNode) pseudoIsisNode.getChild(ISIS_ROUTER_NID).get();
+            if (isisRouterNid.getChild(ISO_SYSTEM_NID).isPresent()) {
+                isisRouterId.setIsoSystemId(new IsoSystemIdentifier((byte[]) isisRouterNid.getChild(ISO_SYSTEM_NID).get().getValue()));
+            }
         }
+
+        final IsisPseudonodeBuilder nodeBuilder = new IsisPseudonodeBuilder();
         nodeBuilder.setIsIsRouterIdentifier(isisRouterId.build());
 
         if (pseudoIsisNode.getChild(PSN_NID).isPresent()) {
@@ -265,8 +270,8 @@ public final class NodeNlriParser {
         } else {
             nodeBuilder.setPsn((short) 0);
         }
-        builder.setIsisPseudonode(nodeBuilder.build());
-        return builder.build();
+
+        return new IsisPseudonodeCaseBuilder().setIsisPseudonode(nodeBuilder.build()).build();
     }
 
     private static OspfNodeCase serializeOspfNode(final ContainerNode ospf) {
index 67c9ff68016a5ce83529ab9d02c77d99cff6ffa3..391d0146aa08bd9f540b096ee6bc3df1e7e006c8 100644 (file)
@@ -211,8 +211,13 @@ public class LinkstateNlriParserTest {
 
         final ImmutableLeafNodeBuilder<byte[]> isoSystemID = new ImmutableLeafNodeBuilder<>();
         isoSystemID.withNodeIdentifier(NodeNlriParser.ISO_SYSTEM_NID);
-        isoSystemID.withValue(new byte[] { 0, 0, 0, 0, 0, (byte) 0x39 });
-        isisNode.addChild(isoSystemID.build());
+        isoSystemID.withValue(new byte[]{0, 0, 0, 0, 0, (byte) 0x39});
+
+        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> isisPseudoRouter = Builders.containerBuilder();
+        isisPseudoRouter.withNodeIdentifier(NodeNlriParser.ISIS_ROUTER_NID);
+        isisPseudoRouter.addChild(isoSystemID.build());
+
+        isisNode.addChild(isisPseudoRouter.build());
         isisNode.addChild(Builders.leafBuilder().withNodeIdentifier(NodeNlriParser.PSN_NID).withValue((short) 5).build());
         crouterId.addChild(isisNode.build());
 
index 371d7276ecb2ca59b2899d6af8318b4dfd85b8f0..e0f53b31a36583e71740652ee8561864598912a3 100644 (file)
@@ -150,7 +150,12 @@ public class LinkstateRIBSupportTest {
         final ImmutableLeafNodeBuilder<byte[]> isoSystemID = new ImmutableLeafNodeBuilder<>();
         isoSystemID.withNodeIdentifier(NodeNlriParser.ISO_SYSTEM_NID);
         isoSystemID.withValue(new byte[]{0, 0, 0, 0, 0, (byte) 0x39});
-        isisNode.addChild(isoSystemID.build());
+
+        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> isisRouter = Builders.containerBuilder();
+        isisRouter.withNodeIdentifier(NodeNlriParser.ISIS_ROUTER_NID);
+        isisRouter.addChild(isoSystemID.build());
+
+        isisNode.addChild(isisRouter.build());
         isisNode.addChild(Builders.leafBuilder().withNodeIdentifier(NodeNlriParser.PSN_NID).withValue((short) 5).build());
         crouterId.addChild(isisNode.build());