@Test public void scanRollbackInner() { CoreSubscriber<? super Integer> actual = new LambdaSubscriber<>(null, e -> {}, null, null); UsingWhenSubscriber<Integer, String> up = new UsingWhenSubscriber<>(actual, "RESOURCE", Mono::just, Mono::just, Mono::just, null); final Subscription parent = Operators.emptySubscription(); up.onSubscribe(parent); FluxUsingWhen.RollbackInner op = new FluxUsingWhen.RollbackInner(up, new IllegalStateException("rollback cause")); assertThat(op.scan(Attr.PARENT)).as("PARENT").isSameAs(up); assertThat(op.scan(Attr.ACTUAL)).as("ACTUAL").isSameAs(up.actual); assertThat(op.scan(Attr.TERMINATED)).as("TERMINATED before").isFalse(); op.onComplete(); assertThat(op.scan(Attr.TERMINATED)) .as("TERMINATED by complete") .isSameAs(up.scan(Attr.TERMINATED)) .isTrue(); assertThat(up.scan(Attr.ERROR)).as("parent ERROR").hasMessage("rollback cause"); assertThat(op.scanUnsafe(Attr.PREFETCH)).as("PREFETCH not supported").isNull(); }
@Test public void scanCommitInner() { CoreSubscriber<? super Integer> actual = new LambdaSubscriber<>(null, e -> {}, null, null); UsingWhenSubscriber<Integer, String> up = new UsingWhenSubscriber<>(actual, "RESOURCE", Mono::just, Mono::just, Mono::just, null); final Subscription parent = Operators.emptySubscription(); up.onSubscribe(parent); FluxUsingWhen.CommitInner op = new FluxUsingWhen.CommitInner(up); assertThat(op.scan(Attr.PARENT)).as("PARENT").isSameAs(up); assertThat(op.scan(Attr.ACTUAL)).as("ACTUAL").isSameAs(up.actual); assertThat(op.scan(Attr.TERMINATED)).as("TERMINATED before").isFalse(); op.onError(new IllegalStateException("boom")); assertThat(op.scan(Attr.TERMINATED)) .as("TERMINATED by error") .isSameAs(up.scan(Attr.TERMINATED)) .isTrue(); assertThat(up.scan(Attr.ERROR)).as("parent ERROR") .hasMessage("Async resource cleanup failed after onComplete") .hasCause(new IllegalStateException("boom")); assertThat(op.scanUnsafe(Attr.PREFETCH)).as("PREFETCH not supported").isNull(); }