package org.apache.hadoop.net; import static org.junit.Assert.assertEquals; import static org.junit.Assume.assumeTrue; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; import org.apache.hadoop.util.NativeCodeLoader; import org.junit.Before; import org.junit.Test; public class TestSockOpt { @Before public void checkLoaded() { assumeTrue(NativeCodeLoader.isNativeCodeLoaded()); } private ServerSocket startServerSocketAndAssert(int port, int ipTOS) throws IOException { final ServerSocket serverSocket = new ServerSocket(port); new Thread() { @Override public void run() { try { Socket socket = serverSocket.accept(); } catch (IOException e) { e.printStackTrace(); } } }.start(); return serverSocket; } private Socket createClientSocket(int port, int ipTosVal, Socket socket) throws IOException { InetAddress addr = InetAddress.getByName("localhost"); SocketAddress sockAddr = new InetSocketAddress(addr, port); NetUtils.connect(socket, sockAddr, 1000, ipTosVal); return socket; } @Test public void testSetIPTOS() throws IOException { int ipTOS = 184; int port = 9091; ServerSocket serverSocket = null; Socket csocket = null; try { serverSocket = startServerSocketAndAssert(port, ipTOS); // test SocketChannel csocket = createClientSocket(port, ipTOS, new StandardSocketFactory().createSocket()); int actualTOS = NetUtils.getIPTOS(csocket.getChannel()); assertEquals(ipTOS, actualTOS); } finally { if (null != csocket) { csocket.close(); } if (null != serverSocket) { serverSocket.close(); } } } @Test public void testSetInvalidIPTOS() throws IOException { int ipTOS = 7; int port = 9092; ServerSocket serverSocket = null; Socket csocket = null; try { serverSocket = startServerSocketAndAssert(port, ipTOS); // test SocketChannel csocket = createClientSocket(port, ipTOS, new StandardSocketFactory().createSocket()); int actualTOS = NetUtils.getIPTOS(csocket.getChannel()); assertEquals(4, actualTOS); } finally { if (null != csocket) { csocket.close(); } if (null != serverSocket) { serverSocket.close(); } } } }