@Test // best effort, no asserts public void testEntryInterrupted() { // given BulkheadConfig config = BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(10000) .build(); final SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", config); bulkhead.isCallPermitted(); // consume the permit AtomicBoolean entered = new AtomicBoolean(true); Thread t = new Thread( () -> { entered.set(bulkhead.tryEnterBulkhead()); } ); // when t.start(); sleep(500); t.interrupt(); sleep(500); // then //assertThat(entered.get()).isFalse(); }
BulkheadConfig originalConfig = BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(0) .build(); SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", originalConfig); .maxWaitTime(0) .build(); bulkhead.changeConfig(BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(0) .build()); });
@Test public void changePermissionsCountWhileOneThreadIsWaitingForPermission() { BulkheadConfig originalConfig = BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(500000) .build(); SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", originalConfig); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(1); bulkhead.isCallPermitted(); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(0); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(1); Thread bulkheadThread = new Thread(() -> { bulkhead.isCallPermitted(); bulkhead.onComplete(); }); bulkheadThread.setDaemon(true); bulkheadThread.start(); await().atMost(1, SECONDS) .until(() -> bulkheadThread.getState().equals(TIMED_WAITING)); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(0); BulkheadConfig newConfig = BulkheadConfig.custom() .maxConcurrentCalls(2) .maxWaitTime(500000) .build(); bulkhead.changeConfig(newConfig); await().atMost(1, SECONDS) .until(() -> bulkheadThread.getState().equals(TERMINATED)); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(2); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(1); }
bulkhead = bulkheadRegistry.bulkhead(name, BulkheadConfig.custom() .maxConcurrentCalls(bulkheadConfig.getMaxConcurrentCalls()) .maxWaitTime(bulkheadConfig.getMaxWaitTime()) .build());
bulkhead = bulkheadRegistry.bulkhead(name, BulkheadConfig.custom() .maxConcurrentCalls(bulkheadConfig.getMaxConcurrentCalls()) .maxWaitTime(bulkheadConfig.getMaxWaitTime()) .build());
BulkheadConfig originalConfig = BulkheadConfig.custom() .maxConcurrentCalls(3) .maxWaitTime(0) .build(); SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", originalConfig); bulkhead.changeConfig(BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(0) .build()); }); bulkhead.changeConfig(BulkheadConfig.custom() .maxConcurrentCalls(4) .maxWaitTime(0) .build()); });
@Test public void changeWaitingTimeWhileOneThreadIsWaitingForPermission() { BulkheadConfig originalConfig = BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(500000) .build(); SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", originalConfig); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(1); bulkhead.isCallPermitted(); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(0); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(1); Thread bulkheadThread = new Thread(() -> { bulkhead.isCallPermitted(); bulkhead.onComplete(); }); bulkheadThread.setDaemon(true); bulkheadThread.start(); await().atMost(1, SECONDS) .until(() -> bulkheadThread.getState().equals(TIMED_WAITING)); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(0); BulkheadConfig newConfig = BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(0) .build(); bulkhead.changeConfig(newConfig); assertThat(bulkhead.tryEnterBulkhead()).isFalse(); // main thread is not blocked // previously blocked thread is still waiting await().atMost(1, SECONDS) .until(() -> bulkheadThread.getState().equals(TIMED_WAITING)); }
@Test public void changePermissionsInIdleState() { BulkheadConfig originalConfig = BulkheadConfig.custom() .maxConcurrentCalls(3) .maxWaitTime(5000) .build(); SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", originalConfig); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(3); assertThat(bulkhead.getBulkheadConfig().getMaxWaitTime()).isEqualTo(5000); BulkheadConfig newConfig = BulkheadConfig.custom() .maxConcurrentCalls(5) .maxWaitTime(5000) .build(); bulkhead.changeConfig(newConfig); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(5); assertThat(bulkhead.getBulkheadConfig().getMaxWaitTime()).isEqualTo(5000); newConfig = BulkheadConfig.custom() .maxConcurrentCalls(2) .maxWaitTime(5000) .build(); bulkhead.changeConfig(newConfig); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(2); assertThat(bulkhead.getBulkheadConfig().getMaxWaitTime()).isEqualTo(5000); bulkhead.changeConfig(newConfig); }
@Test public void changeWaitTimeInIdleState() { BulkheadConfig originalConfig = BulkheadConfig.custom() .maxConcurrentCalls(3) .maxWaitTime(5000) .build(); SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", originalConfig); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(3); assertThat(bulkhead.getBulkheadConfig().getMaxWaitTime()).isEqualTo(5000); BulkheadConfig newConfig = BulkheadConfig.custom() .maxConcurrentCalls(3) .maxWaitTime(3000) .build(); bulkhead.changeConfig(newConfig); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(3); assertThat(bulkhead.getBulkheadConfig().getMaxWaitTime()).isEqualTo(3000); newConfig = BulkheadConfig.custom() .maxConcurrentCalls(3) .maxWaitTime(7000) .build(); bulkhead.changeConfig(newConfig); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(3); assertThat(bulkhead.getBulkheadConfig().getMaxWaitTime()).isEqualTo(7000); bulkhead.changeConfig(newConfig); }
@Test public void testBuildCustom() { // given int maxConcurrent = 66; long maxWait = 555; // when BulkheadConfig config = BulkheadConfig.custom() .maxConcurrentCalls(maxConcurrent) .maxWaitTime(maxWait) .build(); // then assertThat(config).isNotNull(); assertThat(config.getMaxConcurrentCalls()).isEqualTo(maxConcurrent); assertThat(config.getMaxWaitTime()).isEqualTo(maxWait); }
@Test public void testEntryTimeout() { // given BulkheadConfig config = BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(10) .build(); SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", config); bulkhead.isCallPermitted(); // consume the permit // when boolean entered = bulkhead.tryEnterBulkhead(); // then assertThat(entered).isFalse(); }
@Test public void testTryEnterWithTimeout() { // given BulkheadConfig config = BulkheadConfig.custom() .maxConcurrentCalls(1) .maxWaitTime(100) .build(); SemaphoreBulkhead bulkhead = new SemaphoreBulkhead("test", config); // when boolean entered = bulkhead.tryEnterBulkhead(); // then assertThat(entered).isTrue(); }
@Before public void setUp() { BulkheadConfig config = BulkheadConfig.custom() .maxConcurrentCalls(2) .maxWaitTime(0) .build(); bulkhead = Bulkhead.of("test", config); testSubscriber = RxJava2Adapter.toFlowable(bulkhead.getEventPublisher()) .map(BulkheadEvent::getEventType) .test(); }
@Before public void setUp() { // registry with default config registry = BulkheadRegistry.ofDefaults(); // registry with custom config config = BulkheadConfig.custom() .maxConcurrentCalls(100) .maxWaitTime(50) .build(); }
@Test(expected = IllegalArgumentException.class) public void testBuildWithIllegalMaxWait() { // when BulkheadConfig.custom() .maxWaitTime(-1) .build(); }