package mousio.etcd4j.transport; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelOption; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import mousio.client.retry.RetryNTimes; import mousio.etcd4j.EtcdClient; import mousio.etcd4j.responses.EtcdAuthenticationException; import org.junit.Ignore; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URI; import static org.junit.Assert.*; public class EtcdNettyClientTest { private static final Logger LOGGER = LoggerFactory.getLogger(EtcdNettyClientTest.class); private static final URI ETCD_URI = URI.create("http://127.0.0.1:2379"); @Test public void testConfig() throws Exception { try { NioEventLoopGroup evl = new NioEventLoopGroup(); EtcdNettyConfig config = new EtcdNettyConfig() .setConnectTimeout(100) .setSocketChannelClass(NioSocketChannel.class) .setMaxFrameSize(1024 * 1024) .setEventLoopGroup(evl) .setHostName("localhost"); EtcdNettyClient client = new EtcdNettyClient(config, ETCD_URI); Bootstrap bootstrap = client.getBootstrap(); Channel channel = bootstrap.connect(ETCD_URI.getHost(), ETCD_URI.getPort()).sync().channel(); assertEquals(evl, bootstrap.config().group()); assertEquals(100, channel.config().getOption(ChannelOption.CONNECT_TIMEOUT_MILLIS).intValue()); } catch (Throwable t) { LOGGER.warn("", t); throw t; } } @Test public void testManagedEventLoopGroup() throws Exception { NioEventLoopGroup evl = new NioEventLoopGroup(); EtcdNettyConfig config = new EtcdNettyConfig() .setConnectTimeout(100) .setSocketChannelClass(NioSocketChannel.class) .setMaxFrameSize(1024 * 1024) .setEventLoopGroup(evl, false) .setHostName("localhost"); EtcdNettyClient client = new EtcdNettyClient(config, ETCD_URI); client.close(); assertTrue(!(evl.isShuttingDown() || evl.isShutdown() || evl.isTerminated())); evl.shutdownGracefully(); assertTrue(evl.isShuttingDown() || evl.isShutdown() || evl.isTerminated()); } @Test public void testCustomEtcdNettyClient() throws Exception { NioEventLoopGroup evl = new NioEventLoopGroup(); EtcdNettyConfig config = new EtcdNettyConfig() .setConnectTimeout(100) .setSocketChannelClass(NioSocketChannel.class) .setMaxFrameSize(1024 * 1024) .setEventLoopGroup(evl) .setHostName("localhost"); EtcdNettyClient client = new EtcdNettyClient(config, ETCD_URI); EtcdClient etcdClient = new EtcdClient(client); etcdClient.setRetryHandler(new RetryNTimes(0, 0)); assertNotNull(etcdClient.version()); } @Test public void testEtcdClientClose() throws Exception { NioEventLoopGroup evl = new NioEventLoopGroup(); EtcdNettyConfig config = new EtcdNettyConfig() .setConnectTimeout(100) .setSocketChannelClass(NioSocketChannel.class) .setMaxFrameSize(1024 * 1024) .setEventLoopGroup(evl) .setHostName("localhost"); assertTrue(config.isManagedEventLoopGroup()); EtcdNettyClient client = new EtcdNettyClient(config, ETCD_URI); EtcdClient etcdClient = new EtcdClient(client); etcdClient.setRetryHandler(new RetryNTimes(500, 2)); try { etcdClient.put("foo", "bar").send().get(); } catch (Throwable e) { } try { etcdClient.close(); } catch (Throwable e) { } assertTrue(evl.isShuttingDown() || evl.isShutdown() || evl.isTerminated()); } @Ignore @Test public void testAuth() throws Exception { EtcdClient client = new EtcdClient("test", "test", ETCD_URI); assertNotNull(client.get("/test/messages").send().get()); } @Ignore @Test(expected = EtcdAuthenticationException.class) public void testAuthFailure() throws Exception { EtcdClient client = new EtcdClient("test", "test_", ETCD_URI); client.get("/test/messages").send().get(); } }