From 5d1054b26f144948be321f30204b4b2a7cbbc03e Mon Sep 17 00:00:00 2001 From: Jan Srnicek Date: Tue, 4 Oct 2016 16:44:47 +0200 Subject: HONEYCOMB-138 - Lisp L2 Support Change-Id: Idff4776a64a88be2e0a45ab1927978e40876ea92 Signed-off-by: Jan Srnicek --- .../translate/write/AdjacencyCustomizerTest.java | 134 ++++++++++++++++++--- 1 file changed, 117 insertions(+), 17 deletions(-) (limited to 'lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/write/AdjacencyCustomizerTest.java') diff --git a/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/write/AdjacencyCustomizerTest.java b/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/write/AdjacencyCustomizerTest.java index b32b0bbe2..30c84cc9f 100644 --- a/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/write/AdjacencyCustomizerTest.java +++ b/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/write/AdjacencyCustomizerTest.java @@ -4,37 +4,53 @@ import static io.fd.honeycomb.lisp.translate.read.dump.executor.params.MappingsD import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import io.fd.honeycomb.lisp.context.util.EidMappingContext; +import io.fd.honeycomb.translate.MappingContext; import io.fd.honeycomb.vpp.test.write.WriterCustomizerTest; +import io.fd.vpp.jvpp.core.dto.LispAddDelAdjacency; +import io.fd.vpp.jvpp.core.dto.LispAddDelAdjacencyReply; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; +import org.mockito.Mock; 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.lisp.address.types.rev151105.InstanceIdType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4Afi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.MacBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.adjacencies.grouping.Adjacencies; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.adjacencies.grouping.adjacencies.Adjacency; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.adjacencies.grouping.adjacencies.AdjacencyBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.adjacencies.grouping.adjacencies.adjacency.LocalEidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.adjacencies.grouping.adjacencies.adjacency.RemoteEidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.RemoteMappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.RemoteMapping; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.EidTable; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.VniTable; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.VniTableKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.Adjacencies; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.adjacencies.Adjacency; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.adjacencies.AdjacencyBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.adjacencies.adjacency.LocalEidBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.adjacencies.adjacency.RemoteEidBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.BridgeDomainSubtable; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import io.fd.vpp.jvpp.core.dto.LispAddDelAdjacency; -import io.fd.vpp.jvpp.core.dto.LispAddDelAdjacencyReply; public class AdjacencyCustomizerTest extends WriterCustomizerTest { @Captor private ArgumentCaptor requestCaptor; + @Mock + private EidMappingContext localMappingContext; + + @Mock + private EidMappingContext remoteMappingContext; + private AdjacencyCustomizer customizer; private InstanceIdentifier emptyId; @@ -46,58 +62,142 @@ public class AdjacencyCustomizerTest extends WriterCustomizerTest { @Before public void init() { - customizer = new AdjacencyCustomizer(api); + customizer = new AdjacencyCustomizer(api, localMappingContext, remoteMappingContext); emptyId = InstanceIdentifier.create(Adjacency.class); validId = InstanceIdentifier.create(EidTable.class) .child(VniTable.class, new VniTableKey(2L)) + .child(BridgeDomainSubtable.class) + .child(RemoteMappings.class) + .child(RemoteMapping.class) .child(Adjacencies.class) .child(Adjacency.class); emptyData = new AdjacencyBuilder().build(); invalidData = new AdjacencyBuilder().setId("ID").setLocalEid( - new LocalEidBuilder().setAddress(new Ipv4Builder().setIpv4(new Ipv4Address("192.168.2.1")).build()) + new LocalEidBuilder() + .setVirtualNetworkId(new InstanceIdType(12L)) + .setAddressType(Ipv4Afi.class) + .setAddress(new Ipv4Builder().setIpv4(new Ipv4Address("192.168.2.1")).build()) .build()).setRemoteEid( - new RemoteEidBuilder().setAddress(new MacBuilder().setMac(new MacAddress("aa:aa:aa:aa:aa:aa")).build()) + new RemoteEidBuilder() + .setVirtualNetworkId(new InstanceIdType(12L)) + .setAddressType(MacAfi.class) + .setAddress(new MacBuilder().setMac(new MacAddress("aa:aa:aa:aa:aa:aa")).build()) .build()) .build(); validData = new AdjacencyBuilder().setId("ID").setLocalEid( - new LocalEidBuilder().setAddress(new Ipv4Builder().setIpv4(new Ipv4Address("192.168.2.1")).build()) + new LocalEidBuilder() + .setVirtualNetworkId(new InstanceIdType(12L)) + .setAddressType(Ipv4Afi.class) + .setAddress(new Ipv4Builder().setIpv4(new Ipv4Address("192.168.2.1")).build()) .build()).setRemoteEid( new RemoteEidBuilder() + .setVirtualNetworkId(new InstanceIdType(12L)) + .setAddressType(Ipv4Afi.class) .setAddress(new Ipv4Builder().setIpv4(new Ipv4Address("192.168.5.2")).build()).build()).build(); when(api.lispAddDelAdjacency(any())).thenReturn(future(new LispAddDelAdjacencyReply())); } - @Test(expected = IllegalStateException.class) + @Test public void writeCurrentAttributesNoKey() throws Exception { - customizer.writeCurrentAttributes(emptyId, emptyData, writeContext); + try { + customizer.writeCurrentAttributes(emptyId, emptyData, writeContext); + } catch (NullPointerException e) { + verify(api, times(0)).lispAddDelAdjacency(any()); + return; + } + + fail("Test should have failed while reading parent vni table id"); } - @Test(expected = IllegalStateException.class) + @Test public void writeCurrentAttributesInvalidCombination() throws Exception { - customizer.writeCurrentAttributes(emptyId, invalidData, writeContext); + try { + customizer.writeCurrentAttributes(emptyId, invalidData, writeContext); + } catch (NullPointerException e) { + verify(api, times(0)).lispAddDelAdjacency(any()); + return; + } + + fail("Test should have failed while reading parent vni table id"); } + @Test public void writeCurrentAttributes() throws Exception { + when(localMappingContext.containsId( + any(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.local.mappings.local.mapping.Eid.class), + any( + MappingContext.class))).thenReturn(true); + + when(remoteMappingContext.containsId( + any(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.Eid.class), + any( + MappingContext.class))).thenReturn(true); + customizer.writeCurrentAttributes(validId, validData, writeContext); verify(api, times(1)).lispAddDelAdjacency(requestCaptor.capture()); verifyRequest(requestCaptor.getValue(), 1, new byte[]{-64, -88, 2, 1}, 32, new byte[]{-64, -88, 5, 2}, 32, IPV4.getValue(), 2); } + @Test + public void writeCurrentAttributesNonExistingLocalMapping() throws Exception { + when(localMappingContext.containsId( + any(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.local.mappings.local.mapping.Eid.class), + any(MappingContext.class))).thenReturn(false); + + when(remoteMappingContext.containsId( + any(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.Eid.class), + any(MappingContext.class))).thenReturn(true); + try { + customizer.writeCurrentAttributes(validId, validData, writeContext); + } catch (IllegalStateException e) { + verify(api, times(0)).lispAddDelAdjacency(any()); + return; + } + + fail("Test should have failed while verifying local eid"); + } + + @Test + public void writeCurrentAttributesNonExistingRemoteMapping() throws Exception { + when(localMappingContext.containsId( + any(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.local.mappings.local.mapping.Eid.class), + any(MappingContext.class))).thenReturn(true); + + when(remoteMappingContext.containsId( + any(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.Eid.class), + any(MappingContext.class))).thenReturn(false); + try { + customizer.writeCurrentAttributes(validId, validData, writeContext); + } catch (IllegalStateException e) { + verify(api, times(0)).lispAddDelAdjacency(any()); + return; + } + + fail("Test should have failed while verifying remote eid"); + } + @Test(expected = UnsupportedOperationException.class) public void updateCurrentAttributes() throws Exception { customizer.updateCurrentAttributes(emptyId, emptyData, emptyData, writeContext); } - @Test(expected = IllegalStateException.class) + @Test public void deleteCurrentAttributesNoKey() throws Exception { - customizer.deleteCurrentAttributes(emptyId, emptyData, writeContext); + try { + customizer.deleteCurrentAttributes(emptyId, emptyData, writeContext); + } catch (NullPointerException e) { + verify(api, times(0)).lispAddDelAdjacency(any()); + return; + } + + fail("Test should have failed while reading parent vni table id"); } @Test(expected = IllegalArgumentException.class) -- cgit 1.2.3-korg