Repository: hadoop
Updated Branches:
  refs/heads/trunk 77031a9c3 -> 1faaa6907


HADOOP-9321. fix coverage org.apache.hadoop.net (Ivan A. Veselovsky via aw)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/1faaa690
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/1faaa690
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/1faaa690

Branch: refs/heads/trunk
Commit: 1faaa6907852b193cc5ac34f25d6ae41a1f10e61
Parents: 77031a9
Author: Allen Wittenauer <a...@apache.org>
Authored: Tue Jun 28 20:37:42 2016 -0700
Committer: Allen Wittenauer <a...@apache.org>
Committed: Tue Jun 28 20:37:42 2016 -0700

----------------------------------------------------------------------
 .../apache/hadoop/ipc/TestSocketFactory.java    | 201 ++++++++++++++++++-
 1 file changed, 198 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/1faaa690/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestSocketFactory.java
----------------------------------------------------------------------
diff --git 
a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestSocketFactory.java
 
b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestSocketFactory.java
index f2d312e..ce481dc 100644
--- 
a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestSocketFactory.java
+++ 
b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestSocketFactory.java
@@ -17,8 +17,17 @@
  */
 package org.apache.hadoop.ipc;
 
-import static org.junit.Assert.assertSame;
-
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.Proxy.Type;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -29,11 +38,61 @@ import org.junit.Assert;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.CommonConfigurationKeys;
 import org.apache.hadoop.net.NetUtils;
+import org.apache.hadoop.net.SocksSocketFactory;
 import org.apache.hadoop.net.StandardSocketFactory;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.fail;
 
+/**
+ * test StandardSocketFactory and SocksSocketFactory NetUtils
+ *
+ */
 public class TestSocketFactory {
 
+  private static final int START_STOP_TIMEOUT_SEC = 30;
+
+  private ServerRunnable serverRunnable;
+  private Thread serverThread;
+  private int port;
+
+  private void startTestServer() throws Exception {
+    // start simple tcp server.
+    serverRunnable = new ServerRunnable();
+    serverThread = new Thread(serverRunnable);
+    serverThread.start();
+    final long timeout = System.currentTimeMillis() + START_STOP_TIMEOUT_SEC * 
1000;
+    while (!serverRunnable.isReady()) {
+      assertNull(serverRunnable.getThrowable());
+      Thread.sleep(10);
+      if (System.currentTimeMillis() > timeout) {
+        fail("Server thread did not start properly in allowed time of "
+            + START_STOP_TIMEOUT_SEC + " sec.");
+      }
+    }
+    port = serverRunnable.getPort();
+  }
+
+  @After
+  public void stopTestServer() throws InterruptedException {
+    final Thread t = serverThread;
+    if (t != null) {
+      serverThread = null;
+      port = -1;
+      // stop server
+      serverRunnable.stop();
+      t.join(START_STOP_TIMEOUT_SEC * 1000);
+      assertFalse(t.isAlive());
+      assertNull(serverRunnable.getThrowable());
+    }
+  }
+
   @Test
   public void testSocketFactoryAsKeyInMap() {
     Map<SocketFactory, Integer> dummyCache = new HashMap<SocketFactory, 
Integer>();
@@ -64,9 +123,145 @@ public class TestSocketFactory {
   }
 
   /**
-   * A dummy socket factory class that extends the StandardSocketFactory. 
+   * A dummy socket factory class that extends the StandardSocketFactory.
    */
   static class DummySocketFactory extends StandardSocketFactory {
+
+  }
+
+  /**
+   * Test SocksSocketFactory.
+   */
+  @Test (timeout=5000)
+  public void testSocksSocketFactory() throws Exception {
+    startTestServer();
+    testSocketFactory(new SocksSocketFactory());
+  }
+
+  /**
+   * Test StandardSocketFactory.
+   */
+  @Test (timeout=5000)
+  public void testStandardSocketFactory() throws Exception {
+    startTestServer();
+    testSocketFactory(new StandardSocketFactory());
+  }
+
+  /*
+   * Common test implementation.
+   */
+  private void testSocketFactory(SocketFactory socketFactory) throws Exception 
{
+    assertNull(serverRunnable.getThrowable());
+
+    InetAddress address = InetAddress.getLocalHost();
+    Socket socket = socketFactory.createSocket(address, port);
+    checkSocket(socket);
+    socket.close();
+
+    socket = socketFactory.createSocket(address, port,
+        InetAddress.getLocalHost(), 0);
+    checkSocket(socket);
+    socket.close();
+
+    socket = socketFactory.createSocket("localhost", port);
+    checkSocket(socket);
+    socket.close();
+
+    socket = socketFactory.createSocket("localhost", port,
+        InetAddress.getLocalHost(), 0);
+    checkSocket(socket);
+    socket.close();
+
+  }
+
+  /**
+   * test proxy methods
+   */
+  @Test (timeout=5000)
+  public void testProxy() throws Exception {
+    SocksSocketFactory templateWithoutProxy = new SocksSocketFactory();
+    Proxy proxy = new Proxy(Type.SOCKS, InetSocketAddress.createUnresolved(
+        "localhost", 0));
+
+    SocksSocketFactory templateWithProxy = new SocksSocketFactory(proxy);
+    assertFalse(templateWithoutProxy.equals(templateWithProxy));
+
+    Configuration configuration = new Configuration();
+    configuration.set("hadoop.socks.server", "localhost:0");
+
+    templateWithoutProxy.setConf(configuration);
+    assertTrue(templateWithoutProxy.equals(templateWithProxy));
+
+  }
+
+  private void checkSocket(Socket socket) throws Exception {
+    BufferedReader input = new BufferedReader(new InputStreamReader(
+        socket.getInputStream()));
+    DataOutputStream out = new DataOutputStream(socket.getOutputStream());
+    out.writeBytes("test\n");
+    String answer = input.readLine();
+    assertEquals("TEST", answer);
+
+  }
+
+  /**
+   * Simple tcp server. Server gets a string, transforms it to upper case and 
returns it.
+   */
+  private static class ServerRunnable implements Runnable {
+
+    private volatile boolean works = true;
+    private ServerSocket testSocket;
+    private volatile boolean ready = false;
+    private volatile Throwable throwable;
+    private int port0;
+
+    @Override
+    public void run() {
+      try {
+        testSocket = new ServerSocket(0);
+        port0 = testSocket.getLocalPort();
+        ready = true;
+        while (works) {
+          try {
+            Socket connectionSocket = testSocket.accept();
+            BufferedReader input = new BufferedReader(new InputStreamReader(
+                connectionSocket.getInputStream()));
+            DataOutputStream out = new DataOutputStream(
+                connectionSocket.getOutputStream());
+            String inData = input.readLine();
+
+            String outData = inData.toUpperCase() + "\n";
+            out.writeBytes(outData);
+          } catch (SocketException ignored) {
+
+          }
+        }
+      } catch (IOException ioe) {
+        ioe.printStackTrace();
+        throwable = ioe;
+      }
+    }
+
+    public void stop() {
+      works = false;
+      try {
+        testSocket.close();
+      } catch (IOException e) {
+        e.printStackTrace();
+      }
+    }
+
+    public boolean isReady() {
+      return ready;
+    }
+
+    public int getPort() {
+      return port0;
+    }
     
+    public Throwable getThrowable() {
+      return throwable;
+    }
   }
+
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to