summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaros Marsalek <mmarsale@cisco.com>2016-05-11 14:29:27 +0200
committerMaros Marsalek <mmarsale@cisco.com>2016-05-13 06:59:38 +0000
commit7ebd4ac29fb72b80af0b481f8ea604085ded1bc8 (patch)
treed320d3f41668d42cbb9ee118952a21a802a19ca0
parentc6e09d4309ede503d7947fb817691d9e391a8794 (diff)
HONEYCOMB-37: Add unit test for Vxlan tunnel state customizer
Change-Id: I8a3499233c2d200b0bb0c1e2534ea1dfdbb5f12c Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
-rw-r--r--v3po/api/src/main/yang/v3po.yang1
-rw-r--r--v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfaces/VxlanCustomizer.java5
-rw-r--r--v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/interfacesstate/VxlanCustomizerTest.java140
-rw-r--r--v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/test/RootReaderCustomizerTest.java2
4 files changed, 145 insertions, 3 deletions
diff --git a/v3po/api/src/main/yang/v3po.yang b/v3po/api/src/main/yang/v3po.yang
index ca335aa1c..7746d1ac2 100644
--- a/v3po/api/src/main/yang/v3po.yang
+++ b/v3po/api/src/main/yang/v3po.yang
@@ -344,7 +344,6 @@ module v3po {
type inet:ip-address;
}
-
leaf vni {
type uint32;
}
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfaces/VxlanCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfaces/VxlanCustomizer.java
index 2034a0301..6244a20d3 100644
--- a/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfaces/VxlanCustomizer.java
+++ b/v3po/v3po2vpp/src/main/java/io/fd/honeycomb/v3po/translate/v3po/interfaces/VxlanCustomizer.java
@@ -91,12 +91,15 @@ public class VxlanCustomizer extends FutureJVppCustomizer implements ChildWriter
try {
deleteVxlanTunnel(id.firstKeyOf(Interface.class).getName(), dataBefore);
} catch (VppApiInvocationException e) {
- LOG.warn("Delete of Vxlan failed", e);
+ LOG.warn("Delete of Vxlan tunnel failed", e);
throw new WriteFailedException.DeleteFailedException(id, e);
}
}
private void createVxlanTunnel(final String swIfName, final Vxlan vxlan) throws VppApiInvocationException {
+ // TODO check that the type of interface is vxlan-tunnel (it is expressed in YANG, but not validated on DataTree level)
+ // DO the same for other interface aguments/types
+
final byte isIpv6 = (byte) (isIpv6(vxlan) ? 1 : 0);
final InetAddress srcAddress = InetAddresses.forString(getAddressString(vxlan.getSrc()));
final InetAddress dstAddress = InetAddresses.forString(getAddressString(vxlan.getDst()));
diff --git a/v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/interfacesstate/VxlanCustomizerTest.java b/v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/interfacesstate/VxlanCustomizerTest.java
new file mode 100644
index 000000000..760e85b26
--- /dev/null
+++ b/v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/interfacesstate/VxlanCustomizerTest.java
@@ -0,0 +1,140 @@
+/*
+ * 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.v3po.translate.v3po.interfacesstate;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+import com.google.common.collect.Lists;
+import io.fd.honeycomb.v3po.translate.Context;
+import io.fd.honeycomb.v3po.translate.spi.read.RootReaderCustomizer;
+import io.fd.honeycomb.v3po.translate.v3po.test.ChildReaderCustomizerTest;
+import io.fd.honeycomb.v3po.translate.v3po.util.NamingContext;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import org.junit.Test;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceStateAugmentation;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.Vxlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces.state._interface.VxlanBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.openvpp.jvpp.dto.SwInterfaceDetails;
+import org.openvpp.jvpp.dto.VxlanTunnelDetails;
+import org.openvpp.jvpp.dto.VxlanTunnelDetailsReplyDump;
+import org.openvpp.jvpp.dto.VxlanTunnelDump;
+
+public class VxlanCustomizerTest extends ChildReaderCustomizerTest<Vxlan, VxlanBuilder> {
+
+ private NamingContext interfacesContext;
+ private Context ctx;
+ static final InstanceIdentifier<Vxlan> IID =
+ InstanceIdentifier.create(InterfacesState.class).child(Interface.class, new InterfaceKey("ifc1"))
+ .augmentation(VppInterfaceStateAugmentation.class).child(Vxlan.class);
+
+ public VxlanCustomizerTest() {
+ super(Vxlan.class);
+ }
+
+ @Override
+ public void setUpBefore() {
+ interfacesContext = new NamingContext("vxlan-tunnel");
+ interfacesContext.addName(0, "ifc1");
+
+ ctx = new Context();
+ final SwInterfaceDetails v = new SwInterfaceDetails();
+ v.interfaceName = "vxlan-tunnel4".getBytes();
+ final Map<Integer, SwInterfaceDetails> map = new HashMap<>();
+ map.put(0, v);
+ ctx.put(InterfaceCustomizer.DUMPED_IFCS_CONTEXT_KEY, map);
+ }
+
+ @Override
+ protected void setUpAfter() throws UnknownHostException {
+ final CompletableFuture<VxlanTunnelDetailsReplyDump> vxlanTunnelDetailsReplyDumpCompletionStage =
+ new CompletableFuture<>();
+
+ final VxlanTunnelDetailsReplyDump value = new VxlanTunnelDetailsReplyDump();
+ final VxlanTunnelDetails vxlanTunnelDetails = new VxlanTunnelDetails();
+ vxlanTunnelDetails.isIpv6 = 0;
+ vxlanTunnelDetails.decapNextIndex = 1;
+ vxlanTunnelDetails.dstAddress = InetAddress.getByName("1.2.3.4").getAddress();
+ vxlanTunnelDetails.srcAddress = InetAddress.getByName("1.2.3.5").getAddress();
+ vxlanTunnelDetails.encapVrfId = 55;
+ vxlanTunnelDetails.swIfIndex = 0;
+ vxlanTunnelDetails.vni = 9;
+
+ value.vxlanTunnelDetails = Lists.newArrayList(vxlanTunnelDetails);
+ vxlanTunnelDetailsReplyDumpCompletionStage.complete(value);
+
+ doReturn(vxlanTunnelDetailsReplyDumpCompletionStage).when(api).vxlanTunnelDump(any(VxlanTunnelDump.class));
+ }
+
+ @Test
+ public void testReadCurrentAttributes() throws Exception {
+ final VxlanBuilder builder = getCustomizer().getBuilder(IID);
+ getCustomizer().readCurrentAttributes(IID, builder, ctx);
+
+ assertEquals(9, builder.getVni().intValue());
+ assertEquals(55, builder.getEncapVrfId().intValue());
+
+ assertNull(builder.getSrc().getIpv6Address());
+ assertNotNull(builder.getSrc().getIpv4Address());
+ assertEquals("1.2.3.5", builder.getSrc().getIpv4Address().getValue());
+
+ assertNull(builder.getDst().getIpv6Address());
+ assertNotNull(builder.getDst().getIpv4Address());
+ assertEquals("1.2.3.4", builder.getDst().getIpv4Address().getValue());
+
+ verify(api).vxlanTunnelDump(any(VxlanTunnelDump.class));
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testReadCurrentAttributesVppNameNotCached() throws Exception {
+ InterfaceCustomizer.getCachedInterfaceDump(ctx).remove(0);
+
+ final VxlanBuilder builder = getCustomizer().getBuilder(IID);
+ getCustomizer().readCurrentAttributes(IID, builder, ctx);
+ }
+
+ @Test
+ public void testReadCurrentAttributesWrongType() throws Exception {
+ final SwInterfaceDetails v = new SwInterfaceDetails();
+ v.interfaceName = "tap-2".getBytes();
+ InterfaceCustomizer.getCachedInterfaceDump(ctx).put(0, v);
+
+ final VxlanBuilder builder = getCustomizer().getBuilder(IID);
+ getCustomizer().readCurrentAttributes(IID, builder, ctx);
+
+ // Should be ignored
+ verifyZeroInteractions(api);
+ }
+
+ @Override
+ protected RootReaderCustomizer<Vxlan, VxlanBuilder> initCustomizer() {
+ return new VxlanCustomizer(api, interfacesContext);
+ }
+} \ No newline at end of file
diff --git a/v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/test/RootReaderCustomizerTest.java b/v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/test/RootReaderCustomizerTest.java
index 76eb0fb3f..19d307ec9 100644
--- a/v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/test/RootReaderCustomizerTest.java
+++ b/v3po/v3po2vpp/src/test/java/io/fd/honeycomb/v3po/translate/v3po/test/RootReaderCustomizerTest.java
@@ -67,7 +67,7 @@ public abstract class RootReaderCustomizerTest<D extends DataObject, B extends B
/**
* Optional setup for subclasses. Invoked after customizer is initialized.
*/
- protected void setUpAfter() {
+ protected void setUpAfter() throws Exception {
}