|
@@ -409,6 +409,26 @@ public class SubscribableListenerTests extends ESTestCase {
|
|
|
assertFalse(chainedListener.isDone());
|
|
|
}
|
|
|
|
|
|
+ public void testAndThenThrowException() {
|
|
|
+ final var initialListener = new SubscribableListener<>();
|
|
|
+ final var forked = new AtomicReference<ActionListener<Object>>();
|
|
|
+ final var result = new AtomicReference<>();
|
|
|
+
|
|
|
+ final var chainedListener = initialListener.andThen((l, o) -> {
|
|
|
+ forked.set(l);
|
|
|
+ result.set(o);
|
|
|
+ throw new ElasticsearchException("simulated");
|
|
|
+ });
|
|
|
+ assertNull(forked.get());
|
|
|
+ assertNull(result.get());
|
|
|
+
|
|
|
+ final var o1 = new Object();
|
|
|
+ initialListener.onResponse(o1);
|
|
|
+ assertSame(o1, result.get());
|
|
|
+ assertSame(chainedListener, forked.get());
|
|
|
+ assertComplete(chainedListener, "simulated");
|
|
|
+ }
|
|
|
+
|
|
|
public void testAndThenFailure() {
|
|
|
final var initialListener = new SubscribableListener<>();
|
|
|
|
|
@@ -488,7 +508,7 @@ public class SubscribableListenerTests extends ESTestCase {
|
|
|
assertTrue(isComplete.get());
|
|
|
}
|
|
|
|
|
|
- private static void assertComplete(SubscribableListener<Object> listener, @Nullable String expectedFailureMessage) {
|
|
|
+ private static <T> void assertComplete(SubscribableListener<T> listener, @Nullable String expectedFailureMessage) {
|
|
|
assertTrue(listener.isDone());
|
|
|
if (expectedFailureMessage == null) {
|
|
|
try {
|
|
@@ -500,4 +520,88 @@ public class SubscribableListenerTests extends ESTestCase {
|
|
|
assertEquals(expectedFailureMessage, expectThrows(ElasticsearchException.class, listener::rawResult).getMessage());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public void testAndThenApplySuccess() throws Exception {
|
|
|
+ final var initialListener = new SubscribableListener<>();
|
|
|
+ final var result = new AtomicReference<>();
|
|
|
+
|
|
|
+ final var oResult = new Object();
|
|
|
+ final var chainedListener = initialListener.andThenApply(o -> {
|
|
|
+ result.set(o);
|
|
|
+ return oResult;
|
|
|
+ });
|
|
|
+ assertNull(result.get());
|
|
|
+
|
|
|
+ final var o1 = new Object();
|
|
|
+ initialListener.onResponse(o1);
|
|
|
+ assertSame(o1, result.get());
|
|
|
+ assertTrue(chainedListener.isDone());
|
|
|
+ assertSame(oResult, chainedListener.rawResult());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testAndThenApplyThrowException() {
|
|
|
+ final var initialListener = new SubscribableListener<>();
|
|
|
+ final var result = new AtomicReference<>();
|
|
|
+
|
|
|
+ final var chainedListener = initialListener.andThenApply(o -> {
|
|
|
+ result.set(o);
|
|
|
+ throw new ElasticsearchException("simulated exception in fn");
|
|
|
+ });
|
|
|
+ assertNull(result.get());
|
|
|
+
|
|
|
+ final var o1 = new Object();
|
|
|
+ initialListener.onResponse(o1);
|
|
|
+ assertSame(o1, result.get());
|
|
|
+ assertComplete(chainedListener, "simulated exception in fn");
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testAndThenApplyFailure() {
|
|
|
+ final var initialListener = new SubscribableListener<>();
|
|
|
+
|
|
|
+ final var chainedListener = initialListener.andThenApply(o -> fail(null, "should not be called"));
|
|
|
+ assertFalse(chainedListener.isDone());
|
|
|
+
|
|
|
+ initialListener.onFailure(new ElasticsearchException("simulated"));
|
|
|
+ assertComplete(chainedListener, "simulated");
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testAndThenAcceptSuccess() throws Exception {
|
|
|
+ final var initialListener = new SubscribableListener<>();
|
|
|
+ final var result = new AtomicReference<>();
|
|
|
+
|
|
|
+ final var chainedListener = initialListener.andThenAccept(result::set);
|
|
|
+ assertNull(result.get());
|
|
|
+
|
|
|
+ final var o1 = new Object();
|
|
|
+ initialListener.onResponse(o1);
|
|
|
+ assertSame(o1, result.get());
|
|
|
+ assertTrue(chainedListener.isDone());
|
|
|
+ assertNull(chainedListener.rawResult());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testAndThenAcceptThrowException() {
|
|
|
+ final var initialListener = new SubscribableListener<>();
|
|
|
+ final var result = new AtomicReference<>();
|
|
|
+
|
|
|
+ final var chainedListener = initialListener.andThenAccept(o -> {
|
|
|
+ result.set(o);
|
|
|
+ throw new ElasticsearchException("simulated exception in fn");
|
|
|
+ });
|
|
|
+ assertNull(result.get());
|
|
|
+
|
|
|
+ final var o1 = new Object();
|
|
|
+ initialListener.onResponse(o1);
|
|
|
+ assertSame(o1, result.get());
|
|
|
+ assertComplete(chainedListener, "simulated exception in fn");
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testAndThenAcceptFailure() {
|
|
|
+ final var initialListener = new SubscribableListener<>();
|
|
|
+
|
|
|
+ final var chainedListener = initialListener.andThenAccept(o -> fail(null, "should not be called"));
|
|
|
+ assertFalse(chainedListener.isDone());
|
|
|
+
|
|
|
+ initialListener.onFailure(new ElasticsearchException("simulated"));
|
|
|
+ assertComplete(chainedListener, "simulated");
|
|
|
+ }
|
|
|
}
|