package net.gleamynode.tmp;

import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.concurrent.Executors;

import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
import org.jboss.netty.handler.logging.LoggingHandler;
import org.jboss.netty.logging.InternalLogLevel;

public class ShortConnectTimeoutTest {
    public static void main(String[] args) throws Exception {
        ClientBootstrap clientBootstrap = new ClientBootstrap(
                new NioClientSocketChannelFactory(
                        Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));

        ChannelPipelineFactory clientPipelineFactory = new ChannelPipelineFactory() {
            @Override
            public ChannelPipeline getPipeline() throws Exception {
                ChannelPipeline pipeline = Channels.pipeline();
                pipeline.addLast("logger", new LoggingHandler(InternalLogLevel.DEBUG));
                return pipeline;
            }
        };

        clientBootstrap.setPipelineFactory(clientPipelineFactory);
        clientBootstrap.setOption("connectTimeoutMillis", 1000);

        // Specify the address blocked by firewall to trigger connect timeout.
        SocketAddress destination = new InetSocketAddress(
                "119.64.207.153", 1023);

        for (int i = 0;; i ++) {
            ChannelFuture channelFuture = clientBootstrap.connect(destination);
            channelFuture.awaitUninterruptibly();
            channelFuture.getChannel().close();
            System.err.println(i);
        }
    }
}