Add NSH entry test case. HONEYCOMB-198
authorHongjun Ni <[email protected]>
Wed, 12 Oct 2016 16:23:09 +0000 (00:23 +0800)
committerMarek Gradzki <[email protected]>
Wed, 12 Oct 2016 08:15:12 +0000 (08:15 +0000)
Change-Id: Ie11b030f3071fdeca4b8fda5bcb63f6ba1de3b80
Signed-off-by: Hongjun Ni <[email protected]>
nsh/impl/pom.xml
nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/config/NshEntryWriterCustomizerTest.java [new file with mode: 0644]
nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/oper/NshEntryReaderCustomizerTest.java [new file with mode: 0644]

index 8a39f7f..81138cd 100644 (file)
       <artifactId>vpp-translate-utils</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>io.fd.honeycomb.vpp</groupId>
+      <artifactId>vpp-translate-test</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>io.fd.honeycomb</groupId>
       <artifactId>minimal-distribution</artifactId>
       <artifactId>v3po2vpp</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+       <groupId>org.mockito</groupId>
+       <artifactId>mockito-core</artifactId>
+       <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
diff --git a/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/config/NshEntryWriterCustomizerTest.java b/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/config/NshEntryWriterCustomizerTest.java
new file mode 100644 (file)
index 0000000..ef0fa11
--- /dev/null
@@ -0,0 +1,191 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.vppnsh.impl.config;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import io.fd.honeycomb.translate.vpp.util.NamingContext;
+import io.fd.honeycomb.translate.write.WriteFailedException;
+import io.fd.honeycomb.vpp.test.write.WriterCustomizerTest;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Ethernet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Ipv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Ipv6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.MdType1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.NshMdType1Augment;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.NshMdType1AugmentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.NshEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.nsh.entries.NshEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.nsh.entries.NshEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.nsh.entries.NshEntryKey;
+
+import io.fd.vpp.jvpp.VppBaseCallException;
+import io.fd.vpp.jvpp.nsh.dto.NshAddDelEntry;
+import io.fd.vpp.jvpp.nsh.dto.NshAddDelEntryReply;
+import io.fd.vpp.jvpp.nsh.future.FutureJVppNsh;
+
+public class NshEntryWriterCustomizerTest extends WriterCustomizerTest {
+
+    private static final String ENTRY_CTX_NAME = "nsh-entry-instance";
+    private static final int ENTRY_INDEX = 1;
+    private static final String ENTRY_NAME = "entry1";
+
+    @Mock
+    protected FutureJVppNsh jvppNsh;
+
+    private NamingContext nshContext;
+
+    private NshEntryWriterCustomizer customizer;
+
+    @Override
+    public void setUp() throws Exception {
+        nshContext = new NamingContext("nsh_entry", ENTRY_CTX_NAME);
+        defineMapping(mappingContext, ENTRY_NAME, ENTRY_INDEX, ENTRY_CTX_NAME);
+
+        customizer = new NshEntryWriterCustomizer(jvppNsh, nshContext);
+    }
+
+    private static NshEntry generateNshEntry(final String name) {
+        final NshEntryBuilder builder = new NshEntryBuilder();
+        builder.setName(name);
+        builder.setKey(new NshEntryKey(name));
+        builder.setVersion((short) 0);
+        builder.setLength((short) 6);
+        builder.setMdType(MdType1.class);
+        builder.setNextProtocol(Ethernet.class);
+        builder.setNsp(123L);
+        builder.setNsi((short) 4);
+
+        final NshMdType1AugmentBuilder augmentBuilder = new NshMdType1AugmentBuilder();
+        augmentBuilder.setC1((long) 1);
+        augmentBuilder.setC2((long) 2);
+        augmentBuilder.setC3((long) 3);
+        augmentBuilder.setC4((long) 4);
+        builder.addAugmentation(NshMdType1Augment.class, augmentBuilder.build());
+
+        return builder.build();
+    }
+
+    private static InstanceIdentifier<NshEntry> getNshEntryId(final String name) {
+        return InstanceIdentifier.create(NshEntries.class)
+                .child(NshEntry.class, new NshEntryKey(name));
+    }
+
+    private void whenNshAddDelEntryThenSuccess() {
+        final NshAddDelEntryReply reply = new NshAddDelEntryReply();
+        reply.entryIndex = ENTRY_INDEX;
+        doReturn(future(reply)).when(jvppNsh).nshAddDelEntry(any(NshAddDelEntry.class));
+    }
+
+    private void whenNshAddDelEntryThenFailure() {
+        doReturn(failedFuture()).when(jvppNsh).nshAddDelEntry(any(NshAddDelEntry.class));
+    }
+
+    private static NshAddDelEntry generateNshAddDelEntry(final byte isAdd) {
+        final NshAddDelEntry request = new NshAddDelEntry();
+        request.isAdd = isAdd;
+        request.verOC = 0;
+        request.length = 6;
+        request.mdType = 1;
+        request.nextProtocol = 3;
+        request.nspNsi = 123<<8 | 4;
+        request.c1 = 1;
+        request.c2 = 2;
+        request.c3 = 3;
+        request.c4 = 4;
+
+        return request;
+    }
+
+    @Test
+    public void testCreate() throws Exception {
+        final NshEntry nshEntry = generateNshEntry(ENTRY_NAME);
+        final InstanceIdentifier<NshEntry> id = getNshEntryId(ENTRY_NAME);
+
+        whenNshAddDelEntryThenSuccess();
+
+        customizer.writeCurrentAttributes(id, nshEntry, writeContext);
+
+        verify(jvppNsh).nshAddDelEntry(generateNshAddDelEntry((byte) 1));
+
+    }
+
+    @Test
+    public void testCreateFailed() throws Exception {
+        final NshEntry nshEntry = generateNshEntry(ENTRY_NAME);
+        final InstanceIdentifier<NshEntry> id = getNshEntryId(ENTRY_NAME);
+
+        whenNshAddDelEntryThenFailure();
+
+        try {
+            customizer.writeCurrentAttributes(id, nshEntry, writeContext);
+        } catch (WriteFailedException e) {
+            assertTrue(e.getCause() instanceof VppBaseCallException);
+            verify(jvppNsh).nshAddDelEntry(generateNshAddDelEntry((byte) 1));
+
+            return;
+        }
+        fail("WriteFailedException.CreateFailedException was expected");
+    }
+
+    @Test
+    public void testDelete() throws Exception {
+        final NshEntry nshEntry = generateNshEntry(ENTRY_NAME);
+        final InstanceIdentifier<NshEntry> id = getNshEntryId(ENTRY_NAME);
+
+        whenNshAddDelEntryThenSuccess();
+
+        customizer.deleteCurrentAttributes(id, nshEntry, writeContext);
+
+        verify(jvppNsh).nshAddDelEntry(generateNshAddDelEntry((byte) 0));
+    }
+
+    @Test
+    public void testDeleteFailed() throws Exception {
+        final NshEntry nshEntry = generateNshEntry(ENTRY_NAME);
+        final InstanceIdentifier<NshEntry> id = getNshEntryId(ENTRY_NAME);
+
+        whenNshAddDelEntryThenFailure();
+
+        try {
+            customizer.deleteCurrentAttributes(id, nshEntry, writeContext);
+        } catch (WriteFailedException e) {
+            assertTrue(e.getCause() instanceof VppBaseCallException);
+            verify(jvppNsh).nshAddDelEntry(generateNshAddDelEntry((byte) 0));
+            return;
+        }
+        fail("WriteFailedException.DeleteFailedException was expected");
+
+        customizer.deleteCurrentAttributes(id, nshEntry, writeContext);
+    }
+
+    @Test(expected = UnsupportedOperationException.class)
+    public void testUpdate() throws Exception {
+        final NshEntry nshEntryBefore = generateNshEntry(ENTRY_NAME);
+        final InstanceIdentifier<NshEntry> id = getNshEntryId(ENTRY_NAME);
+        customizer.updateCurrentAttributes(id, nshEntryBefore, new NshEntryBuilder().build(), writeContext);
+    }
+}
\ No newline at end of file
diff --git a/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/oper/NshEntryReaderCustomizerTest.java b/nsh/impl/src/test/java/io/fd/honeycomb/vppnsh/impl/oper/NshEntryReaderCustomizerTest.java
new file mode 100644 (file)
index 0000000..3171081
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.vppnsh.impl.oper;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.Lists;
+import io.fd.honeycomb.translate.read.ReadFailedException;
+import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
+import io.fd.honeycomb.vpp.test.read.ListReaderCustomizerTest;
+import java.util.List;
+import org.junit.Test;
+import org.mockito.Mock;
+
+import io.fd.honeycomb.translate.vpp.util.NamingContext;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev150603.vpp.classifier.state.ClassifyTableKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Ethernet;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Ipv4;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.Ipv6;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.MdType1;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.NshMdType1StateAugment;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.NshMdType1StateAugmentBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.VppNshState;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.VppNshStateBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.NshEntries;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.NshEntriesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.nsh.entries.NshEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.nsh.entries.NshEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.nsh.rev160624.vpp.nsh.state.nsh.entries.NshEntryKey;
+
+import io.fd.vpp.jvpp.VppBaseCallException;
+import io.fd.vpp.jvpp.nsh.dto.NshEntryDetails;
+import io.fd.vpp.jvpp.nsh.dto.NshEntryDetailsReplyDump;
+import io.fd.vpp.jvpp.nsh.dto.NshEntryDump;
+import io.fd.vpp.jvpp.nsh.future.FutureJVppNsh;
+
+
+public class NshEntryReaderCustomizerTest extends
+    ListReaderCustomizerTest<NshEntry, NshEntryKey, NshEntryBuilder> {
+
+    private static final String ENTRY_CTX_NAME = "nsh-entry-instance";
+    private static final int ENTRY_INDEX_1 = 1;
+    private static final String ENTRY_NAME_1 = "entry1";
+    private static final int ENTRY_INDEX_2 = 2;
+    private static final String ENTRY_NAME_2 = "entry2";
+
+    @Mock
+    protected FutureJVppNsh jvppNsh;
+
+    private NamingContext nshContext;
+
+    public NshEntryReaderCustomizerTest() {
+        super(NshEntry.class, NshEntriesBuilder.class);
+    }
+
+    @Override
+    protected ReaderCustomizer<NshEntry, NshEntryBuilder> initCustomizer() {
+        return new NshEntryReaderCustomizer(jvppNsh, nshContext);
+    }
+
+    private static InstanceIdentifier<NshEntry> getNshEntryId(final String name) {
+        return InstanceIdentifier.create(NshEntries.class)
+            .child(NshEntry.class, new NshEntryKey(name));
+    }
+
+    @Override
+    public void setUp() throws VppBaseCallException {
+        nshContext = new NamingContext("nsh_entry", ENTRY_CTX_NAME);
+        defineMapping(mappingContext, ENTRY_NAME_1, ENTRY_INDEX_1, ENTRY_CTX_NAME);
+
+        final NshEntryDetailsReplyDump reply = new NshEntryDetailsReplyDump();
+        final NshEntryDetails nshEntryDetails = new NshEntryDetails();
+        nshEntryDetails.verOC = 0;
+        nshEntryDetails.length = 6;
+        nshEntryDetails.mdType = 1;
+        nshEntryDetails.nextProtocol = 3;
+        nshEntryDetails.nspNsi = (123<<8 | 4);
+        nshEntryDetails.c1 = 1;
+        nshEntryDetails.c2 = 2;
+        nshEntryDetails.c3 = 3;
+        nshEntryDetails.c4 = 4;
+        reply.nshEntryDetails = Lists.newArrayList(nshEntryDetails);
+        doReturn(future(reply)).when(jvppNsh).nshEntryDump(any(NshEntryDump.class));
+    }
+
+    @Test
+    public void testreadCurrentAttributes() throws ReadFailedException {
+
+        NshEntryBuilder builder = new NshEntryBuilder();
+        getCustomizer().readCurrentAttributes(getNshEntryId(ENTRY_NAME_1), builder, ctx);
+
+        assertEquals(0, builder.getVersion().intValue());
+        assertEquals(6, builder.getLength().intValue());
+        assertEquals(MdType1.class, builder.getMdType());
+        assertEquals(Ethernet.class, builder.getNextProtocol());
+        assertEquals(123, builder.getNsp().intValue());
+        assertEquals(4, builder.getNsi().intValue());
+        assertEquals(1, builder.getAugmentation(NshMdType1StateAugment.class).getC1().intValue());
+        assertEquals(2, builder.getAugmentation(NshMdType1StateAugment.class).getC2().intValue());
+        assertEquals(3, builder.getAugmentation(NshMdType1StateAugment.class).getC3().intValue());
+        assertEquals(4, builder.getAugmentation(NshMdType1StateAugment.class).getC4().intValue());
+
+        verify(jvppNsh).nshEntryDump(any(NshEntryDump.class));
+    }
+}