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


Reply via email to