Explicitly fail when classify table for given session is missing 67/14167/1
authorMarek Gradzki <[email protected]>
Mon, 13 Aug 2018 10:17:29 +0000 (12:17 +0200)
committerMarek Gradzki <[email protected]>
Mon, 13 Aug 2018 10:17:47 +0000 (12:17 +0200)
Change-Id: Ied737af2eb650f54fbaa5413eb0a586793d34e43
Signed-off-by: Marek Gradzki <[email protected]>
vpp-classifier/impl/src/main/java/io/fd/hc2vpp/vpp/classifier/write/ClassifySessionWriter.java
vpp-classifier/impl/src/test/java/io/fd/hc2vpp/vpp/classifier/write/ClassifySessionWriterTest.java

index 11a48ef..1e56afb 100644 (file)
@@ -113,8 +113,7 @@ public class ClassifySessionWriter extends VppNodeWriter
                 "Could not find classify table index for {} in the classify table context", tableName);
         final int tableIndex = classifyTableContext.getTableIndex(tableName, writeContext.getMappingContext());
 
-        final ClassifyTable classifyTable =
-                getClassifyTable(writeContext, id.firstIdentifierOf(ClassifyTable.class), isAdd);
+        final ClassifyTable classifyTable = getClassifyTable(writeContext, id, isAdd);
         final ClassifyAddDelSession request = getClassifyAddDelSessionRequest(isAdd, classifySession, tableIndex);
 
         // TODO(HC2VPP-9): registry of next_node translators would allow to weaken dependency between policer
@@ -143,14 +142,18 @@ public class ClassifySessionWriter extends VppNodeWriter
         request.opaqueIndex = policer.getColorClassfier().getIntValue();
     }
 
-    private ClassifyTable getClassifyTable(final WriteContext writeContext,
-                                           @Nonnull final InstanceIdentifier<ClassifyTable> id,
+    private ClassifyTable getClassifyTable(@Nonnull final WriteContext writeContext,
+                                           @Nonnull final InstanceIdentifier<ClassifySession> id,
                                            final boolean isAdd) {
+        final InstanceIdentifier<ClassifyTable>  tableId = id.firstIdentifierOf(ClassifyTable.class);
         final Optional<ClassifyTable> classifyTable;
         if (isAdd) {
-            classifyTable = writeContext.readAfter(id);
+            classifyTable = writeContext.readAfter(tableId);
         } else {
-            classifyTable = writeContext.readBefore(id);
+            classifyTable = writeContext.readBefore(tableId);
+        }
+        if (!classifyTable.isPresent()) {
+            throw new IllegalStateException("Missing classify table for session " + id);
         }
         return classifyTable.get();
     }
index b59acdb..ccb0270 100644 (file)
@@ -181,4 +181,13 @@ public class ClassifySessionWriterTest extends WriterCustomizerTest {
 
         customizer.deleteCurrentAttributes(id, classifySession, writeContext);
     }
+
+    @Test(expected = IllegalStateException.class)
+    public void testDeleteMisssingTable() throws WriteFailedException {
+        when(writeContext.readAfter(ArgumentMatchers.any())).thenReturn(Optional.absent());
+        final String match = "00:00:00:00:00:00:01:02:03:04:05:06:00:00:00:00";
+        final ClassifySession classifySession = generateClassifySession(SESSION_INDEX, match);
+        final InstanceIdentifier<ClassifySession> id = getClassifySessionId(TABLE_NAME, match);
+        customizer.writeCurrentAttributes(id, classifySession, writeContext);
+    }
 }
\ No newline at end of file