@Test public void threadBoundaryPreventsInvalidFusionFilter() { UnicastProcessor<Integer> up = UnicastProcessor.create(Queues.<Integer>get(2).get()); String s = Thread.currentThread() .getName(); AssertSubscriber<Integer> ts = AssertSubscriber.create(); up.filter(v -> s.equals(Thread.currentThread() .getName())) .publishOn(Schedulers.fromExecutorService(exec)) .subscribe(ts); up.onNext(1); up.onComplete(); ts.await(Duration.ofSeconds(5)); ts.assertValues(1) .assertNoError() .assertComplete(); }
@Test public void asyncFusion() { AssertSubscriber<Object> ts = AssertSubscriber.create(); UnicastProcessor<Integer> up = UnicastProcessor.create(new ConcurrentLinkedQueue<>()); up.filter(v -> (v & 1) == 0) .subscribe(ts); for (int i = 1; i < 11; i++) { up.onNext(i); } up.onComplete(); ts.assertValues(2, 4, 6, 8, 10) .assertNoError() .assertComplete(); }
@Test public void asyncFusionBackpressured() { AssertSubscriber<Object> ts = AssertSubscriber.create(1); UnicastProcessor<Integer> up = UnicastProcessor.create(new ConcurrentLinkedQueue<>()); Flux.just(1) .hide() .flatMap(w -> up.filter(v -> (v & 1) == 0)) .subscribe(ts); up.onNext(1); up.onNext(2); ts.assertValues(2) .assertNoError() .assertNotComplete(); up.onComplete(); ts.assertValues(2) .assertNoError() .assertComplete(); }
@Test public void asyncFusionBackpressured2() { AssertSubscriber<Object> ts = AssertSubscriber.create(1); UnicastProcessor<Integer> up = UnicastProcessor.create(new ConcurrentLinkedQueue<>()); Flux.just(1) .hide() .flatMap(w -> up.filter(v -> (v & 1) == 0), false, 1, 1) .subscribe(ts); up.onNext(1); up.onNext(2); ts.assertValues(2) .assertNoError() .assertNotComplete(); up.onComplete(); ts.assertValues(2) .assertNoError() .assertComplete(); }