@Before public void setup() { this.manager = new UserDetailsRepositoryReactiveAuthenticationManager(this.userDetailsService); when(this.scheduler.schedule(any())).thenAnswer(a -> { Runnable r = a.getArgument(0); return Schedulers.immediate().schedule(r); }); }
@Override protected List<Scenario<String, String>> scenarios_operatorSuccess() { return Arrays.asList( scenario(f -> f.publishOn(Schedulers.immediate())), scenario(f -> f.publishOn(Schedulers.immediate(), false, 4)) .prefetch(4), scenario(f -> f.publishOn(Schedulers.immediate(), 1)) .prefetch(1), scenario(f -> f.publishOn(Schedulers.immediate(), Integer.MAX_VALUE)) .prefetch(Integer.MAX_VALUE) ); }
@Test public void shouldEmitBulkheadFullExceptionEvenWhenErrorNotOnSubscribe() { bulkhead.isCallPermitted(); StepVerifier.create( Mono.error(new IOException("BAM!")).delayElement(Duration.ofMillis(1)) .transform(BulkheadOperator.of(bulkhead, Schedulers.immediate()))) .expectSubscription() .expectError(BulkheadFullException.class) .verify(Duration.ofSeconds(1)); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(0); } }
@Test public void shouldEmitBulkheadFullExceptionEvenWhenErrorNotOnSubscribe() { bulkhead.isCallPermitted(); StepVerifier.create( Flux.error(new IOException("BAM!"), true) .transform(BulkheadOperator.of(bulkhead, Schedulers.immediate()))) .expectSubscription() .expectError(BulkheadFullException.class) .verify(Duration.ofSeconds(1)); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(0); } }
@Test public void shouldEmitBulkheadFullExceptionEvenWhenErrorDuringSubscribe() { bulkhead.isCallPermitted(); StepVerifier.create( Mono.error(new IOException("BAM!")) .transform(BulkheadOperator.of(bulkhead, Schedulers.immediate()))) .expectSubscription() .expectError(BulkheadFullException.class) .verify(Duration.ofSeconds(1)); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(0); }
@Test public void shouldEmitErrorWithCircuitBreakerOpenExceptionEvenWhenErrorDuringSubscribe() { circuitBreaker.transitionToOpenState(); StepVerifier.create( Flux.error(new IOException("BAM!")) .transform(CircuitBreakerOperator.of(circuitBreaker)) .transform(BulkheadOperator.of(bulkhead, Schedulers.immediate())) .transform(RateLimiterOperator.of(rateLimiter, Schedulers.immediate())) ).expectError(CircuitBreakerOpenException.class) .verify(Duration.ofSeconds(1)); }
@Test public void shouldEmitErrorWithCircuitBreakerOpenExceptionEvenWhenErrorNotOnSubscribe() { circuitBreaker.transitionToOpenState(); StepVerifier.create( Flux.error(new IOException("BAM!"), true) .transform(CircuitBreakerOperator.of(circuitBreaker)) .transform(BulkheadOperator.of(bulkhead, Schedulers.immediate())) .transform(RateLimiterOperator.of(rateLimiter, Schedulers.immediate())) ).expectError(CircuitBreakerOpenException.class) .verify(Duration.ofSeconds(1)); } }
@Test public void shouldEmitBulkheadFullExceptionEvenWhenErrorDuringSubscribe() { bulkhead.isCallPermitted(); StepVerifier.create( Flux.error(new IOException("BAM!")) .transform(BulkheadOperator.of(bulkhead, Schedulers.immediate()))) .expectSubscription() .expectError(BulkheadFullException.class) .verify(Duration.ofSeconds(1)); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(0); }
@Test public void shouldEmitRequestNotPermittedExceptionEvenWhenErrorNotOnSubscribe() { saturateRateLimiter(); StepVerifier.create( Mono.error(new IOException("BAM!")).delayElement(Duration.ofMillis(1)) .transform(RateLimiterOperator.of(rateLimiter, Schedulers.immediate()))) .expectError(RequestNotPermitted.class) .verify(Duration.ofSeconds(1)); assertNoPermitLeft(); } }
@Test public void shouldEmitRequestNotPermittedExceptionEvenWhenErrorDuringSubscribe() { saturateRateLimiter(); StepVerifier.create( Mono.error(new IOException("BAM!")) .transform(RateLimiterOperator.of(rateLimiter, Schedulers.immediate()))) .expectError(RequestNotPermitted.class) .verify(Duration.ofSeconds(1)); assertNoPermitLeft(); }
@Test public void shouldEmitRequestNotPermittedException() { saturateRateLimiter(); StepVerifier.create( Flux.just("Event") .transform(RateLimiterOperator.of(rateLimiter, Schedulers.immediate()))) .expectSubscription() .expectError(RequestNotPermitted.class) .verify(Duration.ofSeconds(1)); assertNoPermitLeft(); }