HADOOP-10330. TestFrameDecoder fails if it cannot bind port 12345.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1565507 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Arpit Agarwal 2014-02-07 01:12:52 +00:00
parent fe2fb24a61
commit 0bf97bda18
2 changed files with 27 additions and 8 deletions

View File

@ -325,6 +325,9 @@ Release 2.4.0 - UNRELEASED
HADOOP-10327. Trunk windows build broken after HDFS-5746. HADOOP-10327. Trunk windows build broken after HDFS-5746.
(Vinay via cnauroth) (Vinay via cnauroth)
HADOOP-10330. TestFrameDecoder fails if it cannot bind port 12345.
(Arpit Agarwal)
Release 2.3.0 - UNRELEASED Release 2.3.0 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -23,6 +23,7 @@
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.Random;
import org.apache.hadoop.oncrpc.RpcUtil.RpcFrameDecoder; import org.apache.hadoop.oncrpc.RpcUtil.RpcFrameDecoder;
import org.apache.hadoop.oncrpc.security.CredentialsNone; import org.apache.hadoop.oncrpc.security.CredentialsNone;
@ -31,17 +32,17 @@
import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelException;
import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelHandlerContext;
import org.junit.Test; import org.junit.Test;
import org.mockito.Mockito; import org.mockito.Mockito;
public class TestFrameDecoder { public class TestFrameDecoder {
private static int port = 12345; // some random server port
private static int resultSize; private static int resultSize;
static void testRequest(XDR request) { static void testRequest(XDR request, int serverPort) {
SimpleTcpClient tcpClient = new SimpleTcpClient("localhost", port, request, SimpleTcpClient tcpClient = new SimpleTcpClient("localhost", serverPort, request,
true); true);
tcpClient.run(); tcpClient.run();
} }
@ -148,10 +149,25 @@ public void testMultipleFrames() {
@Test @Test
public void testFrames() { public void testFrames() {
RpcProgram program = new TestFrameDecoder.TestRpcProgram("TestRpcProgram", Random rand = new Random();
"localhost", port, 100000, 1, 2); int serverPort = 30000 + rand.nextInt(10000);
SimpleTcpServer tcpServer = new SimpleTcpServer(port, program, 1); int retries = 10; // A few retries in case initial choice is in use.
tcpServer.run();
while (true) {
try {
RpcProgram program = new TestFrameDecoder.TestRpcProgram("TestRpcProgram",
"localhost", serverPort, 100000, 1, 2);
SimpleTcpServer tcpServer = new SimpleTcpServer(serverPort, program, 1);
tcpServer.run();
break; // Successfully bound a port, break out.
} catch (ChannelException ce) {
if (retries-- > 0) {
serverPort += rand.nextInt(20); // Port in use? Try another.
} else {
throw ce; // Out of retries.
}
}
}
XDR xdrOut = createGetportMount(); XDR xdrOut = createGetportMount();
int headerSize = xdrOut.size(); int headerSize = xdrOut.size();
@ -161,7 +177,7 @@ public void testFrames() {
int requestSize = xdrOut.size() - headerSize; int requestSize = xdrOut.size() - headerSize;
// Send the request to the server // Send the request to the server
testRequest(xdrOut); testRequest(xdrOut, serverPort);
// Verify the server got the request with right size // Verify the server got the request with right size
assertEquals(requestSize, resultSize); assertEquals(requestSize, resultSize);