You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-commits@hadoop.apache.org by je...@apache.org on 2013/06/12 18:52:16 UTC
svn commit: r1492282 - in /hadoop/common/trunk/hadoop-yarn-project: ./
hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/
Author: jeagles
Date: Wed Jun 12 16:52:15 2013
New Revision: 1492282
URL: http://svn.apache.org/r1492282
Log:
YARN-427. Coverage fix for org.apache.hadoop.yarn.server.api.* (Aleksey Gorshkov via jeagles)
Added:
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestResourceTrackerPBClientImpl.java
hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java
Modified:
hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
Modified: hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt?rev=1492282&r1=1492281&r2=1492282&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-yarn-project/CHANGES.txt Wed Jun 12 16:52:15 2013
@@ -844,6 +844,9 @@ Release 0.23.9 - UNRELEASED
NEW FEATURES
IMPROVEMENTS
+
+ YARN-427. Coverage fix for org.apache.hadoop.yarn.server.api.* (Aleksey
+ Gorshkov via jeagles)
OPTIMIZATIONS
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestResourceTrackerPBClientImpl.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestResourceTrackerPBClientImpl.java?rev=1492282&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestResourceTrackerPBClientImpl.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestResourceTrackerPBClientImpl.java Wed Jun 12 16:52:15 2013
@@ -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);
+ }
+
+ }
+}
Added: hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java?rev=1492282&view=auto
==============================================================================
--- hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java (added)
+++ hadoop/common/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/test/java/org/apache/hadoop/yarn/TestYarnServerApiClasses.java Wed Jun 12 16:52:15 2013
@@ -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;
+
+ }
+}