diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2016-10-04 16:44:47 +0200 |
---|---|---|
committer | Maros Marsalek <mmarsale@cisco.com> | 2016-10-05 11:52:37 +0000 |
commit | 5d1054b26f144948be321f30204b4b2a7cbbc03e (patch) | |
tree | 2104b21d9a2e728b8275d5d9f2a554c414db8c31 /lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait | |
parent | 512143ddd9995d16d9bb055481721fa276ccfa01 (diff) |
HONEYCOMB-138 - Lisp L2 Support
Change-Id: Idff4776a64a88be2e0a45ab1927978e40876ea92
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait')
3 files changed, 330 insertions, 0 deletions
diff --git a/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/MappingFilterProviderTest.java b/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/MappingFilterProviderTest.java new file mode 100644 index 000000000..6a7c3b7e7 --- /dev/null +++ b/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/MappingFilterProviderTest.java @@ -0,0 +1,79 @@ +package io.fd.honeycomb.lisp.translate.read.trait; + + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.LocalMappings; +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.local.mappings.LocalMapping; +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.eid.table.vni.table.BridgeDomainSubtable; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.VrfSubtable; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class MappingFilterProviderTest implements MappingFilterProvider { + + private InstanceIdentifier<LocalMapping> validVrfLocal; + private InstanceIdentifier<LocalMapping> validBdLocal; + private InstanceIdentifier<LocalMapping> invalidLocal; + + private InstanceIdentifier<RemoteMapping> validVrfRemote; + private InstanceIdentifier<RemoteMapping> validBdRemote; + private InstanceIdentifier<RemoteMapping> invalidRemote; + + + @Before + public void init() { + validVrfLocal = InstanceIdentifier.create(VrfSubtable.class) + .child(LocalMappings.class) + .child(LocalMapping.class); + + validBdLocal = InstanceIdentifier.create(BridgeDomainSubtable.class) + .child(LocalMappings.class) + .child(LocalMapping.class); + + invalidLocal = InstanceIdentifier.create(LocalMapping.class); + + validVrfRemote = InstanceIdentifier.create(VrfSubtable.class) + .child(RemoteMappings.class) + .child(RemoteMapping.class); + + validBdRemote = InstanceIdentifier.create(BridgeDomainSubtable.class) + .child(RemoteMappings.class) + .child(RemoteMapping.class); + + invalidRemote = InstanceIdentifier.create(RemoteMapping.class); + } + + @Test + public void testVrfLocalValid() { + assertEquals(VRF_MAPPINGS_ONLY, subtableFilterForLocalMappings(validVrfLocal)); + } + + @Test + public void testBridgeDomainLocalValid() { + assertEquals(BRIDGE_DOMAIN_MAPPINGS_ONLY, subtableFilterForLocalMappings(validBdLocal)); + } + + @Test(expected = IllegalArgumentException.class) + public void testLocalInvalid() { + subtableFilterForLocalMappings(invalidLocal); + } + + @Test + public void testVrfRemoteValid() { + assertEquals(VRF_MAPPINGS_ONLY, subtableFilterForRemoteMappings(validVrfRemote)); + } + + @Test + public void testBridgeDomainRemoteValid() { + assertEquals(BRIDGE_DOMAIN_MAPPINGS_ONLY, subtableFilterForRemoteMappings(validBdRemote)); + } + + @Test(expected = IllegalArgumentException.class) + public void testRemoteInvalid() { + subtableFilterForRemoteMappings(invalidRemote); + } +}
\ No newline at end of file diff --git a/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/MappingProducerTest.java b/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/MappingProducerTest.java new file mode 100644 index 000000000..89eab3c5e --- /dev/null +++ b/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/MappingProducerTest.java @@ -0,0 +1,170 @@ +package io.fd.honeycomb.lisp.translate.read.trait; + + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import io.fd.honeycomb.translate.write.WriteFailedException; +import org.junit.Before; +import org.junit.Test; +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.Ipv6Afi; +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.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.LocalMappings; +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.local.mappings.LocalMapping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.local.mappings.LocalMappingBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.local.mappings.local.mapping.EidBuilder; +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.dp.subtable.grouping.remote.mappings.RemoteMappingBuilder; +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.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.eid.table.grouping.eid.table.vni.table.VrfSubtable; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +public class MappingProducerTest implements MappingProducer { + + private InstanceIdentifier<LocalMapping> validVrfLocalMappingId; + private InstanceIdentifier<LocalMapping> validBridgeDomainLocalMappingId; + private InstanceIdentifier<RemoteMapping> validVrfRemoteMappingId; + private InstanceIdentifier<RemoteMapping> validBridgeDomainRemoteMappingId; + + private LocalMapping ipv4LocalMapping; + private LocalMapping ipv6LocalMapping; + private LocalMapping macLocalMapping; + + private RemoteMapping ipv4RemoteMapping; + private RemoteMapping ipv6RemoteMapping; + private RemoteMapping macRemoteMapping; + + @Before + public void init() { + validVrfLocalMappingId = InstanceIdentifier.create(VrfSubtable.class) + .child(LocalMappings.class) + .child(LocalMapping.class); + + validBridgeDomainLocalMappingId = InstanceIdentifier.create(BridgeDomainSubtable.class) + .child(LocalMappings.class) + .child(LocalMapping.class); + + validVrfRemoteMappingId = InstanceIdentifier.create(VrfSubtable.class) + .child(RemoteMappings.class) + .child(RemoteMapping.class); + + validBridgeDomainRemoteMappingId = InstanceIdentifier.create(BridgeDomainSubtable.class) + .child(RemoteMappings.class) + .child(RemoteMapping.class); + + ipv4LocalMapping = new LocalMappingBuilder() + .setEid(new EidBuilder() + .setAddressType(Ipv4Afi.class) + .build()).build(); + + ipv6LocalMapping = new LocalMappingBuilder() + .setEid(new EidBuilder() + .setAddressType(Ipv6Afi.class) + .build()).build(); + macLocalMapping = new LocalMappingBuilder() + .setEid(new EidBuilder() + .setAddressType(MacAfi.class) + .build()).build(); + + ipv4RemoteMapping = new RemoteMappingBuilder() + .setEid(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.EidBuilder() + .setAddressType(Ipv4Afi.class).build()).build(); + + ipv6RemoteMapping = new RemoteMappingBuilder() + .setEid(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.EidBuilder() + .setAddressType(Ipv6Afi.class).build()).build(); + + macRemoteMapping = new RemoteMappingBuilder() + .setEid(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev160520.dp.subtable.grouping.remote.mappings.remote.mapping.EidBuilder() + .setAddressType(MacAfi.class).build()).build(); + } + + @Test + public void testValidVrfLocal() { + testPositiveCase(validVrfLocalMappingId, ipv4LocalMapping); + testPositiveCase(validVrfLocalMappingId, ipv6LocalMapping); + } + + @Test + public void testValidBridgeDomainLocal() { + testPositiveCase(validBridgeDomainLocalMappingId, macLocalMapping); + } + + @Test + public void testInvalidVrfLocal() { + testNegativeCase(validVrfLocalMappingId, macLocalMapping); + } + + @Test + public void testInvalidBridgeDomainLocal() { + testNegativeCase(validBridgeDomainLocalMappingId, ipv4LocalMapping); + testNegativeCase(validBridgeDomainLocalMappingId, ipv6LocalMapping); + } + + + @Test + public void testValidVrfRemote() { + testPositiveCase(validVrfRemoteMappingId, ipv4RemoteMapping); + testPositiveCase(validVrfRemoteMappingId, ipv6RemoteMapping); + } + + @Test + public void testValidBridgeDomainRemote() { + testPositiveCase(validBridgeDomainRemoteMappingId, macRemoteMapping); + } + + @Test + public void testInvalidVrfRemote() { + testNegativeCase(validVrfRemoteMappingId, macRemoteMapping); + } + + @Test + public void testInvalidBridgeDomainRemote() { + testNegativeCase(validBridgeDomainRemoteMappingId, ipv4RemoteMapping); + testNegativeCase(validBridgeDomainRemoteMappingId, ipv6RemoteMapping); + } + + private void testNegativeCase(final InstanceIdentifier<LocalMapping> identifier, final LocalMapping data) { + try { + checkAllowedCombination(identifier, data); + } catch (WriteFailedException e) { + assertTrue(e instanceof WriteFailedException.CreateFailedException); + assertTrue(e.getCause() instanceof IllegalArgumentException); + return; + } + + fail("Test should have failed"); + } + + + private void testPositiveCase(final InstanceIdentifier<LocalMapping> identifier, final LocalMapping data) { + try { + checkAllowedCombination(identifier, data); + } catch (WriteFailedException e) { + fail("Test should have passed"); + } + } + + private void testNegativeCase(final InstanceIdentifier<RemoteMapping> identifier, final RemoteMapping data) { + try { + checkAllowedCombination(identifier, data); + } catch (WriteFailedException e) { + assertTrue(e instanceof WriteFailedException.CreateFailedException); + assertTrue(e.getCause() instanceof IllegalArgumentException); + return; + } + + fail("Test should have failed"); + } + + + private void testPositiveCase(final InstanceIdentifier<RemoteMapping> identifier, final RemoteMapping data) { + try { + checkAllowedCombination(identifier, data); + } catch (WriteFailedException e) { + fail("Test should have passed"); + } + } +} diff --git a/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/SubtableReaderTestCase.java b/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/SubtableReaderTestCase.java new file mode 100644 index 000000000..f40d72951 --- /dev/null +++ b/lisp/lisp2vpp/src/test/java/io/fd/honeycomb/lisp/translate/read/trait/SubtableReaderTestCase.java @@ -0,0 +1,81 @@ +package io.fd.honeycomb.lisp.translate.read.trait; + + +import static io.fd.honeycomb.lisp.translate.read.dump.executor.params.SubtableDumpParams.MapLevel; +import static org.junit.Assert.assertEquals; +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 static org.mockito.MockitoAnnotations.initMocks; + +import com.google.common.collect.ImmutableList; +import io.fd.honeycomb.vpp.test.read.ReaderCustomizerTest; +import io.fd.vpp.jvpp.VppCallbackException; +import io.fd.vpp.jvpp.core.dto.LispEidTableMapDetails; +import io.fd.vpp.jvpp.core.dto.LispEidTableMapDetailsReplyDump; +import io.fd.vpp.jvpp.core.dto.LispEidTableMapDump; +import java.util.Collections; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import javax.annotation.Nonnull; +import org.junit.Before; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.opendaylight.yangtools.concepts.Builder; +import org.opendaylight.yangtools.yang.binding.DataObject; + +public abstract class SubtableReaderTestCase<D extends DataObject, B extends Builder<D>> + extends ReaderCustomizerTest<D, B> + implements SubtableReader { + + protected final long expectedVni = 12; + protected final int expectedTableId = 14; + + @Captor + protected ArgumentCaptor<LispEidTableMapDump> requestCaptor; + + public SubtableReaderTestCase(final Class<D> dataObjectClass, + final Class<? extends Builder<? extends DataObject>> parentBuilderClass) { + super(dataObjectClass, parentBuilderClass); + } + + protected void doReturnValidNonEmptyDataOnDump() { + LispEidTableMapDetailsReplyDump reply = new LispEidTableMapDetailsReplyDump(); + LispEidTableMapDetails detailFirst = new LispEidTableMapDetails(); + detailFirst.vni = Long.valueOf(expectedVni).intValue(); + detailFirst.dpTable = expectedTableId; + + LispEidTableMapDetails detailSecond = new LispEidTableMapDetails(); + detailSecond.vni = 13; + detailSecond.dpTable = 15; + + reply.lispEidTableMapDetails = ImmutableList.of(detailFirst, detailSecond); + + when(api.lispEidTableMapDump(any(LispEidTableMapDump.class))) + .thenReturn(future(reply)); + } + + protected void doReturnEmptyDataOnDump() { + LispEidTableMapDetailsReplyDump reply = new LispEidTableMapDetailsReplyDump(); + reply.lispEidTableMapDetails = Collections.emptyList(); + when(api.lispEidTableMapDump(any(LispEidTableMapDump.class))) + .thenReturn(future(reply)); + } + + protected void doThrowOnDump() { + when(api.lispEidTableMapDump(any(LispEidTableMapDump.class))) + .thenReturn(failedFuture()); + } + + protected void verifyLispEidTableMapDumpCalled(@Nonnull final MapLevel expectedLevel) { + verify(api, times(1)).lispEidTableMapDump(requestCaptor.capture()); + assertEquals(expectedLevel.getValue(), requestCaptor.getValue().isL2); + } + + protected void verifyLispEidTableMapDumpNotCalled() { + verify(api, times(1)).lispEidTableMapDump(any()); + } +} |