aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/org/apache/commons/lang3/concurrent/ThresholdCircuitBreakerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/org/apache/commons/lang3/concurrent/ThresholdCircuitBreakerTest.java')
-rw-r--r--src/test/java/org/apache/commons/lang3/concurrent/ThresholdCircuitBreakerTest.java88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/test/java/org/apache/commons/lang3/concurrent/ThresholdCircuitBreakerTest.java b/src/test/java/org/apache/commons/lang3/concurrent/ThresholdCircuitBreakerTest.java
new file mode 100644
index 000000000..c6a97fe44
--- /dev/null
+++ b/src/test/java/org/apache/commons/lang3/concurrent/ThresholdCircuitBreakerTest.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.commons.lang3.concurrent;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.apache.commons.lang3.AbstractLangTest;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Test class for {@code ThresholdCircuitBreaker}.
+ */
+public class ThresholdCircuitBreakerTest extends AbstractLangTest {
+
+ /**
+ * Threshold used in tests.
+ */
+ private static final long threshold = 10L;
+
+ private static final long zeroThreshold = 0L;
+
+ /**
+ * Tests that the threshold is working as expected when incremented and no exception is thrown.
+ */
+ @Test
+ public void testThreshold() {
+ final ThresholdCircuitBreaker circuit = new ThresholdCircuitBreaker(threshold);
+ circuit.incrementAndCheckState(9L);
+ assertFalse(circuit.incrementAndCheckState(1L), "Circuit opened before reaching the threshold");
+ }
+
+ /**
+ * Tests that exceeding the threshold raises an exception.
+ */
+ @Test
+ public void testThresholdCircuitBreakingException() {
+ final ThresholdCircuitBreaker circuit = new ThresholdCircuitBreaker(threshold);
+ circuit.incrementAndCheckState(9L);
+ assertTrue(circuit.incrementAndCheckState(2L), "The circuit was supposed to be open after increment above the threshold");
+ }
+
+ /**
+ * Test that when threshold is zero, the circuit breaker is always open.
+ */
+ @Test
+ public void testThresholdEqualsZero() {
+ final ThresholdCircuitBreaker circuit = new ThresholdCircuitBreaker(zeroThreshold);
+ assertTrue(circuit.incrementAndCheckState(0L), "When the threshold is zero, the circuit is supposed to be always open");
+ }
+
+ /**
+ * Tests that closing a {@code ThresholdCircuitBreaker} resets the internal counter.
+ */
+ @Test
+ public void testClosingThresholdCircuitBreaker() {
+ final ThresholdCircuitBreaker circuit = new ThresholdCircuitBreaker(threshold);
+ circuit.incrementAndCheckState(9L);
+ circuit.close();
+ // now the internal counter is back at zero, not 9 anymore. So it is safe to increment 9 again
+ assertFalse(circuit.incrementAndCheckState(9L), "Internal counter was not reset back to zero");
+ }
+
+ /**
+ * Tests that we can get the threshold value correctly.
+ */
+ @Test
+ public void testGettingThreshold() {
+ final ThresholdCircuitBreaker circuit = new ThresholdCircuitBreaker(threshold);
+ assertEquals(Long.valueOf(threshold), Long.valueOf(circuit.getThreshold()), "Wrong value of threshold");
+ }
+
+}