e538dd0d9fee883f8c2ce3f497e8eecc12c0323d
[bgpcep.git] / bgp / bmp-impl / src / test / java / org / opendaylight / protocol / bmp / impl / session / BmpDispatcherImplTest.java
1 /*
2  * Copyright (c) 2015 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.impl.session;
10
11 import static org.junit.Assert.assertTrue;
12 import static org.mockito.Mockito.timeout;
13 import static org.mockito.Mockito.verify;
14 import static org.mockito.internal.verification.VerificationModeFactory.times;
15 import static org.opendaylight.protocol.util.CheckUtil.checkEquals;
16 import static org.opendaylight.protocol.util.CheckUtil.waitFutureSuccess;
17
18 import com.google.common.base.Optional;
19 import io.netty.channel.Channel;
20 import io.netty.channel.ChannelFuture;
21 import io.netty.channel.ChannelHandlerContext;
22 import io.netty.channel.nio.NioEventLoopGroup;
23 import java.net.InetSocketAddress;
24 import org.junit.After;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.Mock;
28 import org.mockito.Mockito;
29 import org.mockito.MockitoAnnotations;
30 import org.opendaylight.protocol.bgp.parser.impl.BGPActivator;
31 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
32 import org.opendaylight.protocol.bgp.parser.spi.pojo.SimpleBGPExtensionProviderContext;
33 import org.opendaylight.protocol.bmp.api.BmpDispatcher;
34 import org.opendaylight.protocol.bmp.api.BmpSession;
35 import org.opendaylight.protocol.bmp.api.BmpSessionFactory;
36 import org.opendaylight.protocol.bmp.api.BmpSessionListenerFactory;
37 import org.opendaylight.protocol.bmp.impl.BmpDispatcherImpl;
38 import org.opendaylight.protocol.bmp.parser.BmpActivator;
39 import org.opendaylight.protocol.bmp.spi.registry.BmpMessageRegistry;
40 import org.opendaylight.protocol.bmp.spi.registry.SimpleBmpExtensionProviderContext;
41
42 public class BmpDispatcherImplTest {
43
44     private static final int PORT = 45678;
45     private static final InetSocketAddress CLIENT_REMOTE = new InetSocketAddress("127.0.0.10", PORT);
46     private static final InetSocketAddress SERVER = new InetSocketAddress("0.0.0.0", PORT);
47
48     private BmpDispatcher dispatcher;
49     private BGPActivator bgpActivator;
50     private BmpActivator bmpActivator;
51
52     @Mock
53     private BmpSession mockedSession;
54     @Mock
55     private BmpSessionListenerFactory mockedListenerFactory;
56
57     @Before
58     public void setUp() throws Exception {
59         MockitoAnnotations.initMocks(this);
60         Mockito.doNothing().when(this.mockedSession).handlerRemoved(Mockito.any(ChannelHandlerContext.class));
61         Mockito.doNothing().when(this.mockedSession).handlerAdded(Mockito.any(ChannelHandlerContext.class));
62         Mockito.doNothing().when(this.mockedSession).channelRegistered(Mockito.any(ChannelHandlerContext.class));
63         Mockito.doNothing().when(this.mockedSession).channelActive(Mockito.any(ChannelHandlerContext.class));
64         Mockito.doNothing().when(this.mockedSession).channelInactive(Mockito.any(ChannelHandlerContext.class));
65         Mockito.doNothing().when(this.mockedSession).channelUnregistered(Mockito.any(ChannelHandlerContext.class));
66         Mockito.doNothing().when(this.mockedSession).channelReadComplete(Mockito.any(ChannelHandlerContext.class));
67
68         this.bgpActivator = new BGPActivator();
69         final BGPExtensionProviderContext context = new SimpleBGPExtensionProviderContext();
70         this.bgpActivator.start(context);
71         final SimpleBmpExtensionProviderContext ctx = new SimpleBmpExtensionProviderContext();
72         this.bmpActivator = new BmpActivator(context);
73         this.bmpActivator.start(ctx);
74         final BmpMessageRegistry messageRegistry = ctx.getBmpMessageRegistry();
75
76         this.dispatcher = new BmpDispatcherImpl(new NioEventLoopGroup(), new NioEventLoopGroup(),
77             messageRegistry, (channel, sessionListenerFactory) -> BmpDispatcherImplTest.this.mockedSession);
78     }
79
80     @After
81     public void tearDown() throws Exception {
82         this.bgpActivator.close();
83         this.bmpActivator.close();
84         this.dispatcher.close();
85     }
86
87     @Test
88     public void testCreateServer() throws Exception {
89         final ChannelFuture futureServer = this.dispatcher.createServer(SERVER,
90             this.mockedListenerFactory, Optional.absent());
91         waitFutureSuccess(futureServer);
92         final Channel serverChannel = futureServer.channel();
93         checkEquals(()-> assertTrue(serverChannel.isActive()));
94
95
96         final ChannelFuture futureClient = this.dispatcher.createClient(CLIENT_REMOTE,
97             this.mockedListenerFactory, Optional.absent());
98         waitFutureSuccess(futureClient);
99
100         final Channel clientChannel = futureClient.channel();
101         checkEquals(()-> assertTrue(clientChannel.isActive()));
102         verify(this.mockedSession, timeout(500).times(2)).handlerAdded(Mockito.any(ChannelHandlerContext.class));
103         verify(this.mockedSession, timeout(500).times(2)).channelRegistered(Mockito.any(ChannelHandlerContext.class));
104         verify(this.mockedSession, timeout(500).times(2)).channelActive(Mockito.any(ChannelHandlerContext.class));
105         waitFutureSuccess(clientChannel.close());
106         waitFutureSuccess(serverChannel.close());
107     }
108 }