4767190278f047a748c86482a4ff845d8c812edb
[bgpcep.git] / bgp / 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
9 package org.opendaylight.protocol.bmp.mock;
10
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;
32
33 public class BmpMockTest {
34
35     private final BmpSessionListener sessionListener = Mockito.mock(BmpSessionListener.class);
36     private int serverPort;
37     private BmpExtensionProviderActivator bmpActivator;
38     private BmpDispatcher bmpDispatcher;
39
40     @Before
41     public void setUp() {
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();
49     }
50
51     @After
52     public void tearDown() throws Exception {
53         this.bmpActivator.stop();
54         this.bmpDispatcher.close();
55     }
56
57     @Test
58     public void testMain() throws Exception {
59         final BmpSessionListenerFactory bmpSessionListenerFactory = new BmpSessionListenerFactory() {
60             @Override
61             public BmpSessionListener getSessionListener() {
62                 return BmpMockTest.this.sessionListener;
63             }
64         };
65         Channel serverChannel = bmpDispatcher.createServer(new InetSocketAddress("127.0.0.1", serverPort),
66                 bmpSessionListenerFactory, Optional.<KeyMapping>absent()).channel();
67
68         BmpMock.main(new String[] {"--remote_address", "127.0.0.1:" + serverPort, "--peers_count", "3", "--pre_policy_routes", "3"});
69         Thread.sleep(1000);
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));
73
74         serverChannel.close().sync();
75     }
76
77     @Test
78     public void testMainInPassiveMode() throws Exception {
79         final BmpSessionListenerFactory bmpSessionListenerFactory = new BmpSessionListenerFactory() {
80             @Override
81             public BmpSessionListener getSessionListener() {
82                 return BmpMockTest.this.sessionListener;
83             }
84         };
85
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();
90
91         Thread.sleep(1000);
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));
95
96         serverChannel.close().sync();
97     }
98 }