@Test public void createOverrideExecutorBufferSize() { ExecutorService executor = Executors.newSingleThreadExecutor(); int bufferSize = 1024; TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .executor(executor) .bufferSize(bufferSize) .build(); assertProcessor(processor, false, null, bufferSize, null, null, executor, null); }
@Test public void testForceShutdownWhileWaitingForRequest() throws InterruptedException { TopicProcessor<String> processor = TopicProcessor.<String>builder().name("processor").bufferSize(4).build(); Publisher<String> publisher = Flux.fromArray(new String[] { "1", "2", "3", "4", "5" }); publisher.subscribe(processor); AssertSubscriber<String> subscriber = AssertSubscriber.create(0); processor.subscribe(subscriber); subscriber.request(1); Thread.sleep(250); processor.forceShutdown(); assertTrue(processor.awaitAndShutdown(Duration.ofSeconds(1))); }
@Test public void testForceShutdownWhileWaitingForMoreData() throws InterruptedException { TopicProcessor<String> processor = TopicProcessor.<String>builder().name("processor").bufferSize(4).build(); Publisher<String> publisher = new CappedPublisher(2); publisher.subscribe(processor); AssertSubscriber<String> subscriber = AssertSubscriber.create(0); processor.subscribe(subscriber); subscriber.request(3); Thread.sleep(250); processor.forceShutdown(); assertTrue(processor.awaitAndShutdown(Duration.ofSeconds(5))); }
@Test public void shareOverrideExecutorBufferSizeWaitStrategy() { ExecutorService executor = Executors.newSingleThreadExecutor(); int bufferSize = 1024; WaitStrategy waitStrategy = WaitStrategy.busySpin(); TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .share(true) .executor(executor) .bufferSize(bufferSize) .waitStrategy(waitStrategy) .build(); assertProcessor(processor, true, null, bufferSize, waitStrategy, null, executor, null); }
@Test(expected = IllegalArgumentException.class) public void failNonPowerOfTwo() { TopicProcessor.builder().name("test").bufferSize(3); }
/** * Create a new TopicProcessor using the provided backlog size, with a blockingWait Strategy * and auto-cancellation. <p> A new Cached ThreadExecutorPool will be implicitly created and will use the passed name to * qualify the created threads. * @param name Use a new Cached ExecutorService and assign this name to the created * threads * @param bufferSize A Backlog Size to mitigate slow subscribers * @param <E> Type of processed signals * @return the fresh TopicProcessor instance */ public static <E> TopicProcessor<E> create(String name, int bufferSize) { return TopicProcessor.<E>builder().name(name).bufferSize(bufferSize).build(); }
@Test(expected = IllegalArgumentException.class) public void failNullBufferSize() { TopicProcessor.builder().name("test").bufferSize(0); }
@Test public void shareOverrideNameBufferSizeWaitStrategy() { String name = "nameOverride"; int bufferSize = 1024; WaitStrategy waitStrategy = WaitStrategy.busySpin(); TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .share(true) .name(name) .bufferSize(bufferSize) .waitStrategy(waitStrategy) .build(); assertProcessor(processor, true, name, bufferSize, waitStrategy, null, null, null); }
@Test(expected = IllegalArgumentException.class) public void failNegativeBufferSize() { TopicProcessor.builder().name("test").bufferSize(-1); }
@Override public Processor<Long, Long> createIdentityProcessor(int bufferSize) { return TopicProcessor.<Long>builder() .name("topicProcessorVerification") .bufferSize(bufferSize) .build(); } }
@Test public void createOverrideExecutorBufferSizeAutoCancel() { ExecutorService executor = Executors.newSingleThreadExecutor(); int bufferSize = 1024; boolean autoCancel = false; TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .executor(executor) .bufferSize(bufferSize) .autoCancel(autoCancel) .build(); assertProcessor(processor, false, null, bufferSize, null, autoCancel, executor, null); }
@Test public void testShutdown() { for (int i = 0; i < 1000; i++) { TopicProcessor<?> dispatcher = TopicProcessor.<String>builder().name("rb-test-dispose").bufferSize(16).build(); dispatcher.awaitAndShutdown(); } }
@Test public void shareOverrideExecutorBufferSize() { ExecutorService executor = Executors.newSingleThreadExecutor(); int bufferSize = 1024; TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .share(true) .executor(executor) .bufferSize(bufferSize) .build(); assertProcessor(processor, true, null, bufferSize, null, null, executor, null); }
@Test public void shareOverrideNameBufferSize() { String name = "nameOverride"; int bufferSize = 1024; TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .share(true) .name(name) .bufferSize(bufferSize) .build(); assertProcessor(processor, true, name, bufferSize, null, null, null, null); }
@Test public void createOverrideNameBufferSizeWaitStrategy() { String name = "nameOverride"; int bufferSize = 1024; WaitStrategy waitStrategy = WaitStrategy.busySpin(); TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .name(name) .bufferSize(bufferSize) .waitStrategy(waitStrategy) .build(); assertProcessor(processor, false, name, bufferSize, waitStrategy, null, null, null); }
@Test public void createOverrideNameBufferSize() { String name = "nameOverride"; int bufferSize = 1024; TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder().name(name).bufferSize(bufferSize).build(); assertProcessor(processor, false, name, bufferSize, null, null, null, null); }
@Test public void testTopicProcessorGetters() { final int TEST_BUFFER_SIZE = 16; TopicProcessor<Object> processor = TopicProcessor.builder().name("testProcessor").bufferSize(TEST_BUFFER_SIZE).build(); assertEquals(TEST_BUFFER_SIZE, processor.getAvailableCapacity()); processor.awaitAndShutdown(); }
@Test public void testForceShutdownWhileWaitingForInitialRequest() throws InterruptedException { TopicProcessor<String> processor = TopicProcessor.<String>builder().name("processor").bufferSize(4).build(); Publisher<String> publisher = new CappedPublisher(2); publisher.subscribe(processor); AssertSubscriber<String> subscriber = AssertSubscriber.create(0); processor.subscribe(subscriber); processor.forceShutdown(); assertTrue(processor.awaitAndShutdown(Duration.ofSeconds(5))); }
@Test public void createOverrideExecutorBufferSizeWaitStrategy() { ExecutorService executor = Executors.newSingleThreadExecutor(); int bufferSize = 1024; WaitStrategy waitStrategy = WaitStrategy.busySpin(); TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .executor(executor) .bufferSize(bufferSize) .waitStrategy(waitStrategy) .build(); assertProcessor(processor, false, null, bufferSize, waitStrategy, null, executor, null); }
@Test public void createOverrideNameBufferSizeAutoCancel() { String name = "nameOverride"; int bufferSize = 1024; boolean autoCancel = false; TopicProcessor<Integer> processor = TopicProcessor.<Integer>builder() .name(name) .bufferSize(bufferSize) .autoCancel(autoCancel) .build(); assertProcessor(processor, false, name, bufferSize, null, autoCancel, null, null); }