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%2FBGPDispatcherImplTest.java;h=dda25ee9cfce75e53df98ea9dff83ab81b18a504;hb=1fabc0a22906be5c41420c5f3b573088091f9459;hp=4b93060e5fb7b5052a7cd591ab0a802e7d491a7b;hpb=853f06c618a2e0bb1cb31b8c1fec5a1b2d6860ee;p=bgpcep.git diff --git a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImplTest.java b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImplTest.java index 4b93060e5f..dda25ee9cf 100644 --- a/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImplTest.java +++ b/bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/BGPDispatcherImplTest.java @@ -8,6 +8,7 @@ package org.opendaylight.protocol.bgp.rib.impl; +import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import io.netty.channel.Channel; @@ -24,10 +25,8 @@ import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; import org.opendaylight.protocol.bgp.parser.BGPDocumentedException; +import org.opendaylight.protocol.bgp.parser.BgpExtendedMessageUtil; import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl; import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry; @@ -38,61 +37,52 @@ import org.opendaylight.protocol.framework.ReconnectStrategyFactory; 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.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParameters; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.BgpParametersBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilities; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.OptionalCapabilitiesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.As4BytesCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.as4.bytes._case.As4BytesCapabilityBuilder; +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.BgpParametersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.bgp.parameters.OptionalCapabilities; +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.multiprotocol.rev130919.BgpTableType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.MultiprotocolCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.open.bgp.parameters.optional.capabilities.c.parameters.multiprotocol._case.MultiprotocolCapabilityBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.CParameters1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.CParameters1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.mp.capabilities.MultiprotocolCapabilityBuilder; 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.UnicastSubsequentAddressFamily; public class BGPDispatcherImplTest { - private static final Ipv4Address IPV4 = new Ipv4Address("127.0.10.0"); - private static final InetSocketAddress ADDRESS = new InetSocketAddress(IPV4.getValue(), 1790); + private static final InetSocketAddress ADDRESS = new InetSocketAddress("127.0.10.0", 1790); + private static final InetSocketAddress CLIENT_ADDRESS = new InetSocketAddress("127.0.11.0", 1791); + private static final InetSocketAddress CLIENT_ADDRESS2 = new InetSocketAddress("127.0.12.0", 1792); private static final AsNumber AS_NUMBER = new AsNumber(30L); private static final int TIMEOUT = 5000; private final BgpTableType ipv4tt = new BgpTableTypeImpl(Ipv4AddressFamily.class, UnicastSubsequentAddressFamily.class); private BGPDispatcherImpl dispatcher; + private TestClientDispatcher clientDispatcher; - @Mock private BGPPeerRegistry registry; private Channel channel; - private SimpleSessionListener sessionListener; - @Before public void setUp() throws BGPDocumentedException { - MockitoAnnotations.initMocks(this); - this.sessionListener = new SimpleSessionListener(); final EventLoopGroup group = new NioEventLoopGroup(); - - final List tlvs = Lists.newArrayList(); - final List capas = Lists.newArrayList(); - capas.add(new OptionalCapabilitiesBuilder().setCParameters( - new MultiprotocolCaseBuilder().setMultiprotocolCapability( - new MultiprotocolCapabilityBuilder().setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()).build()); - capas.add(new OptionalCapabilitiesBuilder().setCParameters(new As4BytesCaseBuilder().setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber( - new AsNumber(30L)).build()).build()).build()); - tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capas).build()); - final BGPSessionPreferences prefs = new BGPSessionPreferences(AS_NUMBER, (short) 90, new Ipv4Address(ADDRESS.getAddress().getHostAddress()), tlvs); - Mockito.doReturn(true).when(this.registry).isPeerConfigured(Mockito.any(IpAddress.class)); - Mockito.doReturn(prefs).when(this.registry).getPeerPreferences(Mockito.any(IpAddress.class)); - Mockito.doReturn(this.sessionListener).when(this.registry).getPeer(Mockito.any(IpAddress.class), Mockito.any(Ipv4Address.class), Mockito.any(Ipv4Address.class)); - + this.registry = new StrictBGPPeerRegistry(); + this.registry.addPeer(new IpAddress(new Ipv4Address(CLIENT_ADDRESS.getAddress().getHostAddress())), + new SimpleSessionListener(), createPreferences(CLIENT_ADDRESS)); + this.registry.addPeer(new IpAddress(new Ipv4Address(ADDRESS.getAddress().getHostAddress())), + new SimpleSessionListener(), createPreferences(ADDRESS)); this.dispatcher = new BGPDispatcherImpl(ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getMessageRegistry(), group, group); + this.clientDispatcher = new TestClientDispatcher(group, group, ServiceLoaderBGPExtensionProviderContext.getSingletonInstance().getMessageRegistry(), + CLIENT_ADDRESS); - final ChannelFuture future = dispatcher.createServer(this.registry, new InetSocketAddress("0.0.0.0", 1790), new BGPServerSessionValidator()); + final ChannelFuture future = this.dispatcher.createServer(this.registry, ADDRESS); future.addListener(new GenericFutureListener>() { @Override - public void operationComplete(Future future) { + public void operationComplete(final Future future) { if(!future.isSuccess()) { Assert.fail("Failed to create server."); } @@ -100,28 +90,36 @@ public class BGPDispatcherImplTest { }); this.channel = future.channel(); } + @Test public void testCreateClient() throws InterruptedException, ExecutionException { - final BGPSessionImpl session = this.dispatcher.createClient(ADDRESS, AS_NUMBER, this.registry, new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, TIMEOUT)).get(); - Assert.assertTrue(this.sessionListener.up); + final BGPSessionImpl session = this.clientDispatcher.createClient(ADDRESS, this.registry, + new NeverReconnectStrategy(GlobalEventExecutor.INSTANCE, TIMEOUT), Optional.absent()).get(); Assert.assertEquals(BGPSessionImpl.State.UP, session.getState()); Assert.assertEquals(AS_NUMBER, session.getAsNumber()); - Assert.assertEquals(IPV4, session.getBgpId()); Assert.assertEquals(Sets.newHashSet(this.ipv4tt), session.getAdvertisedTableTypes()); session.close(); } @After - public void tearDown() { - this.channel.close(); + public void tearDown() throws Exception { + this.channel.close().get(); this.dispatcher.close(); + this.registry.close(); } @Test public void testCreateReconnectingClient() throws InterruptedException, ExecutionException { - final Future cf = this.dispatcher.createReconnectingClient(ADDRESS, AS_NUMBER, this.registry, new ReconnectStrategyFctImpl(), new ReconnectStrategyFctImpl()); - cf.await(500); - Assert.assertTrue(this.sessionListener.up); + final SimpleSessionListener listener = new SimpleSessionListener(); + this.registry.addPeer(new IpAddress(new Ipv4Address(CLIENT_ADDRESS2.getAddress().getHostAddress())), listener, createPreferences(CLIENT_ADDRESS2)); + final Future cf = this.clientDispatcher.createReconnectingClient(CLIENT_ADDRESS2, this.registry, + new ReconnectStrategyFctImpl(), Optional.absent()); + final Channel channel2 = this.dispatcher.createServer(this.registry, CLIENT_ADDRESS2).channel(); + Thread.sleep(1000); + Assert.assertTrue(listener.up); + Assert.assertTrue(channel2.isActive()); + cf.cancel(true); + listener.releaseConnection(); } private static final class ReconnectStrategyFctImpl implements ReconnectStrategyFactory { @@ -132,4 +130,17 @@ public class BGPDispatcherImplTest { } + private BGPSessionPreferences createPreferences(final InetSocketAddress socketAddress) { + final List tlvs = Lists.newArrayList(); + final List capas = Lists.newArrayList(); + capas.add(new OptionalCapabilitiesBuilder().setCParameters(new CParametersBuilder().addAugmentation( + CParameters1.class, new CParameters1Builder().setMultiprotocolCapability(new MultiprotocolCapabilityBuilder() + .setAfi(this.ipv4tt.getAfi()).setSafi(this.ipv4tt.getSafi()).build()).build()) + .setAs4BytesCapability(new As4BytesCapabilityBuilder().setAsNumber(new AsNumber(30L)).build()) + .build()).build()); + capas.add(new OptionalCapabilitiesBuilder().setCParameters(BgpExtendedMessageUtil.EXTENDED_MESSAGE_CAPABILITY).build()); + tlvs.add(new BgpParametersBuilder().setOptionalCapabilities(capas).build()); + return new BGPSessionPreferences(AS_NUMBER, (short) 4, new Ipv4Address(socketAddress.getAddress().getHostAddress()), AS_NUMBER, tlvs); + } + }