package org.apache.hadoop.hdfs.server.namenode;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.protocol.ClientProtocol;
import org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol;
import org.apache.hadoop.ipc.RPC;
import junit.framework.TestCase;
public class TestNameNodePorts extends TestCase {
private static final String ERROR_MSG_PREFIX =
"java.io.IOException: Unknown protocol to name node";
public void testSinglePortStartup() throws IOException {
Configuration conf = new Configuration();
MiniDFSCluster cluster = new MiniDFSCluster(conf, 2, true, null);
NameNode nn = cluster.getNameNode();
InetSocketAddress dnAddress = nn.getNameNodeDNAddress();
InetSocketAddress clientAddress = nn.getNameNodeAddress();
assertEquals(clientAddress, dnAddress);
DatanodeProtocol dnProtocol = (DatanodeProtocol) RPC.waitForProxy(
DatanodeProtocol.class, DatanodeProtocol.versionID, dnAddress, conf);
// perform a dummy call
dnProtocol.getProtocolVersion(DatanodeProtocol.class.getName(),
DatanodeProtocol.versionID);
ClientProtocol client = (ClientProtocol) RPC.waitForProxy(
ClientProtocol.class, ClientProtocol.versionID, dnAddress, conf);
client.getProtocolVersion(ClientProtocol.class.getName(),
ClientProtocol.versionID);
cluster.shutdown();
}
public void testBothPortsStartup() throws IOException {
Configuration conf = new Configuration();
NameNode.setDNProtocolAddress(conf, "localhost:0");
MiniDFSCluster cluster = new MiniDFSCluster(conf, 2, true, null);
NameNode nn = cluster.getNameNode();
InetSocketAddress dnAddress = nn.getNameNodeDNAddress();
InetSocketAddress clientAddress = nn.getNameNodeAddress();
assertNotSame(clientAddress, dnAddress);
DatanodeProtocol dnProtocol = (DatanodeProtocol) RPC.waitForProxy(
DatanodeProtocol.class, DatanodeProtocol.versionID, dnAddress, conf);
// perform a dummy call
dnProtocol.getProtocolVersion(DatanodeProtocol.class.getName(),
DatanodeProtocol.versionID);
try {
dnProtocol = (DatanodeProtocol) RPC.waitForProxy(DatanodeProtocol.class,
DatanodeProtocol.versionID, clientAddress, conf);
// perform a dummy call
dnProtocol.getProtocolVersion(DatanodeProtocol.class.getName(),
DatanodeProtocol.versionID);
} catch (IOException ex) {
System.out.println("ERROR: " + ex.getMessage());
assertTrue(ex.getMessage().startsWith(ERROR_MSG_PREFIX));
}
ClientProtocol client = (ClientProtocol) RPC.waitForProxy(
ClientProtocol.class, ClientProtocol.versionID, clientAddress, conf);
client.getProtocolVersion(ClientProtocol.class.getName(),
ClientProtocol.versionID);
try {
client = (ClientProtocol) RPC.waitForProxy(ClientProtocol.class,
ClientProtocol.versionID, dnAddress, conf);
client.getProtocolVersion(ClientProtocol.class.getName(),
ClientProtocol.versionID);
} catch (IOException ex) {
assertTrue(ex.getMessage().startsWith(ERROR_MSG_PREFIX));
}
cluster.shutdown();
}
}