Fix ClassifySession read NPE when NodeContext is missing
authorMarek Gradzki <[email protected]>
Wed, 14 Sep 2016 12:49:56 +0000 (14:49 +0200)
committerMarek Gradzki <[email protected]>
Wed, 14 Sep 2016 13:07:20 +0000 (13:07 +0000)
Change-Id: Ieca5ad125df5f26f82351871a0238e65be3e300c
Signed-off-by: Marek Gradzki <[email protected]>
v3po/v3po2vpp/src/main/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManagerImpl.java
v3po/v3po2vpp/src/test/java/io/fd/honeycomb/translate/v3po/vppclassifier/VppClassifierContextManagerImplTest.java

index 9f61ab0..e1bf501 100644 (file)
@@ -28,6 +28,7 @@ import io.fd.honeycomb.translate.read.ReaderFactory;
 import io.fd.honeycomb.translate.read.registry.ModifiableReaderRegistryBuilder;
 import io.fd.honeycomb.translate.util.RWUtils;
 import io.fd.honeycomb.translate.util.read.BindingBrokerReader;
+import java.util.List;
 import java.util.stream.Collector;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -149,7 +150,11 @@ public final class VppClassifierContextManagerImpl implements VppClassifierConte
         }
         final String tableName = getTableName(tableIndex, ctx);
         final Optional<ClassifyTableContext> tableCtx = ctx.read(getMappingIid(tableName));
-        return Optional.fromNullable(tableCtx.get().getNodeContext().stream()
+        final List<NodeContext> nodeContext = tableCtx.get().getNodeContext();
+        if (nodeContext == null) {
+            return Optional.absent();
+        }
+        return Optional.fromNullable(nodeContext.stream()
             .filter(n -> n.getIndex().equals(nodeIndex))
             .findFirst()
             .map(nodes -> nodes.getName())
index cbc0c38..3e198e0 100644 (file)
@@ -119,6 +119,14 @@ public class VppClassifierContextManagerImplTest {
         assertFalse(vppClassfierContext.getNodeName(TABLE_ID_0, 123, ctx).isPresent());
     }
 
+    @Test
+    public void testGetNodeNameMissingNodeCtx() throws Exception {
+        final ClassifyTableContext tableCtx = table(TABLE_ID_0, TABLE_NAME_0, "aa");
+        when(ctx.read(VPP_CLASSIFIER_CONTEXT_IID)).thenReturn(Optional.of(context(tableCtx)));
+        when(ctx.read(TABLE_IID_0)).thenReturn(Optional.of(tableCtx));
+        assertEquals(Optional.absent(), vppClassfierContext.getNodeName(TABLE_ID_0, 123, ctx));
+    }
+
     @Test
     public void testGetNodeName() throws Exception {
         final ClassifyTableContext tableCtx = table(TABLE_ID_0, TABLE_NAME_0, "aa", node("node123", 123));