/* * * Copyright 2016 Robert Winkler * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * */ package io.github.resilience4j.circuitbreaker.internal; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; public class CircuitBreakerMetricsTest { @Test public void testCircuitBreakerMetrics(){ CircuitBreakerMetrics circuitBreakerMetrics = new CircuitBreakerMetrics(10); assertThat(circuitBreakerMetrics.getMaxNumberOfBufferedCalls()).isEqualTo(10); circuitBreakerMetrics.onSuccess(); circuitBreakerMetrics.onSuccess(); circuitBreakerMetrics.onError(); circuitBreakerMetrics.onError(); circuitBreakerMetrics.onCallNotPermitted(); circuitBreakerMetrics.onCallNotPermitted(); assertThat(circuitBreakerMetrics.getNumberOfBufferedCalls()).isEqualTo(4); assertThat(circuitBreakerMetrics.getNumberOfFailedCalls()).isEqualTo(2); assertThat(circuitBreakerMetrics.getNumberOfSuccessfulCalls()).isEqualTo(2); assertThat(circuitBreakerMetrics.getNumberOfNotPermittedCalls()).isEqualTo(2); // The failure rate must be -1, because the number of measured calls is below the buffer size of 10 assertThat(circuitBreakerMetrics.getFailureRate()).isEqualTo(-1); circuitBreakerMetrics.onError(); circuitBreakerMetrics.onError(); circuitBreakerMetrics.onError(); circuitBreakerMetrics.onError(); circuitBreakerMetrics.onSuccess(); circuitBreakerMetrics.onSuccess(); circuitBreakerMetrics.onSuccess(); circuitBreakerMetrics.onSuccess(); // 12 calls have been recorded, but only 10 are stored in the RingBitSet. 4 successes and 6 failures. // The failure rate must be 60%, because the number of measured calls is above the minimum number of measured calls. assertThat(circuitBreakerMetrics.getNumberOfBufferedCalls()).isEqualTo(10); assertThat(circuitBreakerMetrics.getNumberOfFailedCalls()).isEqualTo(6); assertThat(circuitBreakerMetrics.getNumberOfSuccessfulCalls()).isEqualTo(4); assertThat(circuitBreakerMetrics.getFailureRate()).isEqualTo(60); } @Test public void testCopyCircuitBreakerMetrics(){ CircuitBreakerMetrics halfOpenCircuitBreakerMetrics = new CircuitBreakerMetrics(10); assertThat(halfOpenCircuitBreakerMetrics.getMaxNumberOfBufferedCalls()).isEqualTo(10); halfOpenCircuitBreakerMetrics.onSuccess(); halfOpenCircuitBreakerMetrics.onSuccess(); halfOpenCircuitBreakerMetrics.onError(); halfOpenCircuitBreakerMetrics.onError(); assertThat(halfOpenCircuitBreakerMetrics.getNumberOfBufferedCalls()).isEqualTo(4); assertThat(halfOpenCircuitBreakerMetrics.getNumberOfFailedCalls()).isEqualTo(2); assertThat(halfOpenCircuitBreakerMetrics.getNumberOfSuccessfulCalls()).isEqualTo(2); CircuitBreakerMetrics closedCircuitBreakerMetrics = halfOpenCircuitBreakerMetrics.copy(20); assertThat(closedCircuitBreakerMetrics.getMaxNumberOfBufferedCalls()).isEqualTo(20); assertThat(closedCircuitBreakerMetrics.getNumberOfBufferedCalls()).isEqualTo(4); assertThat(closedCircuitBreakerMetrics.getNumberOfFailedCalls()).isEqualTo(2); assertThat(closedCircuitBreakerMetrics.getNumberOfSuccessfulCalls()).isEqualTo(2); assertThat(closedCircuitBreakerMetrics.getNumberOfNotPermittedCalls()).isEqualTo(0); } }