use of reactor.core.Scannable in project reactor-core by reactor.
the class FluxMergeOrderedTest method scanOperator.
@Test
public void scanOperator() {
// scannable
Flux<Integer> source1 = Flux.just(1).map(Function.identity());
Flux<Integer> source2 = Flux.just(2);
// safe varargs
@SuppressWarnings("unchecked") Scannable fmo = new FluxMergeOrdered<>(123, Queues.small(), Comparator.naturalOrder(), source1, source2);
assertThat(fmo.scan(Scannable.Attr.PARENT)).isSameAs(source1);
assertThat(fmo.scan(Scannable.Attr.PREFETCH)).isEqualTo(123);
assertThat(fmo.scan(Scannable.Attr.DELAY_ERROR)).isTrue();
// default value
assertThat(fmo.scan(Scannable.Attr.BUFFERED)).isEqualTo(0);
}
use of reactor.core.Scannable in project reactor-core by reactor.
the class BaseOperatorTest method fluxFuseableAsyncState.
@SuppressWarnings("unchecked")
final Flux<O> fluxFuseableAsyncState(OperatorScenario<I, PI, O, PO> scenario, boolean conditional) {
AtomicReference<Scannable> ref = new AtomicReference<>();
Flux<I> source = this.fluxFuseableAsync(scenario).doOnSubscribe(s -> Scannable.from(s).actuals().skip(1).findFirst().ifPresent(t -> {
ref.set(t);
if (scenario.prefetch() != -1) {
assertThat(t.scan(Scannable.Attr.PREFETCH)).isEqualTo(scenario.prefetch());
}
}));
if (source.getPrefetch() != -1 && scenario.prefetch() != -1) {
assertThat(Math.min(source.getPrefetch(), Integer.MAX_VALUE)).isEqualTo(scenario.prefetch());
}
PO f;
f = applyStateScenario(scenario, conditional, source);
return Flux.from(f).doOnSubscribe(parent -> {
Scannable t = Scannable.from(parent);
assertThat(t.scan(Scannable.Attr.ERROR)).isNull();
assertThat(t.scanOrDefault(Scannable.Attr.TERMINATED, false)).isFalse();
// noop path
if (parent instanceof Subscriber) {
((Subscriber<I>) parent).onSubscribe(Operators.emptySubscription());
((Subscriber<I>) parent).onSubscribe(Operators.cancelledSubscription());
}
touchTreeState(parent);
}).doOnComplete(() -> {
if (ref.get() != null) {
Scannable t = ref.get();
if (scenario.shouldAssertPostTerminateState()) {
assertThat(t.scanOrDefault(Scannable.Attr.TERMINATED, true)).isTrue();
}
touchTreeState(ref.get());
}
}).doOnNext(d -> touchTreeState(ref.get()));
}
use of reactor.core.Scannable in project reactor-core by reactor.
the class ImmediateSchedulerTest method scanWorker.
@Test
public void scanWorker() {
Worker worker = Schedulers.immediate().createWorker();
Scannable s = (Scannable) worker;
assertThat(s.scan(Scannable.Attr.TERMINATED)).isFalse();
assertThat(s.scan(Scannable.Attr.CANCELLED)).isFalse();
assertThat(s.scan(Scannable.Attr.NAME)).isEqualTo(Schedulers.IMMEDIATE + ".worker");
worker.dispose();
assertThat(s.scan(Scannable.Attr.TERMINATED)).isTrue();
assertThat(s.scan(Scannable.Attr.CANCELLED)).isTrue();
}
Aggregations