package org.opendaylight.protocol.bgp.rib.impl;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import java.util.List;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
-import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
-import org.opendaylight.protocol.bgp.rib.spi.BGPSession;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
-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.message.rev130919.Update;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.UpdateBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.AttributesBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.NlriBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes1;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes1Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes2;
-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.multiprotocol.rev130919.update.attributes.MpReachNlriBuilder;
-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.Ipv4AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv6AddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.UnicastSubsequentAddressFamily;
+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.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.message.rev200120.Update;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.UpdateBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.AttributesBuilder;
+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.multiprotocol.rev180329.AttributesReachBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev180329.attributes.reach.MpReachNlriBuilder;
+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.Ipv6AddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.UnicastSubsequentAddressFamily;
public class SynchronizationTest {
+ private final TablesKey ipv4
+ = new TablesKey(Ipv4AddressFamily.VALUE, UnicastSubsequentAddressFamily.VALUE);
+ private final TablesKey linkstate
+ = new TablesKey(LinkstateAddressFamily.VALUE, LinkstateSubsequentAddressFamily.VALUE);
+
private BGPSynchronization bs;
private SimpleSessionListener listener;
@Before
public void setUp() {
- this.listener = new SimpleSessionListener();
- this.ipv4m = new UpdateBuilder().setNlri(new NlriBuilder().setNlri(Lists.newArrayList(new Ipv4Prefix("1.1.1.1/32"))).build()).build();
-
- MpReachNlriBuilder mpBuilder = new MpReachNlriBuilder();
- mpBuilder.setAfi(Ipv6AddressFamily.class);
- mpBuilder.setSafi(UnicastSubsequentAddressFamily.class);
-
- AttributesBuilder paBuilder = new AttributesBuilder().addAugmentation(Attributes1.class,
- new Attributes1Builder().setMpReachNlri(mpBuilder.build()).build());
-
- this.ipv6m = new UpdateBuilder().setAttributes(paBuilder.build()).build();
-
- mpBuilder = new MpReachNlriBuilder();
- mpBuilder.setAfi(LinkstateAddressFamily.class);
- mpBuilder.setSafi(LinkstateSubsequentAddressFamily.class);
-
- paBuilder = new AttributesBuilder().addAugmentation(Attributes1.class, new Attributes1Builder().setMpReachNlri(
- mpBuilder.build()).build());
+ listener = new SimpleSessionListener();
+ ipv4m = new UpdateBuilder()
+ .setNlri(List.of(new NlriBuilder().setPrefix(new Ipv4Prefix("1.1.1.1/32")).build()))
+ .build();
- this.lsm = new UpdateBuilder().setAttributes(paBuilder.build()).build();
+ MpReachNlriBuilder mpBuilder = new MpReachNlriBuilder()
+ .setAfi(Ipv6AddressFamily.VALUE)
+ .setSafi(UnicastSubsequentAddressFamily.VALUE);
- this.eorm = new UpdateBuilder().build();
+ AttributesBuilder paBuilder = new AttributesBuilder()
+ .addAugmentation(new AttributesReachBuilder().setMpReachNlri(mpBuilder.build()).build());
- final Set<TablesKey> types = Sets.newHashSet();
- types.add(new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
- types.add(new TablesKey(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class));
+ ipv6m = new UpdateBuilder().setAttributes(paBuilder.build()).build();
- this.bs = new BGPSynchronization(new BGPSession() {
+ mpBuilder = new MpReachNlriBuilder()
+ .setAfi(LinkstateAddressFamily.VALUE)
+ .setSafi(LinkstateSubsequentAddressFamily.VALUE);
- @Override
- public void close() {
- }
+ paBuilder = new AttributesBuilder()
+ .addAugmentation(new AttributesReachBuilder().setMpReachNlri(mpBuilder.build()).build());
- @Override
- public Set<BgpTableType> getAdvertisedTableTypes() {
- final Set<BgpTableType> types = Sets.newHashSet();
- types.add(new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class));
- types.add(new BgpTableTypeImpl(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class));
- return types;
- }
+ lsm = new UpdateBuilder().setAttributes(paBuilder.build()).build();
- @Override
- public Ipv4Address getBgpId() {
- return new Ipv4Address("127.0.0.1");
- }
+ eorm = new UpdateBuilder().build();
- @Override
- public AsNumber getAsNumber() {
- return new AsNumber(30L);
- }
- }, this.listener, types);
+ bs = new BGPSynchronization(listener, Set.of(ipv4, linkstate));
}
@Test
public void testSynchronize() {
// simulate sync
- this.bs.updReceived(this.ipv6m);
- this.bs.updReceived(this.ipv4m);
- this.bs.updReceived(this.lsm);
- this.bs.kaReceived(); // nothing yet
- this.bs.updReceived(this.ipv4m);
- this.bs.kaReceived(); // linkstate
- assertEquals(1, this.listener.getListMsg().size());
- assertEquals(LinkstateAddressFamily.class, ((Update) this.listener.getListMsg().get(0)).getAttributes().getAugmentation(
- Attributes2.class).getMpUnreachNlri().getAfi());
- this.bs.kaReceived(); // ipv4 sync
- assertEquals(2, this.listener.getListMsg().size());
+ bs.updReceived(ipv6m);
+ bs.updReceived(ipv4m);
+ bs.updReceived(lsm);
+ bs.kaReceived(); // nothing yet
+ assertFalse(bs.syncStorage.get(linkstate).getEor());
+ assertFalse(bs.syncStorage.get(ipv4).getEor());
+ bs.updReceived(ipv4m);
+ bs.kaReceived(); // linkstate
+ assertTrue(bs.syncStorage.get(linkstate).getEor());
+ bs.kaReceived(); // ipv4 sync
+ assertTrue(bs.syncStorage.get(ipv4).getEor());
}
@Test
public void testSynchronizeWithEOR() {
- this.bs.updReceived(this.ipv4m);
- this.bs.updReceived(this.lsm);
+ bs.updReceived(ipv4m);
+ bs.updReceived(lsm);
// Ipv4 Unicast synchronized by EOR message
- this.bs.updReceived(this.eorm);
+ assertFalse(bs.syncStorage.get(ipv4).getEor());
+ bs.updReceived(eorm);
+ assertTrue(bs.syncStorage.get(ipv4).getEor());
// Linkstate not synchronized yet
- this.bs.kaReceived();
+ assertFalse(bs.syncStorage.get(linkstate).getEor());
+ bs.kaReceived();
// no message sent by BGPSychchronization
- assertEquals(0, this.listener.getListMsg().size());
- this.bs.kaReceived();
- assertEquals(1, this.listener.getListMsg().size());
- assertEquals(LinkstateAddressFamily.class, ((Update) this.listener.getListMsg().get(0)).getAttributes().getAugmentation(
- Attributes2.class).getMpUnreachNlri().getAfi());
+ assertEquals(0, listener.getListMsg().size());
+ bs.kaReceived();
+ assertTrue(bs.syncStorage.get(linkstate).getEor());
}
}