Rename multiprotocol augmentations
[bgpcep.git] / bgp / rib-impl / src / test / java / org / opendaylight / protocol / bgp / rib / impl / SynchronizationTest.java
index 9bc64875f2ed7479ad747d27cc4a7acd7a4dad83..7d777307ec3e7c0be31c9b9215e93ae04a63a508 100644 (file)
 package org.opendaylight.protocol.bgp.rib.impl;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.mock;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
+import com.google.common.collect.Sets;
 import java.util.Collections;
-import java.util.Set;
-
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.protocol.bgp.concepts.BGPAddressFamily;
-import org.opendaylight.protocol.bgp.concepts.BGPObject;
-import org.opendaylight.protocol.bgp.concepts.BGPSubsequentAddressFamily;
-import org.opendaylight.protocol.bgp.concepts.BGPTableType;
-import org.opendaylight.protocol.bgp.concepts.BaseBGPObjectState;
-import org.opendaylight.protocol.bgp.parser.BGPLink;
-import org.opendaylight.protocol.bgp.parser.BGPSession;
-import org.opendaylight.protocol.bgp.parser.BGPUpdateMessage;
-import org.opendaylight.protocol.bgp.parser.impl.BGPUpdateMessageImpl;
-import org.opendaylight.protocol.bgp.util.BGPIPv4RouteImpl;
-import org.opendaylight.protocol.bgp.util.BGPIPv6RouteImpl;
-import org.opendaylight.protocol.concepts.IPv4;
-import org.opendaylight.protocol.concepts.IPv6;
-
-import com.google.common.collect.Sets;
+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.update.attributes.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 BGPSynchronization bs;
-
-       private SimpleSessionListener listener;
-
-       private BGPUpdateMessage ipv4m;
-
-       private BGPUpdateMessage ipv6m;
-
-       private BGPUpdateMessage lsm;
-
-       @Before
-       public void setUp() {
-               this.listener = new SimpleSessionListener();
-               final BGPIPv4RouteImpl i4 = new BGPIPv4RouteImpl(IPv4.FAMILY.prefixForString("1.1.1.1/32"), new BaseBGPObjectState(null, null), null);
-               this.ipv4m = new BGPUpdateMessageImpl(Sets.<BGPObject> newHashSet(i4), Collections.EMPTY_SET);
-               final BGPIPv6RouteImpl i6 = new BGPIPv6RouteImpl(IPv6.FAMILY.prefixForString("::1/32"), new BaseBGPObjectState(null, null), null);
-               this.ipv6m = new BGPUpdateMessageImpl(Sets.<BGPObject> newHashSet(i6), Collections.EMPTY_SET);
-               this.lsm = new BGPUpdateMessageImpl(Sets.<BGPObject> newHashSet(mock(BGPLink.class)), Collections.EMPTY_SET);
-
-               final Set<BGPTableType> types = Sets.newHashSet(new BGPTableType(BGPAddressFamily.IPv4, BGPSubsequentAddressFamily.Unicast),
-                               new BGPTableType(BGPAddressFamily.LinkState, BGPSubsequentAddressFamily.Linkstate));
-
-               this.bs = new BGPSynchronization(new BGPSession() {
-
-                       @Override
-                       public void close() {
-                       }
-
-                       @Override
-                       public Set<BGPTableType> getAdvertisedTableTypes() {
-                               return types;
-                       }
-               }, this.listener, types);
-       }
-
-       @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());
-               this.bs.kaReceived(); // ipv4 sync
-               assertEquals(2, this.listener.getListMsg().size());
-               assertEquals(BGPAddressFamily.IPv4,
-                               ((BGPUpdateSynchronizedImpl) this.listener.getListMsg().get(1)).getTableType().getAddressFamily());
-       }
+    private final TablesKey ipv4
+            = new TablesKey(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class);
+    private final TablesKey linkstate
+            = new TablesKey(LinkstateAddressFamily.class, LinkstateSubsequentAddressFamily.class);
+
+    private BGPSynchronization bs;
+
+    private SimpleSessionListener listener;
+
+    private Update ipv4m;
+
+    private Update ipv6m;
+
+    private Update lsm;
+
+    private Update eorm;
+
+    @Before
+    public void setUp() {
+        this.listener = new SimpleSessionListener();
+        this.ipv4m = new UpdateBuilder()
+                .setNlri(Collections.singletonList(new NlriBuilder()
+                .setPrefix(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(new AttributesReachBuilder().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(new AttributesReachBuilder().setMpReachNlri(mpBuilder.build()).build());
+
+        this.lsm = new UpdateBuilder().setAttributes(paBuilder.build()).build();
+
+        this.eorm = new UpdateBuilder().build();
+
+        this.bs = new BGPSynchronization(this.listener, Sets.newHashSet(this.ipv4, this.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
+        assertFalse(this.bs.syncStorage.get(this.linkstate).getEor());
+        assertFalse(this.bs.syncStorage.get(this.ipv4).getEor());
+        this.bs.updReceived(this.ipv4m);
+        this.bs.kaReceived(); // linkstate
+        assertTrue(this.bs.syncStorage.get(this.linkstate).getEor());
+        this.bs.kaReceived(); // ipv4 sync
+        assertTrue(this.bs.syncStorage.get(this.ipv4).getEor());
+    }
+
+    @Test
+    public void testSynchronizeWithEOR() {
+        this.bs.updReceived(this.ipv4m);
+        this.bs.updReceived(this.lsm);
+        // Ipv4 Unicast synchronized by EOR message
+        assertFalse(this.bs.syncStorage.get(this.ipv4).getEor());
+        this.bs.updReceived(this.eorm);
+        assertTrue(this.bs.syncStorage.get(this.ipv4).getEor());
+        // Linkstate not synchronized yet
+        assertFalse(this.bs.syncStorage.get(this.linkstate).getEor());
+        this.bs.kaReceived();
+        // no message sent by BGPSychchronization
+        assertEquals(0, this.listener.getListMsg().size());
+        this.bs.kaReceived();
+        assertTrue(this.bs.syncStorage.get(this.linkstate).getEor());
+    }
 }