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;
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;
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;
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 {
@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));
}
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<Nlri> 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());
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<Nlri> 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<WithdrawnRoutes> 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() {
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<BgpParameters> params = Lists.newArrayList(new BgpParametersBuilder()
- .setOptionalCapabilities(Lists.newArrayList(new OptionalCapabilitiesBuilder()
+ final List<BgpParameters> 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())
.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);
}
}