Search in sources :

Example 26 with ServerSocket

use of java.net.ServerSocket in project hadoop by apache.

the class TestDistributedFileSystem method testDFSClientPeerReadTimeout.

@Test(timeout = 10000)
public void testDFSClientPeerReadTimeout() throws IOException {
    final int timeout = 1000;
    final Configuration conf = new HdfsConfiguration();
    conf.setInt(HdfsClientConfigKeys.DFS_CLIENT_SOCKET_TIMEOUT_KEY, timeout);
    // only need cluster to create a dfs client to get a peer
    final MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).build();
    try {
        cluster.waitActive();
        DistributedFileSystem dfs = cluster.getFileSystem();
        // use a dummy socket to ensure the read timesout
        ServerSocket socket = new ServerSocket(0);
        Peer peer = dfs.getClient().newConnectedPeer((InetSocketAddress) socket.getLocalSocketAddress(), null, null);
        long start = Time.now();
        try {
            peer.getInputStream().read();
            Assert.fail("read should timeout");
        } catch (SocketTimeoutException ste) {
            long delta = Time.now() - start;
            if (delta < timeout * 0.9) {
                throw new IOException("read timedout too soon in " + delta + " ms.", ste);
            }
            if (delta > timeout * 1.1) {
                throw new IOException("read timedout too late in " + delta + " ms.", ste);
            }
        }
    } finally {
        cluster.shutdown();
    }
}
Also used : SocketTimeoutException(java.net.SocketTimeoutException) Configuration(org.apache.hadoop.conf.Configuration) Peer(org.apache.hadoop.hdfs.net.Peer) ServerSocket(java.net.ServerSocket) IOException(java.io.IOException) Test(org.junit.Test)

Example 27 with ServerSocket

use of java.net.ServerSocket in project hadoop by apache.

the class TestDistributedFileSystem method testDFSClientPeerWriteTimeout.

@Test(timeout = 10000)
public void testDFSClientPeerWriteTimeout() throws IOException {
    final int timeout = 1000;
    final Configuration conf = new HdfsConfiguration();
    conf.setInt(HdfsClientConfigKeys.DFS_CLIENT_SOCKET_TIMEOUT_KEY, timeout);
    // only need cluster to create a dfs client to get a peer
    final MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).build();
    try {
        cluster.waitActive();
        DistributedFileSystem dfs = cluster.getFileSystem();
        // Write 10 MB to a dummy socket to ensure the write times out
        ServerSocket socket = new ServerSocket(0);
        Peer peer = dfs.getClient().newConnectedPeer((InetSocketAddress) socket.getLocalSocketAddress(), null, null);
        long start = Time.now();
        try {
            byte[] buf = new byte[10 * 1024 * 1024];
            peer.getOutputStream().write(buf);
            long delta = Time.now() - start;
            Assert.fail("write finish in " + delta + " ms" + "but should timedout");
        } catch (SocketTimeoutException ste) {
            long delta = Time.now() - start;
            if (delta < timeout * 0.9) {
                throw new IOException("write timedout too soon in " + delta + " ms.", ste);
            }
            if (delta > timeout * 1.2) {
                throw new IOException("write timedout too late in " + delta + " ms.", ste);
            }
        }
    } finally {
        cluster.shutdown();
    }
}
Also used : SocketTimeoutException(java.net.SocketTimeoutException) Configuration(org.apache.hadoop.conf.Configuration) Peer(org.apache.hadoop.hdfs.net.Peer) ServerSocket(java.net.ServerSocket) IOException(java.io.IOException) Test(org.junit.Test)

Example 28 with ServerSocket

use of java.net.ServerSocket in project hadoop by apache.

the class TestLdapGroupsMapping method testLdapConnectionTimeout.

/**
   * Test that if the {@link LdapGroupsMapping#CONNECTION_TIMEOUT} is set in the
   * configuration, the LdapGroupsMapping connection will timeout by this value
   * if it does not get a LDAP response from the server.
   * @throws IOException
   * @throws InterruptedException
   */
@Test(timeout = 30000)
public void testLdapConnectionTimeout() throws IOException, InterruptedException {
    // 3s
    final int connectionTimeoutMs = 3 * 1000;
    try (ServerSocket serverSock = new ServerSocket(0)) {
        final CountDownLatch finLatch = new CountDownLatch(1);
        // Below we create a LDAP server which will accept a client request;
        // but it will never reply to the bind (connect) request.
        // Client of this LDAP server is expected to get a connection timeout.
        final Thread ldapServer = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    try (Socket ignored = serverSock.accept()) {
                        finLatch.await();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        ldapServer.start();
        final LdapGroupsMapping mapping = new LdapGroupsMapping();
        final Configuration conf = new Configuration();
        conf.set(LdapGroupsMapping.LDAP_URL_KEY, "ldap://localhost:" + serverSock.getLocalPort());
        conf.setInt(CONNECTION_TIMEOUT, connectionTimeoutMs);
        mapping.setConf(conf);
        try {
            mapping.doGetGroups("hadoop", 1);
            fail("The LDAP query should have timed out!");
        } catch (NamingException ne) {
            LOG.debug("Got the exception while LDAP querying: ", ne);
            assertExceptionContains("LDAP response read timed out, timeout used:" + connectionTimeoutMs + "ms", ne);
            assertFalse(ne.getMessage().contains("remaining name"));
        } finally {
            finLatch.countDown();
        }
        ldapServer.join();
    }
}
Also used : Configuration(org.apache.hadoop.conf.Configuration) ServerSocket(java.net.ServerSocket) NamingException(javax.naming.NamingException) CountDownLatch(java.util.concurrent.CountDownLatch) Socket(java.net.Socket) ServerSocket(java.net.ServerSocket) NamingException(javax.naming.NamingException) IOException(java.io.IOException) CommunicationException(javax.naming.CommunicationException) Test(org.junit.Test)

Example 29 with ServerSocket

use of java.net.ServerSocket in project hadoop by apache.

the class TestLdapGroupsMapping method testLdapReadTimeout.

/**
   * Test that if the {@link LdapGroupsMapping#READ_TIMEOUT} is set in the
   * configuration, the LdapGroupsMapping query will timeout by this value if
   * it does not get a LDAP response from the server.
   *
   * @throws IOException
   * @throws InterruptedException
   */
@Test(timeout = 30000)
public void testLdapReadTimeout() throws IOException, InterruptedException {
    // 4s
    final int readTimeoutMs = 4 * 1000;
    try (ServerSocket serverSock = new ServerSocket(0)) {
        final CountDownLatch finLatch = new CountDownLatch(1);
        // Below we create a LDAP server which will accept a client request,
        // authenticate it successfully; but it will never reply to the following
        // query request.
        // Client of this LDAP server is expected to get a read timeout.
        final Thread ldapServer = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    try (Socket clientSock = serverSock.accept()) {
                        IOUtils.skipFully(clientSock.getInputStream(), 1);
                        clientSock.getOutputStream().write(AUTHENTICATE_SUCCESS_MSG);
                        finLatch.await();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        ldapServer.start();
        final LdapGroupsMapping mapping = new LdapGroupsMapping();
        final Configuration conf = new Configuration();
        conf.set(LdapGroupsMapping.LDAP_URL_KEY, "ldap://localhost:" + serverSock.getLocalPort());
        conf.setInt(READ_TIMEOUT, readTimeoutMs);
        mapping.setConf(conf);
        try {
            mapping.doGetGroups("hadoop", 1);
            fail("The LDAP query should have timed out!");
        } catch (NamingException ne) {
            LOG.debug("Got the exception while LDAP querying: ", ne);
            assertExceptionContains("LDAP response read timed out, timeout used:" + readTimeoutMs + "ms", ne);
            assertExceptionContains("remaining name", ne);
        } finally {
            finLatch.countDown();
        }
        ldapServer.join();
    }
}
Also used : Configuration(org.apache.hadoop.conf.Configuration) ServerSocket(java.net.ServerSocket) NamingException(javax.naming.NamingException) CountDownLatch(java.util.concurrent.CountDownLatch) Socket(java.net.Socket) ServerSocket(java.net.ServerSocket) NamingException(javax.naming.NamingException) IOException(java.io.IOException) CommunicationException(javax.naming.CommunicationException) Test(org.junit.Test)

Example 30 with ServerSocket

use of java.net.ServerSocket in project hbase by apache.

the class HBaseTestingUtility method available.

/**
   * Checks to see if a specific port is available.
   *
   * @param port the port number to check for availability
   * @return <tt>true</tt> if the port is available, or <tt>false</tt> if not
   */
public static boolean available(int port) {
    ServerSocket ss = null;
    DatagramSocket ds = null;
    try {
        ss = new ServerSocket(port);
        ss.setReuseAddress(true);
        ds = new DatagramSocket(port);
        ds.setReuseAddress(true);
        return true;
    } catch (IOException e) {
    // Do nothing
    } finally {
        if (ds != null) {
            ds.close();
        }
        if (ss != null) {
            try {
                ss.close();
            } catch (IOException e) {
            /* should not be thrown */
            }
        }
    }
    return false;
}
Also used : DatagramSocket(java.net.DatagramSocket) ServerSocket(java.net.ServerSocket) IOException(java.io.IOException)

Aggregations

ServerSocket (java.net.ServerSocket)655 IOException (java.io.IOException)306 Socket (java.net.Socket)254 InetSocketAddress (java.net.InetSocketAddress)126 Test (org.junit.Test)94 SocketException (java.net.SocketException)54 InputStream (java.io.InputStream)48 SocketTimeoutException (java.net.SocketTimeoutException)42 OutputStream (java.io.OutputStream)40 InetAddress (java.net.InetAddress)39 BindException (java.net.BindException)27 URL (java.net.URL)26 InputStreamReader (java.io.InputStreamReader)23 File (java.io.File)22 UnknownHostException (java.net.UnknownHostException)22 SSLSocket (javax.net.ssl.SSLSocket)21 BufferedReader (java.io.BufferedReader)20 SSLServerSocket (javax.net.ssl.SSLServerSocket)20 ServerSocketChannel (java.nio.channels.ServerSocketChannel)15 SocketChannel (java.nio.channels.SocketChannel)14