HONEYCOMB-195: increase v3po coverage over 80%. WIP
[honeycomb.git] / v3po / v3po2vpp / src / test / java / io / fd / honeycomb / translate / v3po / interfaces / ip / Ipv4NeighbourCustomizerTest.java
index d7f9c0c..a3fff08 100644 (file)
 
 package io.fd.honeycomb.translate.v3po.interfaces.ip;
 
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.times;
+import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
-
-import com.google.common.io.BaseEncoding;
-import io.fd.honeycomb.translate.MappingContext;
-import io.fd.honeycomb.translate.v3po.test.ContextTestUtils;
+import io.fd.honeycomb.translate.v3po.util.Ipv4Translator;
 import io.fd.honeycomb.translate.v3po.util.NamingContext;
-import io.fd.honeycomb.translate.v3po.util.TranslateUtils;
-import io.fd.honeycomb.translate.write.WriteContext;
 import io.fd.honeycomb.translate.write.WriteFailedException;
-import java.util.concurrent.CompletableFuture;
-import org.junit.Before;
+import io.fd.honeycomb.vpp.test.write.WriterCustomizerTest;
 import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.naming.context.rev160513.contexts.naming.context.mappings.Mapping;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
@@ -47,100 +37,84 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev14061
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.NeighborBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.openvpp.jvpp.VppBaseCallException;
 import org.openvpp.jvpp.core.dto.IpNeighborAddDel;
 import org.openvpp.jvpp.core.dto.IpNeighborAddDelReply;
-import org.openvpp.jvpp.core.future.FutureJVppCore;
 
-public class Ipv4NeighbourCustomizerTest {
+public class Ipv4NeighbourCustomizerTest extends WriterCustomizerTest implements Ipv4Translator {
 
     private static final String IFC_CTX_NAME = "ifc-test-instance";
     private static final String IFACE_NAME = "parent";
     private static final int IFACE_ID = 5;
+    private static final InstanceIdentifier<Neighbor> IID =
+        InstanceIdentifier.create(Interfaces.class).child(Interface.class, new InterfaceKey(IFACE_NAME))
+            .augmentation(Interface1.class).child(Ipv4.class).child(Neighbor.class);
 
-    @Mock
-    private FutureJVppCore jvpp;
-
-    @Mock
-    private WriteContext context;
-
-    @Mock
-    private MappingContext mappingContext;
-
-    @Mock
-    private Mapping mapping;
-
-    private ArgumentCaptor<IpNeighborAddDel> requestCaptor;
     private Ipv4NeighbourCustomizer customizer;
-    private NamingContext namingContext;
-
-
-    @Before
-    public void init() {
-        MockitoAnnotations.initMocks(this);
-        when(context.getMappingContext()).thenReturn(mappingContext);
-
-        namingContext = new NamingContext("prefix", IFC_CTX_NAME);
-        ContextTestUtils.mockMapping(mappingContext, IFACE_NAME, IFACE_ID, IFC_CTX_NAME);
 
-        customizer = new Ipv4NeighbourCustomizer(jvpp,namingContext);
-
-        requestCaptor = ArgumentCaptor.forClass(IpNeighborAddDel.class);
-        CompletableFuture<IpNeighborAddDelReply> future = new CompletableFuture<>();
-        future.complete(new IpNeighborAddDelReply());
-        when(jvpp.ipNeighborAddDel(Mockito.any(IpNeighborAddDel.class))).thenReturn(future);
+    @Override
+    public void setUp() {
+        defineMapping(mappingContext, IFACE_NAME, IFACE_ID, IFC_CTX_NAME);
+        customizer = new Ipv4NeighbourCustomizer(api, new NamingContext("prefix", IFC_CTX_NAME));
     }
 
     @Test
     public void testWriteCurrentAttributes() throws WriteFailedException {
+        when(api.ipNeighborAddDel(any())).thenReturn(future(new IpNeighborAddDelReply()));
+        customizer.writeCurrentAttributes(IID, getData(), writeContext);
+        verify(api).ipNeighborAddDel(getExpectedRequest(true));
+    }
 
-        InterfaceKey intfKey = new InterfaceKey(IFACE_NAME);
-
-        InstanceIdentifier<Neighbor> id = InstanceIdentifier.builder(Interfaces.class).child(Interface.class, intfKey)
-                .augmentation(Interface1.class).child(Ipv4.class).child(Neighbor.class).build();
-
-        Ipv4AddressNoZone noZoneIp = new Ipv4AddressNoZone(new Ipv4Address("192.168.2.1"));
-        PhysAddress mac = new PhysAddress("aa:bb:cc:ee:11:22");
-
-        Neighbor data = new NeighborBuilder().setIp(noZoneIp).setLinkLayerAddress(mac).build();
-
-        customizer.writeCurrentAttributes(id, data, context);
-
-        verify(jvpp, times(1)).ipNeighborAddDel(requestCaptor.capture());
-
-        IpNeighborAddDel request = requestCaptor.getValue();
-
-        assertEquals(0, request.isIpv6);
-        assertEquals(1, request.isAdd);
-        assertEquals(1, request.isStatic);
-        assertEquals("1.2.168.192", TranslateUtils.arrayToIpv4AddressNoZone(request.dstAddress).getValue());
-        assertEquals("aabbccee1122", BaseEncoding.base16().lowerCase().encode(request.macAddress));
-        assertEquals(5, request.swIfIndex);
+    @Test
+    public void testWriteCurrentAttributesFailed() {
+        when(api.ipNeighborAddDel(any())).thenReturn(failedFuture());
+        try {
+            customizer.writeCurrentAttributes(IID, getData(), writeContext);
+        } catch (WriteFailedException e) {
+            assertTrue(e.getCause() instanceof VppBaseCallException);
+            verify(api).ipNeighborAddDel(getExpectedRequest(true));
+            return;
+        }
+        fail("WriteFailedException expected");
+    }
+    @Test(expected = UnsupportedOperationException.class)
+    public void testUpdateCurrentAttributes() throws WriteFailedException {
+        customizer.updateCurrentAttributes(IID, getData(), getData(), writeContext);
     }
 
     @Test
     public void testDeleteCurrentAttributes() throws WriteFailedException {
-        InterfaceKey intfKey = new InterfaceKey(IFACE_NAME);
-
-        InstanceIdentifier<Neighbor> id = InstanceIdentifier.builder(Interfaces.class).child(Interface.class, intfKey)
-                .augmentation(Interface1.class).child(Ipv4.class).child(Neighbor.class).build();
-
-        Ipv4AddressNoZone noZoneIp = new Ipv4AddressNoZone(new Ipv4Address("192.168.2.1"));
-        PhysAddress mac = new PhysAddress("aa:bb:cc:ee:11:22");
-
-        Neighbor data = new NeighborBuilder().setIp(noZoneIp).setLinkLayerAddress(mac).build();
-
-        customizer.deleteCurrentAttributes(id, data, context);
-
-        verify(jvpp, times(1)).ipNeighborAddDel(requestCaptor.capture());
-
-        IpNeighborAddDel request = requestCaptor.getValue();
+        when(api.ipNeighborAddDel(any())).thenReturn(future(new IpNeighborAddDelReply()));
+        customizer.deleteCurrentAttributes(IID, getData(), writeContext);
+        verify(api).ipNeighborAddDel(getExpectedRequest(false));
+    }
 
-        assertEquals(0, request.isIpv6);
-        assertEquals(0, request.isAdd);
-        assertEquals(1, request.isStatic);
-        assertEquals("1.2.168.192", TranslateUtils.arrayToIpv4AddressNoZone(request.dstAddress).getValue());
-        assertEquals("aabbccee1122", BaseEncoding.base16().lowerCase().encode(request.macAddress));
-        assertEquals(5, request.swIfIndex);
+    @Test
+    public void testDeleteCurrentAttributesFailed() {
+        when(api.ipNeighborAddDel(any())).thenReturn(failedFuture());
+        try {
+            customizer.deleteCurrentAttributes(IID, getData(), writeContext);
+        } catch (WriteFailedException e) {
+            assertTrue(e.getCause() instanceof VppBaseCallException);
+            verify(api).ipNeighborAddDel(getExpectedRequest(false));
+            return;
+        }
+        fail("WriteFailedException expected");
     }
 
+    private Neighbor getData() {
+        final Ipv4AddressNoZone noZoneIp = new Ipv4AddressNoZone(new Ipv4Address("192.168.2.1"));
+        final PhysAddress mac = new PhysAddress("aa:bb:cc:ee:11:22");
+        return new NeighborBuilder().setIp(noZoneIp).setLinkLayerAddress(mac).build();
+    }
+    private IpNeighborAddDel getExpectedRequest(final boolean isAdd) {
+        final IpNeighborAddDel request = new IpNeighborAddDel();
+        request.isIpv6 = 0;
+        request.isAdd = booleanToByte(isAdd);
+        request.isStatic = 1;
+        request.dstAddress = new byte[] {(byte) 192, (byte) 168, 2, 1};
+        request.macAddress = new byte[] {(byte) 0xaa, (byte) 0xbb, (byte) 0xcc, (byte) 0xee, 0x11, 0x22};
+        request.swIfIndex = IFACE_ID;
+        return request;
+    }
 }
\ No newline at end of file