2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.bmp.mock;
10 import static org.mockito.ArgumentMatchers.any;
11 import static org.mockito.Mockito.mock;
12 import static org.mockito.Mockito.timeout;
13 import static org.mockito.Mockito.verify;
15 import io.netty.channel.Channel;
16 import io.netty.channel.ChannelFuture;
17 import java.net.InetSocketAddress;
18 import java.util.List;
19 import java.util.ServiceLoader;
20 import java.util.concurrent.TimeUnit;
21 import org.junit.After;
22 import org.junit.Assert;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionConsumerContext;
26 import org.opendaylight.protocol.bmp.api.BmpSession;
27 import org.opendaylight.protocol.bmp.api.BmpSessionListener;
28 import org.opendaylight.protocol.bmp.api.BmpSessionListenerFactory;
29 import org.opendaylight.protocol.bmp.impl.BmpDispatcherImpl;
30 import org.opendaylight.protocol.bmp.impl.BmpNettyGroups;
31 import org.opendaylight.protocol.bmp.impl.session.DefaultBmpSessionFactory;
32 import org.opendaylight.protocol.bmp.parser.BmpActivator;
33 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderActivator;
34 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderContext;
35 import org.opendaylight.protocol.bmp.spi.registry.SimpleBmpExtensionProviderContext;
36 import org.opendaylight.protocol.concepts.KeyMapping;
37 import org.opendaylight.protocol.util.InetSocketAddressUtil;
38 import org.opendaylight.yangtools.yang.binding.Notification;
40 public class BmpMockTest {
41 private final BmpSessionListener sessionListener = mock(BmpSessionListener.class);
42 private BmpExtensionProviderActivator bmpActivator;
43 private BmpDispatcherImpl bmpDispatcher;
47 final BmpExtensionProviderContext ctx = new SimpleBmpExtensionProviderContext();
48 bmpActivator = new BmpActivator(
49 ServiceLoader.load(BGPExtensionConsumerContext.class).findFirst().orElseThrow());
50 bmpActivator.start(ctx);
51 bmpDispatcher = new BmpDispatcherImpl(new BmpNettyGroups(), ctx, new DefaultBmpSessionFactory());
55 public void tearDown() throws Exception {
56 bmpDispatcher.close();
59 @Test(timeout = 20000)
60 public void testMain() throws Exception {
61 final InetSocketAddress serverAddr = InetSocketAddressUtil.getRandomLoopbackInetSocketAddress();
62 final BmpSessionListenerFactory bmpSessionListenerFactory = () -> BmpMockTest.this.sessionListener;
63 final ChannelFuture futureServer = bmpDispatcher.createServer(serverAddr,
64 bmpSessionListenerFactory, KeyMapping.of());
65 final Channel serverChannel;
66 final int sessionUpWait;
67 if (futureServer.isSuccess()) {
68 serverChannel = futureServer.channel();
72 // wait longer for the reconnection attempt
76 BmpMock.main(new String[]{
78 InetSocketAddressUtil.toHostAndPort(serverAddr).toString(),
80 "--pre_policy_routes",
83 verify(sessionListener, timeout(TimeUnit.SECONDS.toMillis(sessionUpWait)))
84 .onSessionUp(any(BmpSession.class));
85 //1 * Initiate message + 3 * PeerUp Notification + 9 * Route Monitoring message
86 verify(sessionListener, timeout(TimeUnit.SECONDS.toMillis(10))
88 .onMessage(any(Notification.class));
90 if (serverChannel != null) {
91 serverChannel.close().sync();
95 @Test(timeout = 20000)
96 public void testMainInPassiveMode() throws Exception {
97 final InetSocketAddress serverAddr = InetSocketAddressUtil.getRandomLoopbackInetSocketAddress();
98 final BmpSessionListenerFactory bmpSessionListenerFactory = () -> BmpMockTest.this.sessionListener;
100 // create a local server in passive mode instead
101 final List<ChannelFuture> futureServers = BmpMock.deploy(new String[]
102 {"--local_address", InetSocketAddressUtil.toHostAndPort(serverAddr).toString(),
103 "--peers_count", "3", "--pre_policy_routes", "3", "--passive"});
104 Assert.assertEquals(1, futureServers.size());
105 futureServers.get(0).sync();
106 final ChannelFuture futureClient = bmpDispatcher.createClient(serverAddr,
107 bmpSessionListenerFactory, KeyMapping.of());
109 final Channel serverChannel;
110 final int sessionUpWait;
111 if (futureClient.isSuccess()) {
112 serverChannel = futureClient.channel();
115 serverChannel = null;
116 // wait longer for the reconnection attempt
120 verify(sessionListener, timeout(TimeUnit.SECONDS.toMillis(sessionUpWait)))
121 .onSessionUp(any(BmpSession.class));
122 //1 * Initiate message + 3 * PeerUp Notification + 9 * Route Monitoring message
123 verify(sessionListener, timeout(TimeUnit.SECONDS.toMillis(10))
125 .onMessage(any(Notification.class));
127 if (serverChannel != null) {
128 serverChannel.close().sync();