Search in sources :

Example 91 with InetSocketAddress

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

the class TestSaslRPC method testPerConnectionConf.

@Test
public void testPerConnectionConf() throws Exception {
    TestTokenSecretManager sm = new TestTokenSecretManager();
    final Server server = setupTestServer(conf, 5, sm);
    final UserGroupInformation current = UserGroupInformation.getCurrentUser();
    final InetSocketAddress addr = NetUtils.getConnectAddress(server);
    TestTokenIdentifier tokenId = new TestTokenIdentifier(new Text(current.getUserName()));
    Token<TestTokenIdentifier> token = new Token<>(tokenId, sm);
    SecurityUtil.setTokenService(token, addr);
    current.addToken(token);
    Configuration newConf = new Configuration(conf);
    newConf.set(CommonConfigurationKeysPublic.HADOOP_RPC_SOCKET_FACTORY_CLASS_DEFAULT_KEY, "");
    Client client = null;
    TestRpcService proxy1 = null;
    TestRpcService proxy2 = null;
    TestRpcService proxy3 = null;
    int[] timeouts = { 111222, 3333333 };
    try {
        newConf.setInt(CommonConfigurationKeysPublic.IPC_CLIENT_CONNECTION_MAXIDLETIME_KEY, timeouts[0]);
        proxy1 = getClient(addr, newConf);
        proxy1.getAuthMethod(null, newEmptyRequest());
        client = ProtobufRpcEngine.getClient(newConf);
        Set<ConnectionId> conns = client.getConnectionIds();
        assertEquals("number of connections in cache is wrong", 1, conns.size());
        // same conf, connection should be re-used
        proxy2 = getClient(addr, newConf);
        proxy2.getAuthMethod(null, newEmptyRequest());
        assertEquals("number of connections in cache is wrong", 1, conns.size());
        // different conf, new connection should be set up
        newConf.setInt(CommonConfigurationKeysPublic.IPC_CLIENT_CONNECTION_MAXIDLETIME_KEY, timeouts[1]);
        proxy3 = getClient(addr, newConf);
        proxy3.getAuthMethod(null, newEmptyRequest());
        assertEquals("number of connections in cache is wrong", 2, conns.size());
        // now verify the proxies have the correct connection ids and timeouts
        ConnectionId[] connsArray = { RPC.getConnectionIdForProxy(proxy1), RPC.getConnectionIdForProxy(proxy2), RPC.getConnectionIdForProxy(proxy3) };
        assertEquals(connsArray[0], connsArray[1]);
        assertEquals(connsArray[0].getMaxIdleTime(), timeouts[0]);
        assertFalse(connsArray[0].equals(connsArray[2]));
        assertNotSame(connsArray[2].getMaxIdleTime(), timeouts[1]);
    } finally {
        server.stop();
        // this is dirty, but clear out connection cache for next run
        if (client != null) {
            client.getConnectionIds().clear();
        }
        if (proxy1 != null)
            RPC.stopProxy(proxy1);
        if (proxy2 != null)
            RPC.stopProxy(proxy2);
        if (proxy3 != null)
            RPC.stopProxy(proxy3);
    }
}
Also used : SaslServer(javax.security.sasl.SaslServer) Configuration(org.apache.hadoop.conf.Configuration) InetSocketAddress(java.net.InetSocketAddress) Text(org.apache.hadoop.io.Text) InvalidToken(org.apache.hadoop.security.token.SecretManager.InvalidToken) ConnectionId(org.apache.hadoop.ipc.Client.ConnectionId) SaslClient(javax.security.sasl.SaslClient) Test(org.junit.Test)

Example 92 with InetSocketAddress

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

the class TestSaslRPC method testSaslResponseOrdering.

// ensure that for all qop settings, client can handle postponed rpc
// responses.  basically ensures that the rpc server isn't encrypting
// and queueing the responses out of order.
@Test(timeout = 10000)
public void testSaslResponseOrdering() throws Exception {
    SecurityUtil.setAuthenticationMethod(AuthenticationMethod.TOKEN, conf);
    UserGroupInformation.setConfiguration(conf);
    TestTokenSecretManager sm = new TestTokenSecretManager();
    Server server = setupTestServer(conf, 1, sm);
    try {
        final InetSocketAddress addr = NetUtils.getConnectAddress(server);
        final UserGroupInformation clientUgi = UserGroupInformation.createRemoteUser("client");
        clientUgi.setAuthenticationMethod(AuthenticationMethod.TOKEN);
        TestTokenIdentifier tokenId = new TestTokenIdentifier(new Text(clientUgi.getUserName()));
        Token<?> token = new Token<>(tokenId, sm);
        SecurityUtil.setTokenService(token, addr);
        clientUgi.addToken(token);
        clientUgi.doAs(new PrivilegedExceptionAction<Void>() {

            @Override
            public Void run() throws Exception {
                final TestRpcService proxy = getClient(addr, conf);
                final ExecutorService executor = Executors.newCachedThreadPool();
                final AtomicInteger count = new AtomicInteger();
                try {
                    // queue up a bunch of futures for postponed calls serviced
                    // in a random order.
                    Future<?>[] futures = new Future<?>[10];
                    for (int i = 0; i < futures.length; i++) {
                        futures[i] = executor.submit(new Callable<Void>() {

                            @Override
                            public Void call() throws Exception {
                                String expect = "future" + count.getAndIncrement();
                                String answer = convert(proxy.echoPostponed(null, newEchoRequest(expect)));
                                assertEquals(expect, answer);
                                return null;
                            }
                        });
                        try {
                            // ensures the call is initiated and the response is blocked.
                            futures[i].get(100, TimeUnit.MILLISECONDS);
                        } catch (TimeoutException te) {
                            // expected.
                            continue;
                        }
                        Assert.fail("future" + i + " did not block");
                    }
                    // triggers responses to be unblocked in a random order.  having
                    // only 1 handler ensures that the prior calls are already
                    // postponed.  1 handler also ensures that this call will
                    // timeout if the postponing doesn't work (ie. free up handler)
                    proxy.sendPostponed(null, newEmptyRequest());
                    for (int i = 0; i < futures.length; i++) {
                        LOG.info("waiting for future" + i);
                        futures[i].get();
                    }
                } finally {
                    RPC.stopProxy(proxy);
                    executor.shutdownNow();
                }
                return null;
            }
        });
    } finally {
        server.stop();
    }
}
Also used : SaslServer(javax.security.sasl.SaslServer) InetSocketAddress(java.net.InetSocketAddress) Text(org.apache.hadoop.io.Text) InvalidToken(org.apache.hadoop.security.token.SecretManager.InvalidToken) ServiceException(com.google.protobuf.ServiceException) UnsupportedCallbackException(javax.security.auth.callback.UnsupportedCallbackException) TimeoutException(java.util.concurrent.TimeoutException) SaslException(javax.security.sasl.SaslException) IOException(java.io.IOException) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ExecutorService(java.util.concurrent.ExecutorService) TimeoutException(java.util.concurrent.TimeoutException) Test(org.junit.Test)

Example 93 with InetSocketAddress

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

the class TestServer method testBind.

@Test
public void testBind() throws Exception {
    Configuration conf = new Configuration();
    ServerSocket socket = new ServerSocket();
    InetSocketAddress address = new InetSocketAddress("0.0.0.0", 0);
    socket.bind(address);
    try {
        int min = socket.getLocalPort();
        int max = min + 100;
        conf.set("TestRange", min + "-" + max);
        ServerSocket socket2 = new ServerSocket();
        InetSocketAddress address2 = new InetSocketAddress("0.0.0.0", 0);
        Server.bind(socket2, address2, 10, conf, "TestRange");
        try {
            assertTrue(socket2.isBound());
            assertTrue(socket2.getLocalPort() > min);
            assertTrue(socket2.getLocalPort() <= max);
        } finally {
            socket2.close();
        }
    } finally {
        socket.close();
    }
}
Also used : Configuration(org.apache.hadoop.conf.Configuration) InetSocketAddress(java.net.InetSocketAddress) ServerSocket(java.net.ServerSocket) Test(org.junit.Test)

Example 94 with InetSocketAddress

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

the class TestServer method testBindSimple.

@Test
public void testBindSimple() throws Exception {
    ServerSocket socket = new ServerSocket();
    InetSocketAddress address = new InetSocketAddress("0.0.0.0", 0);
    Server.bind(socket, address, 10);
    try {
        assertTrue(socket.isBound());
    } finally {
        socket.close();
    }
}
Also used : InetSocketAddress(java.net.InetSocketAddress) ServerSocket(java.net.ServerSocket) Test(org.junit.Test)

Example 95 with InetSocketAddress

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

the class TestServer method testEmptyConfig.

@Test
public void testEmptyConfig() throws Exception {
    Configuration conf = new Configuration();
    conf.set("TestRange", "");
    ServerSocket socket = new ServerSocket();
    InetSocketAddress address = new InetSocketAddress("0.0.0.0", 0);
    try {
        Server.bind(socket, address, 10, conf, "TestRange");
        assertTrue(socket.isBound());
    } finally {
        socket.close();
    }
}
Also used : Configuration(org.apache.hadoop.conf.Configuration) InetSocketAddress(java.net.InetSocketAddress) ServerSocket(java.net.ServerSocket) Test(org.junit.Test)

Aggregations

InetSocketAddress (java.net.InetSocketAddress)2586 Test (org.junit.Test)595 IOException (java.io.IOException)592 Socket (java.net.Socket)345 InetAddress (java.net.InetAddress)242 SocketAddress (java.net.SocketAddress)176 ServerSocket (java.net.ServerSocket)170 ArrayList (java.util.ArrayList)168 Configuration (org.apache.hadoop.conf.Configuration)140 ByteBuffer (java.nio.ByteBuffer)129 UnknownHostException (java.net.UnknownHostException)122 InputStream (java.io.InputStream)102 OutputStream (java.io.OutputStream)101 SocketChannel (java.nio.channels.SocketChannel)101 SocketException (java.net.SocketException)89 File (java.io.File)88 HashMap (java.util.HashMap)78 URI (java.net.URI)72 Proxy (java.net.Proxy)65 SocketTimeoutException (java.net.SocketTimeoutException)65