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
9 package org.opendaylight.protocol.bmp.mock;
11 import com.google.common.base.Optional;
12 import io.netty.channel.Channel;
13 import io.netty.channel.nio.NioEventLoopGroup;
14 import java.net.InetSocketAddress;
15 import org.junit.After;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.mockito.Mockito;
19 import org.opendaylight.protocol.bgp.parser.spi.pojo.ServiceLoaderBGPExtensionProviderContext;
20 import org.opendaylight.protocol.bmp.api.BmpDispatcher;
21 import org.opendaylight.protocol.bmp.api.BmpSession;
22 import org.opendaylight.protocol.bmp.api.BmpSessionListener;
23 import org.opendaylight.protocol.bmp.api.BmpSessionListenerFactory;
24 import org.opendaylight.protocol.bmp.impl.BmpActivator;
25 import org.opendaylight.protocol.bmp.impl.BmpDispatcherImpl;
26 import org.opendaylight.protocol.bmp.impl.session.DefaultBmpSessionFactory;
27 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderActivator;
28 import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderContext;
29 import org.opendaylight.protocol.bmp.spi.registry.SimpleBmpExtensionProviderContext;
30 import org.opendaylight.protocol.concepts.KeyMapping;
31 import org.opendaylight.yangtools.yang.binding.Notification;
33 public class BmpMockTest {
35 private final BmpSessionListener sessionListener = Mockito.mock(BmpSessionListener.class);
36 private int serverPort;
37 private BmpExtensionProviderActivator bmpActivator;
38 private BmpDispatcher bmpDispatcher;
42 final BmpExtensionProviderContext ctx = new SimpleBmpExtensionProviderContext();
43 this.bmpActivator = new BmpActivator(
44 ServiceLoaderBGPExtensionProviderContext.getSingletonInstance());
45 this.bmpActivator.start(ctx);
46 this.bmpDispatcher = new BmpDispatcherImpl(new NioEventLoopGroup(), new NioEventLoopGroup(), ctx.getBmpMessageRegistry(),
47 new DefaultBmpSessionFactory());
48 this.serverPort = BmpMockDispatcherTest.getRandomPort();
52 public void tearDown() throws Exception {
53 this.bmpActivator.stop();
54 this.bmpDispatcher.close();
58 public void testMain() throws Exception {
59 final BmpSessionListenerFactory bmpSessionListenerFactory = new BmpSessionListenerFactory() {
61 public BmpSessionListener getSessionListener() {
62 return BmpMockTest.this.sessionListener;
65 Channel serverChannel = bmpDispatcher.createServer(new InetSocketAddress("127.0.0.1", serverPort),
66 bmpSessionListenerFactory, Optional.<KeyMapping>absent()).channel();
68 BmpMock.main(new String[] {"--remote_address", "127.0.0.1:" + serverPort, "--peers_count", "3", "--pre_policy_routes", "3"});
70 Mockito.verify(this.sessionListener).onSessionUp(Mockito.any(BmpSession.class));
71 //1 * Initiate message + 3 * PeerUp Notification + 9 * Route Monitoring message
72 Mockito.verify(this.sessionListener, Mockito.times(13)).onMessage(Mockito.any(Notification.class));
74 serverChannel.close().sync();
78 public void testMainInPassiveMode() throws Exception {
79 final BmpSessionListenerFactory bmpSessionListenerFactory = new BmpSessionListenerFactory() {
81 public BmpSessionListener getSessionListener() {
82 return BmpMockTest.this.sessionListener;
86 // create a local server in passive mode instead
87 BmpMock.main(new String[]{"--local_address", "127.0.0.1:" + serverPort, "--peers_count", "3", "--pre_policy_routes", "3", "--passive"});
88 Channel serverChannel = bmpDispatcher.createClient(new InetSocketAddress("127.0.0.1", serverPort),
89 bmpSessionListenerFactory, Optional.<KeyMapping>absent()).channel();
92 Mockito.verify(this.sessionListener).onSessionUp(Mockito.any(BmpSession.class));
93 //1 * Initiate message + 3 * PeerUp Notification + 9 * Route Monitoring message
94 Mockito.verify(this.sessionListener, Mockito.times(13)).onMessage(Mockito.any(Notification.class));
96 serverChannel.close().sync();