Create Duration class and ExpiringSet#getExpiration (prep for #1073)

- Move expiring collections to util.expiring package
- Change ExpiringSet to remove expired entries during normal calls
This commit is contained in:
ljacqu
2017-02-25 17:25:25 +01:00
parent 4edb4e68c2
commit 72c5cfac68
17 changed files with 226 additions and 18 deletions
@@ -3,7 +3,7 @@ package fr.xephi.authme.data;
import fr.xephi.authme.ReflectionTestUtils;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.TimedCounter;
import fr.xephi.authme.util.expiring.TimedCounter;
import org.junit.Test;
import static org.hamcrest.Matchers.equalTo;
@@ -3,7 +3,7 @@ package fr.xephi.authme.data;
import fr.xephi.authme.ReflectionTestUtils;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.ExpiringSet;
import fr.xephi.authme.util.expiring.ExpiringSet;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
@@ -7,7 +7,7 @@ import fr.xephi.authme.message.Messages;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.TimedCounter;
import fr.xephi.authme.util.expiring.TimedCounter;
import org.bukkit.entity.Player;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -6,7 +6,7 @@ import ch.jalu.injector.testing.InjectDelayed;
import fr.xephi.authme.ReflectionTestUtils;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.ExpiringMap;
import fr.xephi.authme.util.expiring.ExpiringMap;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -0,0 +1,43 @@
package fr.xephi.authme.util.expiring;
import org.junit.Test;
import java.util.concurrent.TimeUnit;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
/**
* Test for {@link Duration}.
*/
public class DurationTest {
@Test
public void shouldConvertToAppropriateTimeUnit() {
check(Duration.createWithSuitableUnit(0, TimeUnit.HOURS),
0, TimeUnit.SECONDS);
check(Duration.createWithSuitableUnit(124, TimeUnit.MINUTES),
2, TimeUnit.HOURS);
check(Duration.createWithSuitableUnit(300, TimeUnit.HOURS),
12, TimeUnit.DAYS);
check(Duration.createWithSuitableUnit(60 * 24 * 50 + 8, TimeUnit.MINUTES),
50, TimeUnit.DAYS);
check(Duration.createWithSuitableUnit(1000L * 60 * 60 * 24 * 7 + 3000, TimeUnit.MILLISECONDS),
7, TimeUnit.DAYS);
check(Duration.createWithSuitableUnit(1000L * 60 * 60 * 3 + 1400, TimeUnit.MILLISECONDS),
3, TimeUnit.HOURS);
check(Duration.createWithSuitableUnit(248, TimeUnit.SECONDS),
4, TimeUnit.MINUTES);
}
private static void check(Duration duration, long expectedDuration, TimeUnit expectedUnit) {
assertThat(duration.getTimeUnit(), equalTo(expectedUnit));
assertThat(duration.getDuration(), equalTo(expectedDuration));
}
}
@@ -1,4 +1,4 @@
package fr.xephi.authme.util;
package fr.xephi.authme.util.expiring;
import org.junit.Test;
@@ -1,9 +1,10 @@
package fr.xephi.authme.util;
package fr.xephi.authme.util.expiring;
import org.junit.Test;
import java.util.concurrent.TimeUnit;
import static org.hamcrest.Matchers.either;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
@@ -88,4 +89,34 @@ public class ExpiringSetTest {
assertThat(set.contains(3), equalTo(false));
assertThat(set.contains(6), equalTo(true));
}
@Test
public void shouldReturnExpiration() {
// given
ExpiringSet<String> set = new ExpiringSet<>(123, TimeUnit.MINUTES);
set.add("my entry");
// when
long expiresInHours = set.getExpiration("my entry", TimeUnit.HOURS);
long expiresInMinutes = set.getExpiration("my entry", TimeUnit.MINUTES);
long unknownExpires = set.getExpiration("bogus", TimeUnit.SECONDS);
// then
assertThat(expiresInHours, equalTo(2L));
assertThat(expiresInMinutes, either(equalTo(122L)).or(equalTo(123L)));
assertThat(unknownExpires, equalTo(-1L));
}
@Test
public void shouldReturnMinusOneForExpiredEntry() {
// given
ExpiringSet<Integer> set = new ExpiringSet<>(-100, TimeUnit.SECONDS);
set.add(23);
// when
long expiresInSeconds = set.getExpiration(23, TimeUnit.SECONDS);
// then
assertThat(expiresInSeconds, equalTo(-1L));
}
}
@@ -1,4 +1,4 @@
package fr.xephi.authme.util;
package fr.xephi.authme.util.expiring;
import org.junit.Test;