diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java index 9bbd148ff41..a384c901cd0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockRM.java @@ -29,6 +29,7 @@ import java.util.Map; import java.util.Set; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.DataOutputBuffer; import org.apache.hadoop.test.GenericTestUtils; @@ -112,6 +113,10 @@ import org.apache.hadoop.yarn.util.Records; import org.apache.hadoop.yarn.util.YarnVersionInfo; import org.apache.hadoop.yarn.util.resource.ResourceUtils; +import org.junit.Rule; +import org.junit.rules.TestRule; +import org.junit.rules.TestWatcher; +import org.junit.runner.Description; import org.slf4j.event.Level; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -121,6 +126,60 @@ @SuppressWarnings("unchecked") public class MockRM extends ResourceManager { +// @Rule +// public TestRule watcher = new TestWatcher() { +// protected void starting(Description description) { +// MockRM.description = description; +// System.out.println("Starting test: " + MockRM.description.getMethodName()); +// } +// }; +//STACK TRACE EXAMPLE: +// java.lang.NullPointerException +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:839) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:820) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:804) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:787) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:733) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:684) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:674) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:665) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:658) +// at org.apache.hadoop.yarn.server.resourcemanager.MockRM.submitApp(MockRM.java:612) +// at org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.TestCapacityScheduler.testMoveAllAppsInvalidSource(TestCapacityScheduler.java:2635) +// at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) +// at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) +// at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + public String getTestMethodName(){ + StackTraceElement[] stackTraceElements = Thread.currentThread() + .getStackTrace(); + + for (StackTraceElement element : stackTraceElements) { + + try { + Class clazz = Class.forName(element.getClassName()); + System.out.println("Looking for " + element.getMethodName() + " in class " + clazz); + + if (element.getClassName().contains("Test")) { + return element.getMethodName(); + } + +// for (Method method : clazz.getMethods()){ +// if(method.getName().contains(element.getMethodName())){ +// System.out.println("Possible match : " + method); +// } +// } +// for (Method method : clazz.getDeclaredMethods()){ +// if(method.getName().equals(element.getMethodName())){ +// System.out.println("Possible match : " + method); +// } +// } + } catch (Exception e) { + // oops do something here + } + } + return "unknown"; + } + static final Logger LOG = LoggerFactory.getLogger(MockRM.class); static final String ENABLE_WEBAPP = "mockrm.webapp.enabled"; private static final int SECOND = 1000; @@ -819,6 +878,8 @@ public RMApp submitApp(List amResourceRequests, String name, Map applicationTimeouts, ByteBuffer tokensConf, Set applicationTags, String appNodeLabel) throws Exception { + + ApplicationId appId = isAppIdProvided ? applicationId : null; ApplicationClientProtocol client = getClientRMService(); if (! isAppIdProvided) { @@ -826,6 +887,7 @@ public RMApp submitApp(List amResourceRequests, String name, .newRecord(GetNewApplicationRequest.class)); appId = resp.getApplicationId(); } + SubmitApplicationRequest req = Records .newRecord(SubmitApplicationRequest.class); ApplicationSubmissionContext sub = Records @@ -876,6 +938,7 @@ public RMApp submitApp(List amResourceRequests, String name, } sub.setAMContainerResourceRequests(amResourceRequests); req.setApplicationSubmissionContext(sub); + UserGroupInformation fakeUser = UserGroupInformation.createUserForTesting(user, new String[] {"someGroup"}); PrivilegedExceptionAction action = @@ -913,7 +976,34 @@ public SubmitApplicationResponse run() throws IOException, YarnException { ((AbstractYarnScheduler)getResourceScheduler()).update(); - return rmApp; + StringBuilder sb = new StringBuilder("##### submitapp #####"); + sb.append("####Submitapp#### testcase: " + getTestMethodName()); + sb.append("####Submitapp#### name: " + name); + sb.append("####Submitapp#### user: " + user); + sb.append("####Submitapp#### acls: " + acls); + sb.append("####Submitapp#### unmanaged: " + unmanaged); + sb.append("####Submitapp#### queue: " + queue); + sb.append("####Submitapp#### AM res reqs: " + amResourceRequests); + sb.append("####Submitapp#### maxattempts: " + maxAppAttempts); + sb.append("####Submitapp#### credentials: " + ts); + sb.append("####Submitapp#### appType: " + appType); + sb.append("####Submitapp#### waitForAccepted: " + waitForAccepted); + sb.append("####Submitapp#### keepContainers: " + keepContainers); + sb.append("####Submitapp#### isAppIdProvided: " + isAppIdProvided); + sb.append("####Submitapp#### applicationId: " + applicationId); + sb.append("####Submitapp#### applicationId after: " + appId); + sb.append("####Submitapp#### attemptFailuresValidityInterval: " + attemptFailuresValidityInterval); + sb.append("####Submitapp#### logaggregationcontext: " + logAggregationContext); + sb.append("####Submitapp#### cancelTokensWhenComplete: " + cancelTokensWhenComplete); + sb.append("####Submitapp#### priority: " + priority); + sb.append("####Submitapp#### amLabel: " + amLabel); + sb.append("####Submitapp#### applicationTimeouts: " + applicationTimeouts); + sb.append("####Submitapp#### tokensConf: " + tokensConf); + sb.append("####Submitapp#### applicationTags: " + applicationTags); + sb.append("####Submitapp#### appNodeLabel: " + appNodeLabel); + sb.append("####Submitapp#### submissioncontext: " + ReflectionToStringBuilder.toString(sub)); + throw new RuntimeException(sb.toString()); +// return rmApp; } public MockNM unRegisterNode(MockNM nm) throws Exception {