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%2FPeerTest.java;h=b91c156fd8f4148b0a7dd542bd6d3573933b9284;hb=6935f28b7b3de629f1a6a6aa9abe8dac9c4eb7fd;hp=8fd9012bfb9ade8d6cccef3f71e5a8050fd66692;hpb=0903ae978349d82e076b999965aaad58f0318393;p=bgpcep.git diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/PeerTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/PeerTest.java index 8fd9012bfb..b91c156fd8 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/PeerTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/PeerTest.java @@ -17,14 +17,12 @@ import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import com.google.common.collect.Lists; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelPipeline; import io.netty.channel.DefaultChannelPromise; import io.netty.channel.EventLoop; import java.net.InetSocketAddress; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -35,7 +33,7 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; import org.opendaylight.protocol.bgp.parser.BGPError; import org.opendaylight.protocol.bgp.parser.impl.message.update.LocalPreferenceAttributeParser; -import org.opendaylight.protocol.bgp.rib.spi.RibSupportUtils; +import org.opendaylight.protocol.bgp.rib.spi.RIBQNames; 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.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix; @@ -55,9 +53,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.LocalPrefBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.Origin; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.OriginBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.Nlri; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.NlriBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.WithdrawnRoutes; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.update.message.WithdrawnRoutesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.AttributesUnreachBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.CParameters1Builder; @@ -76,12 +72,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.type import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.c.next.hop.Ipv4NextHopCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.next.hop.c.next.hop.ipv4.next.hop._case.Ipv4NextHopBuilder; import org.opendaylight.yangtools.yang.binding.Notification; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType; +import org.opendaylight.yangtools.yang.data.tree.api.ModificationType; public class PeerTest extends AbstractRIBTestSetup { @@ -95,27 +91,24 @@ public class PeerTest extends AbstractRIBTestSetup { @Before public void setUp() throws Exception { super.setUp(); - this.routes = new HashMap<>(); + routes = new HashMap<>(); overrideMockedBehaviour(); } private void overrideMockedBehaviour() { doAnswer(invocation -> { - final Object[] args = invocation.getArguments(); - final NormalizedNode node = (NormalizedNode) args[2]; - final QName nodeType = node.getIdentifier().getNodeType(); - + final var node = invocation.getArgument(2, NormalizedNode.class); + final var nodeType = node.getIdentifier().getNodeType(); if (nodeType.equals(Ipv4Route.QNAME) || nodeType.equals(PREFIX_QNAME)) { - this.routes.put((YangInstanceIdentifier) args[1], node); + routes.put(invocation.getArgument(1), node); } - return args[1]; + return null; }).when(getTransaction()).put(eq(LogicalDatastoreType.OPERATIONAL), any(YangInstanceIdentifier.class), any(NormalizedNode.class)); doAnswer(invocation -> { - final Object[] args = invocation.getArguments(); - this.routes.remove(args[1]); - return args[1]; + routes.remove(invocation.getArgument(1)); + return null; }).when(getTransaction()).delete(eq(LogicalDatastoreType.OPERATIONAL), any(YangInstanceIdentifier.class)); } @@ -124,47 +117,49 @@ public class PeerTest extends AbstractRIBTestSetup { final Ipv4Prefix first = new Ipv4Prefix("127.0.0.2/32"); final Ipv4Prefix second = new Ipv4Prefix("127.0.0.1/32"); final Ipv4Prefix third = new Ipv4Prefix("127.0.0.3/32"); - this.peer = new ApplicationPeer(this.tableRegistry, - new ApplicationRibId(this.neighborAddress.getIpv4AddressNoZone().getValue()), - this.neighborAddress.getIpv4AddressNoZone(), getRib()); - this.peer.instantiateServiceInstance(null, null); + peer = new ApplicationPeer(tableRegistry, + new ApplicationRibId(neighborAddress.getIpv4AddressNoZone().getValue()), + neighborAddress.getIpv4AddressNoZone(), getRib()); + peer.instantiateServiceInstance(null, null); final YangInstanceIdentifier base = getRib().getYangRibId().node(LocRib.QNAME) - .node(Tables.QNAME).node(RibSupportUtils.toYangTablesKey(KEY)); - this.peer.onDataTreeChanged(ipv4Input(base, ModificationType.WRITE, first, second, third)); - assertEquals(3, this.routes.size()); - - this.peer.onDataTreeChanged(ipv4Input(base, ModificationType.DELETE, third)); - assertEquals(2, this.routes.size()); + .node(Tables.QNAME).node(NodeIdentifierWithPredicates.of(Tables.QNAME, Map.of( + RIBQNames.AFI_QNAME, Ipv4AddressFamily.QNAME, + RIBQNames.SAFI_QNAME, UnicastSubsequentAddressFamily.QNAME))); + peer.onDataTreeChanged(ipv4Input(base, ModificationType.WRITE, first, second, third)); + assertEquals(3, routes.size()); + + peer.onDataTreeChanged(ipv4Input(base, ModificationType.DELETE, third)); + assertEquals(2, routes.size()); } @Test public void testClassicPeer() throws Exception { - this.classic = AbstractAddPathTest.configurePeer(this.tableRegistry, - this.neighborAddress.getIpv4AddressNoZone(), getRib(), null, PeerRole.Ibgp, new StrictBGPPeerRegistry()); - this.classic.instantiateServiceInstance(); - this.mockSession(); - assertEquals(this.neighborAddress.getIpv4AddressNoZone().getValue(), this.classic.getName()); - this.classic.onSessionUp(this.session); - assertEquals("BGPPeer{name=127.0.0.1, tables=[TablesKey{_afi=interface org.opendaylight.yang.gen.v1" - + ".urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.Ipv4AddressFamily," - + " _safi=interface org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types" - + ".rev200120.UnicastSubsequentAddressFamily}]}", - this.classic.toString()); - - final Nlri n1 = new NlriBuilder().setPrefix(new Ipv4Prefix("8.0.1.0/28")).build(); - final Nlri n2 = new NlriBuilder().setPrefix(new Ipv4Prefix("127.0.0.1/32")).build(); - final Nlri n3 = new NlriBuilder().setPrefix(new Ipv4Prefix("2.2.2.2/24")).build(); - final List nlris = Lists.newArrayList(n1, n2, n3); - final UpdateBuilder ub = new UpdateBuilder(); - ub.setNlri(nlris); + classic = AbstractAddPathTest.configurePeer(tableRegistry, + neighborAddress.getIpv4AddressNoZone(), getRib(), null, PeerRole.Ibgp, new StrictBGPPeerRegistry()); + classic.instantiateServiceInstance(); + mockSession(); + assertEquals(neighborAddress.getIpv4AddressNoZone().getValue(), classic.getName()); + classic.onSessionUp(session); + assertEquals(""" + BGPPeer{name=127.0.0.1, tables=[TablesKey{afi=Ipv4AddressFamily{qname=\ + (urn:opendaylight:params:xml:ns:yang:bgp-types?revision=2020-01-20)ipv4-address-family}, \ + safi=UnicastSubsequentAddressFamily{qname=\ + (urn:opendaylight:params:xml:ns:yang:bgp-types?revision=2020-01-20)unicast-subsequent-address-family}}]}""", + classic.toString()); + + final UpdateBuilder ub = new UpdateBuilder() + .setNlri(List.of( + new NlriBuilder().setPrefix(new Ipv4Prefix("8.0.1.0/28")).build(), + new NlriBuilder().setPrefix(new Ipv4Prefix("127.0.0.1/32")).build(), + new NlriBuilder().setPrefix(new Ipv4Prefix("2.2.2.2/24")).build())); final Origin origin = new OriginBuilder().setValue(BgpOrigin.Igp).build(); - final AsPath asPath = new AsPathBuilder().setSegments(Collections.emptyList()).build(); + final AsPath asPath = new AsPathBuilder().setSegments(List.of()).build(); final CNextHop nextHop = new Ipv4NextHopCaseBuilder().setIpv4NextHop(new Ipv4NextHopBuilder() .setGlobal(new Ipv4AddressNoZone("127.0.0.1")).build()).build(); final AttributesBuilder ab = new AttributesBuilder(); ub.setAttributes(ab.setOrigin(origin).setAsPath(asPath).setCNextHop(nextHop).build()); try { - this.classic.onMessage(this.session, ub.build()); + classic.onMessage(session, ub.build()); fail(); } catch (final BGPDocumentedException e) { assertEquals(BGPError.MANDATORY_ATTR_MISSING_MSG + "LOCAL_PREF", e.getMessage()); @@ -172,45 +167,49 @@ public class PeerTest extends AbstractRIBTestSetup { assertEquals(BGPError.WELL_KNOWN_ATTR_MISSING.getSubcode(), e.getError().getSubcode()); assertArrayEquals(new byte[]{LocalPreferenceAttributeParser.TYPE}, e.getData()); } - assertEquals(0, this.routes.size()); + assertEquals(0, routes.size()); final LocalPref localPref = new LocalPrefBuilder().setPref(Uint32.valueOf(100)).build(); ub.setAttributes(ab.setLocalPref(localPref).build()); - this.classic.onMessage(this.session, ub.build()); - assertEquals(3, this.routes.size()); + classic.onMessage(session, ub.build()); + assertEquals(3, routes.size()); //create new peer so that it gets advertized routes from RIB - final BGPPeer testingPeer = AbstractAddPathTest.configurePeer(this.tableRegistry, - this.neighborAddress.getIpv4AddressNoZone(), getRib(), null, PeerRole.Ibgp, new StrictBGPPeerRegistry()); + final BGPPeer testingPeer = AbstractAddPathTest.configurePeer(tableRegistry, + neighborAddress.getIpv4AddressNoZone(), getRib(), null, PeerRole.Ibgp, new StrictBGPPeerRegistry()); testingPeer.instantiateServiceInstance(); - testingPeer.onSessionUp(this.session); - assertEquals(3, this.routes.size()); - - final Nlri n11 = new NlriBuilder().setPrefix(new Ipv4Prefix("8.0.1.0/28")).build(); - final Nlri n22 = new NlriBuilder().setPrefix(new Ipv4Prefix("8.0.1.16/28")).build(); - final List nlris2 = Lists.newArrayList(n11, n22); - ub.setNlri(nlris2); - final WithdrawnRoutes w1 = new WithdrawnRoutesBuilder().setPrefix(new Ipv4Prefix("8.0.1.0/28")).build(); - final WithdrawnRoutes w2 = new WithdrawnRoutesBuilder().setPrefix(new Ipv4Prefix("127.0.0.1/32")).build(); - final WithdrawnRoutes w3 = new WithdrawnRoutesBuilder().setPrefix(new Ipv4Prefix("2.2.2.2/24")).build(); - final List wrs = Lists.newArrayList(w1, w2, w3); - ub.setWithdrawnRoutes(wrs); - this.classic.onMessage(this.session, ub.build()); - assertEquals(2, this.routes.size()); - this.classic.onMessage(this.session, new KeepaliveBuilder().build()); - this.classic.onMessage(this.session, new UpdateBuilder() + testingPeer.onSessionUp(session); + assertEquals(3, routes.size()); + + ub.setNlri(List.of( + new NlriBuilder().setPrefix(new Ipv4Prefix("8.0.1.0/28")).build(), + new NlriBuilder().setPrefix(new Ipv4Prefix("8.0.1.16/28")).build())); + ub.setWithdrawnRoutes(List.of( + new WithdrawnRoutesBuilder().setPrefix(new Ipv4Prefix("8.0.1.0/28")).build(), + new WithdrawnRoutesBuilder().setPrefix(new Ipv4Prefix("127.0.0.1/32")).build(), + new WithdrawnRoutesBuilder().setPrefix(new Ipv4Prefix("2.2.2.2/24")).build())); + classic.onMessage(session, ub.build()); + assertEquals(2, routes.size()); + classic.onMessage(session, new KeepaliveBuilder().build()); + classic.onMessage(session, new UpdateBuilder() .setAttributes(new AttributesBuilder() .addAugmentation(new AttributesUnreachBuilder() - .setMpUnreachNlri(new MpUnreachNlriBuilder().setAfi(IPV4_AFI).setSafi(SAFI).build()) + .setMpUnreachNlri(new MpUnreachNlriBuilder() + .setAfi(Ipv4AddressFamily.VALUE) + .setSafi(UnicastSubsequentAddressFamily.VALUE) + .build()) .build()) .build()) .build()); - this.classic.onMessage(this.session, new RouteRefreshBuilder().setAfi(IPV4_AFI).setSafi(SAFI).build()); - this.classic.onMessage(this.session, new RouteRefreshBuilder() - .setAfi(Ipv6AddressFamily.class) - .setSafi(SAFI).build()); - assertEquals(2, this.routes.size()); - this.classic.releaseConnection(); + classic.onMessage(session, new RouteRefreshBuilder() + .setAfi(Ipv4AddressFamily.VALUE) + .setSafi(UnicastSubsequentAddressFamily.VALUE) + .build()); + classic.onMessage(session, new RouteRefreshBuilder() + .setAfi(Ipv6AddressFamily.VALUE) + .setSafi(UnicastSubsequentAddressFamily.VALUE).build()); + assertEquals(2, routes.size()); + classic.releaseConnection(); } private void mockSession() { @@ -227,13 +226,13 @@ public class PeerTest extends AbstractRIBTestSetup { doReturn(new DefaultChannelPromise(channel)).when(channel).writeAndFlush(any(Notification.class)); doReturn(new InetSocketAddress("localhost", 12345)).when(channel).remoteAddress(); doReturn(new InetSocketAddress("localhost", 12345)).when(channel).localAddress(); - final List params = Lists.newArrayList(new BgpParametersBuilder() - .setOptionalCapabilities(Lists.newArrayList(new OptionalCapabilitiesBuilder() + final List params = List.of(new BgpParametersBuilder() + .setOptionalCapabilities(List.of(new OptionalCapabilitiesBuilder() .setCParameters(new CParametersBuilder() .addAugmentation(new CParameters1Builder() .setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() - .setAfi(Ipv4AddressFamily.class) - .setSafi(UnicastSubsequentAddressFamily.class) + .setAfi(Ipv4AddressFamily.VALUE) + .setSafi(UnicastSubsequentAddressFamily.VALUE) .build()) .build()) .build()) @@ -244,7 +243,7 @@ public class PeerTest extends AbstractRIBTestSetup { .setHoldTimer(Uint16.valueOf(50)) .setMyAsNumber(Uint16.valueOf(72)) .setBgpParameters(params).build(); - this.session = new BGPSessionImpl(this.classic, channel, openObj, 30, null); - this.session.setChannelExtMsgCoder(openObj); + session = new BGPSessionImpl(classic, channel, openObj, 30, null); + session.setChannelExtMsgCoder(openObj); } }