@Test public void testSingleSuccessfulTaskFlowFailedNMStopRequest() { WrappedContainer wc = new WrappedContainer(); wc.verifyState(AMContainerState.ALLOCATED); wc.launchContainer(); wc.assignTaskAttempt(wc.taskAttemptID); wc.containerLaunched(); wc.pullTaskToRun(); wc.taskAttemptSucceeded(wc.taskAttemptID); wc.stopRequest(); wc.verifyState(AMContainerState.STOP_REQUESTED); // Event to NM to stop the container. wc.verifyCountAndGetOutgoingEvents(1); assertTrue( wc.verifyCountAndGetOutgoingEvents(1).get(0).getType() == NMCommunicatorEventType.CONTAINER_STOP_REQUEST); wc.nmStopFailed(); wc.verifyState(AMContainerState.STOPPING); // Event to ask a RM container release. wc.verifyCountAndGetOutgoingEvents(1); assertTrue( wc.verifyCountAndGetOutgoingEvents(1).get(0).getType() == AMSchedulerEventType.S_CONTAINER_DEALLOCATE); wc.containerCompleted(false); wc.verifyHistoryStopEvent(); wc.verifyState(AMContainerState.COMPLETED); wc.verifyNoOutgoingEvents(); verify(wc.tal).unregisterRunningContainer(wc.containerID); verify(wc.chh).unregister(wc.containerID); assertEquals(0, wc.amContainer.getQueuedTaskAttempts().size()); assertNull(wc.amContainer.getRunningTaskAttempt()); assertEquals(1, wc.amContainer.getAllTaskAttempts().size()); assertFalse(wc.amContainer.isInErrorState()); }