YARN-427. Coverage fix for org.apache.hadoop.yarn.server.api.* (Aleksey Gorshkov via jeagles)
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1492282 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f9186f3ae8
commit
b90755c296
|
@ -845,6 +845,9 @@ Release 0.23.9 - UNRELEASED
|
||||||
|
|
||||||
IMPROVEMENTS
|
IMPROVEMENTS
|
||||||
|
|
||||||
|
YARN-427. Coverage fix for org.apache.hadoop.yarn.server.api.* (Aleksey
|
||||||
|
Gorshkov via jeagles)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.yarn;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
|
||||||
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.ipc.Server;
|
||||||
|
import org.apache.hadoop.net.NetUtils;
|
||||||
|
import org.apache.hadoop.yarn.exceptions.YarnException;
|
||||||
|
import org.apache.hadoop.yarn.factories.impl.pb.RpcClientFactoryPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.factories.impl.pb.RpcServerFactoryPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
||||||
|
import org.apache.hadoop.yarn.server.api.ResourceTracker;
|
||||||
|
import org.apache.hadoop.yarn.server.api.protocolrecords.NodeHeartbeatRequest;
|
||||||
|
import org.apache.hadoop.yarn.server.api.protocolrecords.NodeHeartbeatResponse;
|
||||||
|
import org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerRequest;
|
||||||
|
import org.apache.hadoop.yarn.server.api.protocolrecords.RegisterNodeManagerResponse;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test ResourceTrackerPBClientImpl. this class should have methods
|
||||||
|
* registerNodeManager and newRecordInstance.
|
||||||
|
*/
|
||||||
|
public class TestResourceTrackerPBClientImpl {
|
||||||
|
|
||||||
|
private static ResourceTracker client;
|
||||||
|
private static Server server;
|
||||||
|
private final static org.apache.hadoop.yarn.factories.RecordFactory recordFactory = RecordFactoryProvider
|
||||||
|
.getRecordFactory(null);
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void start() {
|
||||||
|
InetSocketAddress address = new InetSocketAddress(0);
|
||||||
|
Configuration configuration = new Configuration();
|
||||||
|
ResourceTracker instance = new ResourceTrackerTestImpl();
|
||||||
|
server = RpcServerFactoryPBImpl.get().getServer(ResourceTracker.class,
|
||||||
|
instance, address, configuration, null, 1);
|
||||||
|
server.start();
|
||||||
|
|
||||||
|
client = (ResourceTracker) RpcClientFactoryPBImpl.get().getClient(
|
||||||
|
ResourceTracker.class, 1, NetUtils.getConnectAddress(server),
|
||||||
|
configuration);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void stop() {
|
||||||
|
if (server != null) {
|
||||||
|
server.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the method registerNodeManager. Method should return a not null
|
||||||
|
* result.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testResourceTrackerPBClientImpl() throws Exception {
|
||||||
|
RegisterNodeManagerRequest request = recordFactory
|
||||||
|
.newRecordInstance(RegisterNodeManagerRequest.class);
|
||||||
|
assertNotNull(client.registerNodeManager(request));
|
||||||
|
|
||||||
|
ResourceTrackerTestImpl.exception = true;
|
||||||
|
try {
|
||||||
|
client.registerNodeManager(request);
|
||||||
|
fail("there should be YarnException");
|
||||||
|
} catch (YarnException e) {
|
||||||
|
assertTrue(e.getMessage().startsWith("testMessage"));
|
||||||
|
}finally{
|
||||||
|
ResourceTrackerTestImpl.exception = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the method nodeHeartbeat. Method should return a not null result.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNodeHeartbeat() throws Exception {
|
||||||
|
NodeHeartbeatRequest request = recordFactory
|
||||||
|
.newRecordInstance(NodeHeartbeatRequest.class);
|
||||||
|
assertNotNull(client.nodeHeartbeat(request));
|
||||||
|
|
||||||
|
ResourceTrackerTestImpl.exception = true;
|
||||||
|
try {
|
||||||
|
client.nodeHeartbeat(request);
|
||||||
|
fail("there should be YarnException");
|
||||||
|
} catch (YarnException e) {
|
||||||
|
assertTrue(e.getMessage().startsWith("testMessage"));
|
||||||
|
}finally{
|
||||||
|
ResourceTrackerTestImpl.exception = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static class ResourceTrackerTestImpl implements ResourceTracker {
|
||||||
|
|
||||||
|
public static boolean exception = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RegisterNodeManagerResponse registerNodeManager(
|
||||||
|
RegisterNodeManagerRequest request) throws YarnException, IOException {
|
||||||
|
if (exception) {
|
||||||
|
throw new YarnException("testMessage");
|
||||||
|
}
|
||||||
|
return recordFactory.newRecordInstance(RegisterNodeManagerResponse.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NodeHeartbeatResponse nodeHeartbeat(NodeHeartbeatRequest request)
|
||||||
|
throws YarnException, IOException {
|
||||||
|
if (exception) {
|
||||||
|
throw new YarnException("testMessage");
|
||||||
|
}
|
||||||
|
return recordFactory.newRecordInstance(NodeHeartbeatResponse.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,267 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.hadoop.yarn;
|
||||||
|
|
||||||
|
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
||||||
|
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
||||||
|
import org.apache.hadoop.yarn.api.records.ContainerId;
|
||||||
|
import org.apache.hadoop.yarn.api.records.ContainerStatus;
|
||||||
|
import org.apache.hadoop.yarn.api.records.NodeHealthStatus;
|
||||||
|
import org.apache.hadoop.yarn.api.records.NodeId;
|
||||||
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
|
import org.apache.hadoop.yarn.api.records.impl.pb.ApplicationAttemptIdPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.api.records.impl.pb.ApplicationIdPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.api.records.impl.pb.ContainerIdPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.factory.providers.RecordFactoryProvider;
|
||||||
|
import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.NodeHeartbeatRequestPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.NodeHeartbeatResponsePBImpl;
|
||||||
|
import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RegisterNodeManagerRequestPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.server.api.protocolrecords.impl.pb.RegisterNodeManagerResponsePBImpl;
|
||||||
|
import org.apache.hadoop.yarn.server.api.records.MasterKey;
|
||||||
|
import org.apache.hadoop.yarn.server.api.records.NodeAction;
|
||||||
|
import org.apache.hadoop.yarn.server.api.records.NodeStatus;
|
||||||
|
import org.apache.hadoop.yarn.server.api.records.impl.pb.MasterKeyPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.server.api.records.impl.pb.NodeStatusPBImpl;
|
||||||
|
import org.apache.hadoop.yarn.server.api.records.impl.pb.SerializedExceptionPBImpl;
|
||||||
|
import org.junit.Test;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple test classes from org.apache.hadoop.yarn.server.api
|
||||||
|
*/
|
||||||
|
public class TestYarnServerApiClasses {
|
||||||
|
|
||||||
|
private final static org.apache.hadoop.yarn.factories.RecordFactory recordFactory = RecordFactoryProvider
|
||||||
|
.getRecordFactory(null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test RegisterNodeManagerResponsePBImpl. Test getters and setters. The
|
||||||
|
* RegisterNodeManagerResponsePBImpl should generate a prototype and data
|
||||||
|
* restore from prototype
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testRegisterNodeManagerResponsePBImpl() {
|
||||||
|
RegisterNodeManagerResponsePBImpl original =
|
||||||
|
new RegisterNodeManagerResponsePBImpl();
|
||||||
|
original.setMasterKey(getMasterKey());
|
||||||
|
original.setNodeAction(NodeAction.NORMAL);
|
||||||
|
original.setDiagnosticsMessage("testDiagnosticMessage");
|
||||||
|
|
||||||
|
RegisterNodeManagerResponsePBImpl copy =
|
||||||
|
new RegisterNodeManagerResponsePBImpl(
|
||||||
|
original.getProto());
|
||||||
|
assertEquals(1, copy.getMasterKey().getKeyId());
|
||||||
|
assertEquals(NodeAction.NORMAL, copy.getNodeAction());
|
||||||
|
assertEquals("testDiagnosticMessage", copy.getDiagnosticsMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test NodeHeartbeatRequestPBImpl.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testNodeHeartbeatRequestPBImpl() {
|
||||||
|
NodeHeartbeatRequestPBImpl original = new NodeHeartbeatRequestPBImpl();
|
||||||
|
original.setLastKnownMasterKey(getMasterKey());
|
||||||
|
original.setNodeStatus(getNodeStatus());
|
||||||
|
NodeHeartbeatRequestPBImpl copy = new NodeHeartbeatRequestPBImpl(
|
||||||
|
original.getProto());
|
||||||
|
assertEquals(1, copy.getLastKnownMasterKey().getKeyId());
|
||||||
|
assertEquals("localhost", copy.getNodeStatus().getNodeId().getHost());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test NodeHeartbeatResponsePBImpl.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNodeHeartbeatResponsePBImpl() {
|
||||||
|
NodeHeartbeatResponsePBImpl original = new NodeHeartbeatResponsePBImpl();
|
||||||
|
|
||||||
|
original.setDiagnosticsMessage("testDiagnosticMessage");
|
||||||
|
original.setMasterKey(getMasterKey());
|
||||||
|
original.setNextHeartBeatInterval(1000);
|
||||||
|
original.setNodeAction(NodeAction.NORMAL);
|
||||||
|
original.setResponseId(100);
|
||||||
|
|
||||||
|
NodeHeartbeatResponsePBImpl copy = new NodeHeartbeatResponsePBImpl(
|
||||||
|
original.getProto());
|
||||||
|
assertEquals(100, copy.getResponseId());
|
||||||
|
assertEquals(NodeAction.NORMAL, copy.getNodeAction());
|
||||||
|
assertEquals(1000, copy.getNextHeartBeatInterval());
|
||||||
|
assertEquals(1, copy.getMasterKey().getKeyId());
|
||||||
|
assertEquals("testDiagnosticMessage", copy.getDiagnosticsMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test RegisterNodeManagerRequestPBImpl.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRegisterNodeManagerRequestPBImpl() {
|
||||||
|
RegisterNodeManagerRequestPBImpl original = new RegisterNodeManagerRequestPBImpl();
|
||||||
|
original.setHttpPort(8080);
|
||||||
|
original.setNodeId(getNodeId());
|
||||||
|
Resource resource = recordFactory.newRecordInstance(Resource.class);
|
||||||
|
resource.setMemory(10000);
|
||||||
|
resource.setVirtualCores(2);
|
||||||
|
original.setResource(resource);
|
||||||
|
RegisterNodeManagerRequestPBImpl copy = new RegisterNodeManagerRequestPBImpl(
|
||||||
|
original.getProto());
|
||||||
|
|
||||||
|
assertEquals(8080, copy.getHttpPort());
|
||||||
|
assertEquals(9090, copy.getNodeId().getPort());
|
||||||
|
assertEquals(10000, copy.getResource().getMemory());
|
||||||
|
assertEquals(2, copy.getResource().getVirtualCores());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test MasterKeyPBImpl.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMasterKeyPBImpl() {
|
||||||
|
MasterKeyPBImpl original = new MasterKeyPBImpl();
|
||||||
|
original.setBytes(ByteBuffer.allocate(0));
|
||||||
|
original.setKeyId(1);
|
||||||
|
|
||||||
|
MasterKeyPBImpl copy = new MasterKeyPBImpl(original.getProto());
|
||||||
|
assertEquals(1, copy.getKeyId());
|
||||||
|
assertTrue(original.equals(copy));
|
||||||
|
assertEquals(original.hashCode(), copy.hashCode());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test SerializedExceptionPBImpl.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testSerializedExceptionPBImpl() {
|
||||||
|
SerializedExceptionPBImpl original = new SerializedExceptionPBImpl();
|
||||||
|
original.init("testMessage");
|
||||||
|
SerializedExceptionPBImpl copy = new SerializedExceptionPBImpl(
|
||||||
|
original.getProto());
|
||||||
|
assertEquals("testMessage", copy.getMessage());
|
||||||
|
|
||||||
|
original = new SerializedExceptionPBImpl();
|
||||||
|
original.init("testMessage", new Throwable(new Throwable("parent")));
|
||||||
|
copy = new SerializedExceptionPBImpl(original.getProto());
|
||||||
|
assertEquals("testMessage", copy.getMessage());
|
||||||
|
assertEquals("parent", copy.getCause().getMessage());
|
||||||
|
assertTrue( copy.getRemoteTrace().startsWith(
|
||||||
|
"java.lang.Throwable: java.lang.Throwable: parent"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test NodeStatusPBImpl.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNodeStatusPBImpl() {
|
||||||
|
NodeStatusPBImpl original = new NodeStatusPBImpl();
|
||||||
|
|
||||||
|
original.setContainersStatuses(Arrays.asList(getContainerStatus(1, 2, 1),
|
||||||
|
getContainerStatus(2, 3, 1)));
|
||||||
|
original.setKeepAliveApplications(Arrays.asList(getApplicationId(3),
|
||||||
|
getApplicationId(4)));
|
||||||
|
original.setNodeHealthStatus(getNodeHealthStatus());
|
||||||
|
original.setNodeId(getNodeId());
|
||||||
|
original.setResponseId(1);
|
||||||
|
|
||||||
|
NodeStatusPBImpl copy = new NodeStatusPBImpl(original.getProto());
|
||||||
|
assertEquals(3, copy.getContainersStatuses().get(1).getContainerId()
|
||||||
|
.getId());
|
||||||
|
assertEquals(3, copy.getKeepAliveApplications().get(0).getId());
|
||||||
|
assertEquals(1000, copy.getNodeHealthStatus().getLastHealthReportTime());
|
||||||
|
assertEquals(9090, copy.getNodeId().getPort());
|
||||||
|
assertEquals(1, copy.getResponseId());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private ContainerStatus getContainerStatus(int applicationId,
|
||||||
|
int containerID, int appAttemptId) {
|
||||||
|
ContainerStatus status = recordFactory
|
||||||
|
.newRecordInstance(ContainerStatus.class);
|
||||||
|
status.setContainerId(getContainerId(containerID, appAttemptId));
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApplicationAttemptId getApplicationAttemptId(int appAttemptId) {
|
||||||
|
ApplicationAttemptId result = ApplicationAttemptIdPBImpl.newInstance(
|
||||||
|
getApplicationId(appAttemptId), appAttemptId);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ContainerId getContainerId(int containerID, int appAttemptId) {
|
||||||
|
ContainerId containerId = ContainerIdPBImpl.newInstance(
|
||||||
|
getApplicationAttemptId(appAttemptId), containerID);
|
||||||
|
return containerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApplicationId getApplicationId(int applicationId) {
|
||||||
|
ApplicationIdPBImpl appId = new ApplicationIdPBImpl() {
|
||||||
|
public ApplicationIdPBImpl setParameters(int id, long timestamp) {
|
||||||
|
setClusterTimestamp(timestamp);
|
||||||
|
setId(id);
|
||||||
|
build();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}.setParameters(applicationId, 1000);
|
||||||
|
return new ApplicationIdPBImpl(appId.getProto());
|
||||||
|
}
|
||||||
|
|
||||||
|
private NodeStatus getNodeStatus() {
|
||||||
|
NodeStatus status = recordFactory.newRecordInstance(NodeStatus.class);
|
||||||
|
status.setContainersStatuses(new ArrayList<ContainerStatus>());
|
||||||
|
status.setKeepAliveApplications(new ArrayList<ApplicationId>());
|
||||||
|
|
||||||
|
status.setNodeHealthStatus(getNodeHealthStatus());
|
||||||
|
status.setNodeId(getNodeId());
|
||||||
|
status.setResponseId(1);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
private NodeId getNodeId() {
|
||||||
|
return NodeId.newInstance("localhost", 9090);
|
||||||
|
}
|
||||||
|
|
||||||
|
private NodeHealthStatus getNodeHealthStatus() {
|
||||||
|
NodeHealthStatus healStatus = recordFactory
|
||||||
|
.newRecordInstance(NodeHealthStatus.class);
|
||||||
|
healStatus.setHealthReport("healthReport");
|
||||||
|
healStatus.setIsNodeHealthy(true);
|
||||||
|
healStatus.setLastHealthReportTime(1000);
|
||||||
|
return healStatus;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private MasterKey getMasterKey() {
|
||||||
|
MasterKey key = recordFactory.newRecordInstance(MasterKey.class);
|
||||||
|
key.setBytes(ByteBuffer.allocate(0));
|
||||||
|
key.setKeyId(1);
|
||||||
|
return key;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue