XComp commented on a change in pull request #17967: URL: https://github.com/apache/flink/pull/17967#discussion_r762125450
########## File path: flink-runtime/src/test/java/org/apache/flink/runtime/jobmaster/DefaultJobMasterServiceProcessTest.java ########## @@ -63,11 +64,92 @@ public void testInitializationFailureCompletesResultFuture() { final RuntimeException originalCause = new RuntimeException("Init error"); jobMasterServiceFuture.completeExceptionally(originalCause); - assertTrue(serviceProcess.getResultFuture().join().isInitializationFailure()); - final Throwable initializationFailure = - serviceProcess.getResultFuture().join().getInitializationFailure(); - assertThat(initializationFailure, containsCause(JobInitializationException.class)); - assertThat(initializationFailure, containsCause(originalCause)); + final JobManagerRunnerResult actualJobManagerResult = + serviceProcess.getResultFuture().join(); + assertThat(actualJobManagerResult.isInitializationFailure()).isTrue(); + final Throwable initializationFailure = actualJobManagerResult.getInitializationFailure(); + + assertThat(initializationFailure) + .isInstanceOf(JobInitializationException.class) + .hasCause(originalCause); + } + + @Test + public void testInitializationFailureSetsFailureInfoProperly() + throws ExecutionException, InterruptedException { + final CompletableFuture<JobMasterService> jobMasterServiceFuture = + new CompletableFuture<>(); + DefaultJobMasterServiceProcess serviceProcess = createTestInstance(jobMasterServiceFuture); + final RuntimeException originalCause = new RuntimeException("Expected RuntimeException"); + + long beforeFailureTimestamp = System.currentTimeMillis(); + jobMasterServiceFuture.completeExceptionally(originalCause); + long afterFailureTimestamp = System.currentTimeMillis(); + + final JobManagerRunnerResult result = serviceProcess.getResultFuture().get(); + final ErrorInfo executionGraphFailure = + result.getExecutionGraphInfo().getArchivedExecutionGraph().getFailureInfo(); + + assertThat(executionGraphFailure).isNotNull(); + assertInitializationException( + executionGraphFailure.getException(), + originalCause, + executionGraphFailure.getTimestamp(), + beforeFailureTimestamp, + afterFailureTimestamp); + } + + @Test + public void testInitializationFailureSetsExceptionHistoryProperly() + throws ExecutionException, InterruptedException { + final CompletableFuture<JobMasterService> jobMasterServiceFuture = + new CompletableFuture<>(); + DefaultJobMasterServiceProcess serviceProcess = createTestInstance(jobMasterServiceFuture); + final RuntimeException originalCause = new RuntimeException("Expected RuntimeException"); + + long beforeFailureTimestamp = System.currentTimeMillis(); + jobMasterServiceFuture.completeExceptionally(originalCause); + long afterFailureTimestamp = System.currentTimeMillis(); + + final RootExceptionHistoryEntry entry = + Iterables.getOnlyElement( + serviceProcess + .getResultFuture() + .get() + .getExecutionGraphInfo() + .getExceptionHistory()); + + assertInitializationException( + entry.getException(), + originalCause, + entry.getTimestamp(), + beforeFailureTimestamp, + afterFailureTimestamp); + assertThat(entry.isGlobal()).isTrue(); + } + + private static void assertInitializationException( + SerializedThrowable actualException, + Throwable expectedCause, + long actualTimestamp, + long expectedLowerTimestampThreshold, + long expectedUpperTimestampThreshold) { + final Throwable deserializedException = + actualException.deserializeError(Thread.currentThread().getContextClassLoader()); + + assertThat(deserializedException) + .isOfAnyClassIn(JobInitializationException.class) + .satisfies( Review comment: damn, I missed that one. But we can be even more restrictive here and just use the functionality provided by `ThrowableAssert` 👍 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@flink.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org