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:
parent
fe2fb24a61
commit
0bf97bda18
@ -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
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user