X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgp%2Frib-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fbgp%2Frib%2Fimpl%2FParserToSalTest.java;h=1ea3334bc3ba5069e08e8d4e0e31059b21f02ea4;hb=HEAD;hp=75cadeac9e4b6a5a3536b602fc3756fbedfc8350;hpb=46e6de339f078b36ac2b5259f2043664ddca0df5;p=bgpcep.git diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java old mode 100755 new mode 100644 index 75cadeac9e..1ea3334bc3 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/ParserToSalTest.java @@ -7,193 +7,155 @@ */ package org.opendaylight.protocol.bgp.rib.impl; -import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.base.Throwables; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.doReturn; +import static org.opendaylight.protocol.bgp.rib.impl.AbstractAddPathTest.AS_NUMBER; +import static org.opendaylight.protocol.bgp.rib.impl.AbstractAddPathTest.BGP_ID; +import static org.opendaylight.protocol.util.CheckUtil.readDataOperational; + import com.google.common.collect.Collections2; -import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.eventbus.EventBus; import io.netty.util.concurrent.GlobalEventExecutor; -import java.io.IOException; import java.net.InetSocketAddress; import java.util.Collection; -import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.ServiceLoader; import java.util.concurrent.ExecutionException; -import javax.annotation.Nullable; -import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; -import org.opendaylight.controller.md.sal.binding.test.DataBrokerTestCustomizer; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.mdsal.binding.dom.adapter.CurrentAdapterSerializer; +import org.opendaylight.protocol.bgp.inet.RIBActivator; import org.opendaylight.protocol.bgp.mode.impl.base.BasePathSelectionModeFactory; import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; -import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext; +import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPDispatcher; -import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry; import org.opendaylight.protocol.bgp.rib.mock.BGPMock; -import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator; +import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator; import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext; import org.opendaylight.protocol.bgp.rib.spi.SimpleRIBExtensionProviderContext; import org.opendaylight.protocol.bgp.util.HexDumpBGPFileParser; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv4.routes.ipv4.routes.Ipv4Route; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev150305.ipv6.routes.ipv6.routes.Ipv6Route; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.LinkstateAddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.LinkstateSubsequentAddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev150210.linkstate.routes.linkstate.routes.LinkstateRoute; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.BgpRib; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.PeerRole; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.RibId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.Rib; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.RibKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.bgp.rib.rib.LocRib; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.Tables; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev130925.rib.TablesKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily; -import org.opendaylight.yangtools.binding.data.codec.api.BindingCodecTreeFactory; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.sal.binding.generator.impl.GeneratedClassLoadingStrategy; +import org.opendaylight.protocol.concepts.KeyMapping; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.LinkstateAddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev200120.LinkstateSubsequentAddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.BgpTableType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.BgpRib; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerRole; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.RibId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.Tables; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.util.BindingReflections; -public class ParserToSalTest extends AbstractDataBrokerTest { +@Ignore +public class ParserToSalTest extends DefaultRibPoliciesMockTest { private static final String TEST_RIB_ID = "testRib"; - - private final String hex_messages = "/bgp_hex.txt"; - + private static final TablesKey TABLE_KEY + = new TablesKey(LinkstateAddressFamily.VALUE, LinkstateSubsequentAddressFamily.VALUE); + private static final InstanceIdentifier BGP_IID = InstanceIdentifier.create(BgpRib.class); + private final IpAddressNoZone localAddress = new IpAddressNoZone(new Ipv4AddressNoZone("127.0.0.1")); private BGPMock mock; - private AbstractRIBExtensionProviderActivator baseact, lsact; - private RIBExtensionProviderContext ext1, ext2; - + private final RIBExtensionProviderActivator baseact = new RIBActivator(); + private final RIBExtensionProviderActivator lsact = new org.opendaylight.protocol.bgp.linkstate.impl.RIBActivator(); + private final RIBExtensionProviderContext ext1 = new SimpleRIBExtensionProviderContext(); + private final RIBExtensionProviderContext ext2 = new SimpleRIBExtensionProviderContext(); @Mock - BGPDispatcher dispatcher; - - BindingCodecTreeFactory codecFactory; - - private SchemaService schemaService; + private BGPDispatcher dispatcher; + private ConstantCodecsRegistry codecsRegistry; @Override - protected java.lang.Iterable getModuleInfos() throws Exception { - return ImmutableList.of(BindingReflections.getModuleInfo(Ipv4Route.class), BindingReflections.getModuleInfo(Ipv6Route.class), BindingReflections.getModuleInfo(LinkstateRoute.class)); - }; - - @Override - protected DataBrokerTestCustomizer createDataBrokerTestCustomizer() { - final DataBrokerTestCustomizer customizer = super.createDataBrokerTestCustomizer(); - this.codecFactory = customizer.getBindingToNormalized(); - this.schemaService = customizer.getSchemaService(); - return customizer; - } - - @Override - protected void setupWithDataBroker(final DataBroker dataBroker) { - MockitoAnnotations.initMocks(this); - final List bgpMessages; - try { - bgpMessages = HexDumpBGPFileParser.parseMessages(ParserToSalTest.class.getResourceAsStream(this.hex_messages)); - } catch (final IOException e) { - throw Throwables.propagate(e); - } - this.mock = new BGPMock(new EventBus("test"), ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getMessageRegistry(), Lists.newArrayList(fixMessages(bgpMessages))); - - Mockito.doReturn(GlobalEventExecutor.INSTANCE.newSucceededFuture(null)).when(this.dispatcher).createReconnectingClient( - Mockito.any(InetSocketAddress.class), Mockito.any(BGPPeerRegistry.class), Mockito.anyInt(), Mockito.any(Optional.class)); - - this.ext1 = new SimpleRIBExtensionProviderContext(); - this.ext2 = new SimpleRIBExtensionProviderContext(); - this.baseact = new RIBActivator(); - this.lsact = new org.opendaylight.protocol.bgp.linkstate.impl.RIBActivator(); - - this.baseact.startRIBExtensionProvider(this.ext1); - this.lsact.startRIBExtensionProvider(this.ext2); - } - - @After - public void tearDown() { - this.lsact.close(); - this.baseact.close(); + @Before + public void setUp() throws Exception { + super.setUp(); + final String hexMessages = "/bgp_hex.txt"; + final List bgpMessages = HexDumpBGPFileParser + .parseMessages(ParserToSalTest.class.getResourceAsStream(hexMessages)); + mock = new BGPMock(new EventBus("test"), + ServiceLoader.load(BGPExtensionConsumerContext.class).findFirst().orElseThrow().getMessageRegistry(), + Lists.newArrayList(fixMessages(bgpMessages))); + + doReturn(GlobalEventExecutor.INSTANCE.newSucceededFuture(null)).when(dispatcher) + .createReconnectingClient(any(InetSocketAddress.class), any(InetSocketAddress.class), + anyInt(), any(KeyMapping.class)); + + final CurrentAdapterSerializer serializer = mappingService.currentSerializer(); + baseact.startRIBExtensionProvider(ext1, serializer); + lsact.startRIBExtensionProvider(ext2, serializer); + codecsRegistry = new ConstantCodecsRegistry(serializer); } @Test public void testWithLinkstate() throws InterruptedException, ExecutionException { - final List tables = ImmutableList.of( - (BgpTableType) new BgpTableTypeImpl(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class)); - final RIBImpl rib = new RIBImpl(new RibId(TEST_RIB_ID), new AsNumber(72L), new BgpId("127.0.0.1"), null, this.ext2, this.dispatcher, - this.codecFactory, getDomBroker(), tables, - Collections.singletonMap(new TablesKey(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class), - BasePathSelectionModeFactory.createBestPathSelectionStrategy()), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()); - assertTablesExists(tables, true); - rib.onGlobalContextUpdated(this.schemaService.getGlobalContext()); - final BGPPeer peer = new BGPPeer("peer-" + this.mock.toString(), rib, PeerRole.Ibgp, null); - - final ListenerRegistration reg = this.mock.registerUpdateListener(peer); + final List tables = List.of(new BgpTableTypeImpl(LinkstateAddressFamily.VALUE, + LinkstateSubsequentAddressFamily.VALUE)); + + final RIBImpl rib = new RIBImpl(tableRegistry, new RibId(TEST_RIB_ID), AS_NUMBER, BGP_ID, ext2, + dispatcher, codecsRegistry, getDomBroker(), policies, + tables, Map.of(TABLE_KEY, BasePathSelectionModeFactory.createBestPathSelectionStrategy())); + rib.instantiateServiceInstance(); + assertTablesExists(tables); + final BGPPeer peer = AbstractAddPathTest.configurePeer(tableRegistry, + localAddress.getIpv4AddressNoZone(), rib, null, PeerRole.Ibgp, new StrictBGPPeerRegistry()); + peer.instantiateServiceInstance(); + final Registration reg = mock.registerUpdateListener(peer); reg.close(); } @Test public void testWithoutLinkstate() throws InterruptedException, ExecutionException { - final List tables = ImmutableList.of((BgpTableType) new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class)); - final RIBImpl rib = new RIBImpl(new RibId(TEST_RIB_ID), new AsNumber(72L), new BgpId("127.0.0.1"), null, this.ext1, this.dispatcher, - this.codecFactory, getDomBroker(), tables, - Collections.singletonMap(new TablesKey(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class), - BasePathSelectionModeFactory.createBestPathSelectionStrategy()), GeneratedClassLoadingStrategy.getTCCLClassLoadingStrategy()); - rib.onGlobalContextUpdated(this.schemaService.getGlobalContext()); - assertTablesExists(tables, true); - final BGPPeer peer = new BGPPeer("peer-" + this.mock.toString(), rib, PeerRole.Ibgp, null); - - final ListenerRegistration reg = this.mock.registerUpdateListener(peer); + final List tables = List.of(new BgpTableTypeImpl(Ipv4AddressFamily.VALUE, + UnicastSubsequentAddressFamily.VALUE)); + final RIBImpl rib = new RIBImpl(tableRegistry, new RibId(TEST_RIB_ID), AS_NUMBER, BGP_ID, ext1, + dispatcher, codecsRegistry, getDomBroker(), policies, + tables, Map.of(TABLE_KEY, BasePathSelectionModeFactory.createBestPathSelectionStrategy())); + rib.instantiateServiceInstance(); + assertTablesExists(tables); + final BGPPeer peer = AbstractAddPathTest.configurePeer(tableRegistry, + localAddress.getIpv4AddressNoZone(), rib, null, PeerRole.Ibgp, new StrictBGPPeerRegistry()); + peer.instantiateServiceInstance(); + final Registration reg = mock.registerUpdateListener(peer); reg.close(); } private static Collection fixMessages(final Collection bgpMessages) { - return Collections2.transform(bgpMessages, new Function() { - - @Nullable - @Override - public byte[] apply(@Nullable final byte[] input) { - final byte[] ret = new byte[input.length + 1]; - // ff - ret[0] = -1; - for (int i = 0; i < input.length; i++) { - ret[i + 1] = input[i]; - } - return ret; - } + return Collections2.transform(bgpMessages, input -> { + final byte[] ret = new byte[input.length + 1]; + // ff + ret[0] = -1; + System.arraycopy(input, 0, ret, 1, input.length); + return ret; }); } - private void assertTablesExists(final List expectedTables, final boolean uptodate) throws InterruptedException, ExecutionException { - final Optional lockRib = getLocRibTable(); - assertTrue(lockRib.isPresent()); - final List tables = lockRib.get().getTables(); - assertFalse(tables.isEmpty()); - for (final BgpTableType tableType : expectedTables) { - boolean found = false; - for (final Tables table : tables) { - if(table.getAfi().equals(tableType.getAfi()) && table.getSafi().equals(tableType.getSafi())) { - found = true; - assertTrue(Boolean.valueOf(uptodate).equals(table.getAttributes().isUptodate())); + private void assertTablesExists(final List expectedTables) throws InterruptedException, + ExecutionException { + readDataOperational(getDataBroker(), BGP_IID, bgpRib -> { + final var tables = bgpRib.nonnullRib().values().iterator().next().getLocRib().getTables(); + assertNotNull(tables); + + for (final BgpTableType tableType : expectedTables) { + boolean found = false; + for (final Tables table : tables.values()) { + if (table.getAfi().equals(tableType.getAfi()) && table.getSafi().equals(tableType.getSafi())) { + found = true; + assertEquals(Boolean.TRUE, table.getAttributes().getUptodate()); + } } + assertTrue(found); } - assertTrue(found); - } - } - - private Optional getLocRibTable() throws InterruptedException, ExecutionException { - return getDataBroker().newReadOnlyTransaction().read(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.builder(BgpRib.class).child(Rib.class, new RibKey(new RibId(TEST_RIB_ID))).child(LocRib.class).build()).get(); + return bgpRib; + }); } }