diff --git a/src/main/java/io/socket/backo/Backoff.java b/src/main/java/io/socket/backo/Backoff.java index f519921..81e1ddd 100644 --- a/src/main/java/io/socket/backo/Backoff.java +++ b/src/main/java/io/socket/backo/Backoff.java @@ -3,6 +3,9 @@ package io.socket.backo; import java.math.BigDecimal; import java.math.BigInteger; +/** + * Imported from https://github.com/mokesmokes/backo + */ public class Backoff { private long ms = 100; @@ -23,7 +26,10 @@ public class Backoff { .multiply(new BigDecimal(ms)).toBigInteger(); ms = (((int) Math.floor(rand * 10)) & 1) == 0 ? ms.subtract(deviation) : ms.add(deviation); } - return ms.min(BigInteger.valueOf(this.max)).longValue(); + return ms + .min(BigInteger.valueOf(this.max)) + .max(BigInteger.valueOf(this.ms)) + .longValue(); } public void reset() { @@ -46,6 +52,10 @@ public class Backoff { } public Backoff setJitter(double jitter) { + boolean isValid = jitter >= 0 && jitter < 1; + if (!isValid) { + throw new IllegalArgumentException("jitter must be between 0 and 1"); + } this.jitter = jitter; return this; } diff --git a/src/test/java/io/socket/backo/BackoffTest.java b/src/test/java/io/socket/backo/BackoffTest.java index a268829..8ae61de 100644 --- a/src/test/java/io/socket/backo/BackoffTest.java +++ b/src/test/java/io/socket/backo/BackoffTest.java @@ -44,4 +44,10 @@ public class BackoffTest { } } } + + @Test(expected = IllegalArgumentException.class) + public void ensureJitterIsValid() { + Backoff b = new Backoff(); + b.setJitter(2); + } }