import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
+import com.google.common.base.Optional;
import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
import java.net.InetSocketAddress;
import java.util.Collections;
import java.util.List;
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.protocol.bgp.parser.BGPError;
import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionPreferences;
+import org.opendaylight.protocol.bgp.rib.impl.spi.PeerRegistrySessionListener;
import org.opendaylight.protocol.bgp.rib.spi.BGPSessionListener;
-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.IpAddress;
-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.rev130715.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+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.message.rev130919.Open;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.OpenBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.BgpParameters;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.bgp.parameters.OptionalCapabilitiesBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.bgp.parameters.optional.capabilities.CParametersBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.bgp.parameters.optional.capabilities.c.parameters.As4BytesCapabilityBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.BgpId;
public class StrictBGPPeerRegistryTest {
private StrictBGPPeerRegistry peerRegistry;
private BGPSessionPreferences mockPreferences;
- private Open createOpen(final Ipv4Address bgpId, final AsNumber as) {
+ private static Open createOpen(final Ipv4Address bgpId, final AsNumber as) {
final List<BgpParameters> params = Lists.newArrayList(new BgpParametersBuilder()
- .setOptionalCapabilities(Lists.newArrayList(new OptionalCapabilitiesBuilder()
- .setCParameters(new CParametersBuilder()
- .setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(as).build()).build()).build())).build());
+ .setOptionalCapabilities(Lists.newArrayList(new OptionalCapabilitiesBuilder()
+ .setCParameters(new CParametersBuilder()
+ .setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(as).build()).build()).build())).build());
return new OpenBuilder().setBgpIdentifier(bgpId).setBgpParameters(params).build();
}
@Before
public void setUp() throws Exception {
this.peerRegistry = new StrictBGPPeerRegistry();
- this.mockPreferences = new BGPSessionPreferences(LOCAL_AS, 1, new Ipv4Address("0.0.0.1"), LOCAL_AS, Collections.<BgpParameters> emptyList());
+ this.mockPreferences = new BGPSessionPreferences(LOCAL_AS, 1, new BgpId("0.0.0.1"), LOCAL_AS, Collections.emptyList(),
+ Optional.absent());
}
private static BGPSessionListener getMockSession() {
final BGPSessionListener mock = Mockito.mock(BGPSessionListener.class);
- Mockito.doNothing().when(mock).releaseConnection();
+ Mockito.doReturn(Futures.immediateFuture(null)).when(mock).releaseConnection();
+ return mock;
+ }
+
+ private static PeerRegistrySessionListener getMockSessionListener() {
+ final PeerRegistrySessionListener mock = Mockito.mock(PeerRegistrySessionListener.class);
+ Mockito.doNothing().when(mock).onSessionCreated(Mockito.any(IpAddress.class));
+ Mockito.doNothing().when(mock).onSessionRemoved(Mockito.any(IpAddress.class));
return mock;
}
}
fail("Peer AS number mismatch");
}
+
+ @Test
+ public void testRegisterPeerSessionListener() throws Exception {
+ final PeerRegistrySessionListener sessionListener1 = getMockSessionListener();
+ this.peerRegistry.registerPeerSessionListener(sessionListener1);
+
+ final PeerRegistrySessionListener sessionListener2 = getMockSessionListener();
+ this.peerRegistry.registerPeerSessionListener(sessionListener2);
+
+ this.peerRegistry.addPeer(REMOTE_IP, this.peer1, this.mockPreferences);
+ this.peerRegistry.getPeer(REMOTE_IP, FROM, TO, this.classicOpen);
+ Mockito.verify(sessionListener1, Mockito.times(1)).onSessionCreated(REMOTE_IP);
+ Mockito.verify(sessionListener2, Mockito.times(1)).onSessionCreated(REMOTE_IP);
+
+ this.peerRegistry.removePeerSession(REMOTE_IP);
+ Mockito.verify(sessionListener1, Mockito.times(1)).onSessionRemoved(REMOTE_IP);
+ Mockito.verify(sessionListener2, Mockito.times(1)).onSessionRemoved(REMOTE_IP);
+ }
+
+ @Test
+ public void testClosePeerSessionOneListener() throws Exception {
+ final PeerRegistrySessionListener sessionListener1 = getMockSessionListener();
+ final AutoCloseable registration1 = this.peerRegistry.registerPeerSessionListener(sessionListener1);
+
+ final PeerRegistrySessionListener sessionListener2 = getMockSessionListener();
+ this.peerRegistry.registerPeerSessionListener(sessionListener2);
+
+ this.peerRegistry.addPeer(REMOTE_IP, this.peer1, this.mockPreferences);
+ this.peerRegistry.getPeer(REMOTE_IP, FROM, TO, this.classicOpen);
+ this.peerRegistry.removePeerSession(REMOTE_IP);
+
+ registration1.close();
+ this.peerRegistry.getPeer(REMOTE_IP, FROM, TO, this.classicOpen);
+ this.peerRegistry.removePeerSession(REMOTE_IP);
+
+ Mockito.verify(sessionListener1, Mockito.times(1)).onSessionCreated(REMOTE_IP);
+ Mockito.verify(sessionListener2, Mockito.times(2)).onSessionCreated(REMOTE_IP);
+ Mockito.verify(sessionListener1, Mockito.times(1)).onSessionRemoved(REMOTE_IP);
+ Mockito.verify(sessionListener2, Mockito.times(2)).onSessionRemoved(REMOTE_IP);
+ }
}