Bump versions to 0.21.8-SNAPSHOT
[bgpcep.git] / bmp / bmp-mock / src / test / java / org / opendaylight / protocol / bmp / mock / BmpMockTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.bmp.mock;
9
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;
14
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;
39
40 public class BmpMockTest {
41     private final BmpSessionListener sessionListener = mock(BmpSessionListener.class);
42     private BmpExtensionProviderActivator bmpActivator;
43     private BmpDispatcherImpl bmpDispatcher;
44
45     @Before
46     public void setUp() {
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());
52     }
53
54     @After
55     public void tearDown() throws Exception {
56         bmpDispatcher.close();
57     }
58
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();
69             sessionUpWait = 10;
70         } else {
71             serverChannel = null;
72             // wait longer for the reconnection attempt
73             sessionUpWait = 40;
74         }
75
76         BmpMock.main(new String[]{
77             "--remote_address",
78             InetSocketAddressUtil.toHostAndPort(serverAddr).toString(),
79             "--peers_count", "3",
80             "--pre_policy_routes",
81             "3"});
82
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))
87             .times(13))
88             .onMessage(any(Notification.class));
89
90         if (serverChannel != null) {
91             serverChannel.close().sync();
92         }
93     }
94
95     @Test(timeout = 20000)
96     public void testMainInPassiveMode() throws Exception {
97         final InetSocketAddress serverAddr = InetSocketAddressUtil.getRandomLoopbackInetSocketAddress();
98         final BmpSessionListenerFactory bmpSessionListenerFactory = () -> BmpMockTest.this.sessionListener;
99
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());
108         futureClient.sync();
109         final Channel serverChannel;
110         final int sessionUpWait;
111         if (futureClient.isSuccess()) {
112             serverChannel = futureClient.channel();
113             sessionUpWait = 10;
114         } else {
115             serverChannel = null;
116             // wait longer for the reconnection attempt
117             sessionUpWait = 40;
118         }
119
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))
124             .times(13))
125             .onMessage(any(Notification.class));
126
127         if (serverChannel != null) {
128             serverChannel.close().sync();
129         }
130     }
131 }