1 package net.pterodactylus.xdcc.core;
3 import java.time.Clock;
4 import java.time.Instant;
5 import java.time.ZoneId;
7 import net.pterodactylus.xdcc.data.Network;
9 import org.hamcrest.MatcherAssert;
10 import org.hamcrest.Matchers;
11 import org.junit.Test;
12 import org.mockito.Mockito;
15 * Unit test for {@link ConnectionBackoff}.
17 public class ConnectionBackoffTest {
19 private final Network network = Mockito.mock(Network.class);
20 private final Clock fixedClock = Clock.fixed(Instant.now(), ZoneId.systemDefault());
21 private final ConnectionBackoff connectionBackoff = new ConnectionBackoff(fixedClock);
24 public void defaultBackoffCanBeCreated() {
25 new ConnectionBackoff();
29 public void firstConnectionIsImmediatelyPossible() {
30 MatcherAssert.assertThat(connectionBackoff.getBackoff(network), Matchers.is(0L));
34 public void afterTheFirstFailedConnectionBackoffIsOneMinute() {
35 connectionBackoff.connectionFailed(network);
36 MatcherAssert.assertThat(connectionBackoff.getBackoff(network), Matchers.is(60000L));
40 public void secondFailureIncreasesBackoffTo72Seconds() {
41 connectionBackoff.connectionFailed(network);
42 connectionBackoff.connectionFailed(network);
43 MatcherAssert.assertThat(connectionBackoff.getBackoff(network), Matchers.is(72000L));
47 public void successfulConnectionResetsTheTimer() {
48 connectionBackoff.connectionFailed(network);
49 connectionBackoff.connectionSuccessful(network);
50 MatcherAssert.assertThat(connectionBackoff.getBackoff(network), Matchers.is(0L));
54 public void backoffIsCappedToOneHour() {
55 for (int i = 0; i < 45; i++) {
56 connectionBackoff.connectionFailed(network);
58 MatcherAssert.assertThat(connectionBackoff.getBackoff(network), Matchers.is(3600000L));