X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fimpl%2FConcurrentClientsTest.java;h=ce5233c494e6ddac78339709e9ae23dc5df05658;hp=a74a347d3bbf5d29811ddf28dd2c9c825cb460cc;hb=ff42855d9de0ab5e8c409ccde914e6f501676ddb;hpb=d105455084f43d9423b7c0e6af785302e6a3ea93 diff --git a/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/ConcurrentClientsTest.java b/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/ConcurrentClientsTest.java index a74a347d3b..ce5233c494 100644 --- a/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/ConcurrentClientsTest.java +++ b/opendaylight/netconf/netconf-impl/src/test/java/org/opendaylight/controller/netconf/impl/ConcurrentClientsTest.java @@ -11,6 +11,8 @@ package org.opendaylight.controller.netconf.impl; import com.google.common.base.Optional; import com.google.common.collect.Sets; import io.netty.channel.ChannelFuture; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; import io.netty.util.HashedWheelTimer; import org.apache.commons.io.IOUtils; import org.junit.After; @@ -29,6 +31,7 @@ import org.opendaylight.controller.netconf.api.NetconfOperationRouter; import org.opendaylight.controller.netconf.client.NetconfClient; import org.opendaylight.controller.netconf.client.NetconfClientDispatcher; import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl; +import org.opendaylight.controller.netconf.impl.osgi.SessionMonitoringService; import org.opendaylight.controller.netconf.mapping.api.Capability; import org.opendaylight.controller.netconf.mapping.api.HandlingPriority; import org.opendaylight.controller.netconf.mapping.api.NetconfOperation; @@ -42,7 +45,6 @@ import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import javax.management.ObjectName; -import javax.net.ssl.SSLContext; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; @@ -56,15 +58,18 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import static com.google.common.base.Preconditions.checkNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; public class ConcurrentClientsTest { private static final int CONCURRENCY = 16; - public static final NetconfClientDispatcher NETCONF_CLIENT_DISPATCHER = new NetconfClientDispatcher(Optional.absent()); + private static EventLoopGroup nettyGroup = new NioEventLoopGroup(); + public static final NetconfClientDispatcher NETCONF_CLIENT_DISPATCHER = new NetconfClientDispatcher( nettyGroup, nettyGroup); + @Mock private YangStoreService yangStoreService; @Mock @@ -77,6 +82,9 @@ public class ConcurrentClientsTest { private DefaultCommitNotificationProducer commitNot; private NetconfServerDispatcher dispatch; + @Mock + private SessionMonitoringService monitoring; + @Before public void setUp() throws Exception { { // init mocks @@ -101,9 +109,13 @@ public class ConcurrentClientsTest { commitNot = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer()); + doNothing().when(monitoring).onSessionUp(any(NetconfServerSession.class)); + doNothing().when(monitoring).onSessionDown(any(NetconfServerSession.class)); + NetconfServerSessionListenerFactory listenerFactory = new NetconfServerSessionListenerFactory( - factoriesListener, commitNot, idProvider); - dispatch = new NetconfServerDispatcher(Optional. absent(), serverNegotiatorFactory, listenerFactory); + factoriesListener, commitNot, idProvider, monitoring); + NetconfServerDispatcher.ServerChannelInitializer serverChannelInitializer = new NetconfServerDispatcher.ServerChannelInitializer(serverNegotiatorFactory, listenerFactory); + dispatch = new NetconfServerDispatcher(serverChannelInitializer, nettyGroup, nettyGroup); ChannelFuture s = dispatch.createServer(netconfAddress); s.await(); @@ -111,7 +123,7 @@ public class ConcurrentClientsTest { @AfterClass public static void tearDownStatic() { - NETCONF_CLIENT_DISPATCHER.close(); + nettyGroup.shutdownGracefully(); } private NetconfOperationServiceFactory mockOpF() { @@ -160,7 +172,6 @@ public class ConcurrentClientsTest { @After public void cleanUp() throws Exception { commitNot.close(); - dispatch.close(); } @Test @@ -176,7 +187,11 @@ public class ConcurrentClientsTest { for (TestingThread thread : threads) { thread.join(); - assertTrue(thread.success); + if(thread.thrownException.isPresent()) { + Exception exception = thread.thrownException.get(); + logger.error("Thread for testing client failed", exception); + fail("Client thread " + thread + " failed: " + exception.getMessage()); + } } } @@ -196,12 +211,16 @@ public class ConcurrentClientsTest { for (BlockingThread thread : threads) { thread.join(); - assertTrue(thread.success); + if(thread.thrownException.isPresent()) { + Exception exception = thread.thrownException.get(); + logger.error("Thread for testing client failed", exception); + fail("Client thread " + thread + " failed: " + exception.getMessage()); + } } } class BlockingThread extends Thread { - Boolean success; + private Optional thrownException; public BlockingThread(String name) { super("client-" + name); @@ -211,10 +230,9 @@ public class ConcurrentClientsTest { public void run() { try { run2(); - success = true; + thrownException = Optional.absent(); } catch (Exception e) { - success = false; - throw new RuntimeException(e); + thrownException = Optional.of(e); } } @@ -254,7 +272,7 @@ public class ConcurrentClientsTest { private final String clientId; private final int attempts; - private Boolean success; + private Optional thrownException; TestingThread(String clientId, int attempts) { this.clientId = clientId; @@ -275,10 +293,9 @@ public class ConcurrentClientsTest { logger.info("Client with sessionid {} got result {}", sessionId, result); netconfClient.close(); logger.info("Client with session id {} ended", sessionId); - success = true; + thrownException = Optional.absent(); } catch (final Exception e) { - success = false; - throw new RuntimeException(e); + thrownException = Optional.of(e); } } }