m1a2st commented on code in PR #18891:
URL: https://github.com/apache/kafka/pull/18891#discussion_r1959563514
##########
clients/src/test/java/org/apache/kafka/test/TestUtils.java:
##########
@@ -580,21 +582,32 @@ public static Set<TopicPartition>
generateRandomTopicPartitions(int numTopic, in
}
/**
- * Assert that a future raises an expected exception cause type. Return
the exception cause
- * if the assertion succeeds; otherwise raise AssertionError.
+ * Assert that a future raises an expected exception cause type.
+ * This method will wait for the future to complete or timeout(15000
milliseconds) after a default period.
*
* @param future The future to await
* @param exceptionCauseClass Class of the expected exception cause
* @param <T> Exception cause type parameter
* @return The caught exception cause
*/
public static <T extends Throwable> T assertFutureThrows(Future<?> future,
Class<T> exceptionCauseClass) {
- ExecutionException exception = assertThrows(ExecutionException.class,
future::get);
- Throwable cause = exception.getCause();
- assertEquals(exceptionCauseClass, cause.getClass(),
- "Expected a " + exceptionCauseClass.getSimpleName() + " exception,
but got " +
- cause.getClass().getSimpleName());
- return exceptionCauseClass.cast(exception.getCause());
+ try {
+ future.get(DEFAULT_MAX_WAIT_MS, TimeUnit.MILLISECONDS);
+ fail("Should throw expected exception " +
exceptionCauseClass.getSimpleName() + " but nothing was thrown.");
+ } catch (InterruptedException | ExecutionException |
CancellationException e) {
+ Throwable cause = e instanceof ExecutionException ? e.getCause() :
e;
+ assertEquals(
+ exceptionCauseClass,
+ cause.getClass(),
+ "Expected " + exceptionCauseClass.getSimpleName() + ", but got
" + cause.getClass().getSimpleName()
+ );
+ return exceptionCauseClass.cast(cause);
+ } catch (TimeoutException e) {
+ fail("Future is not completed within " + DEFAULT_MAX_WAIT_MS + "
milliseconds.");
+ } catch (Exception e) {
+ fail("Unexpected error happened: " + e);
Review Comment:
That makes sense to me. We should provide a clear failure message for the
user.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]