-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCooldownTests.java
More file actions
133 lines (102 loc) · 4.13 KB
/
CooldownTests.java
File metadata and controls
133 lines (102 loc) · 4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.cosimo.utilities.timed;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.Execution;
import org.junit.jupiter.api.parallel.ExecutionMode;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.*;
@Execution(ExecutionMode.CONCURRENT)
public class CooldownTests {
/**
* Permitted time difference from setting a time value to testing it.
*/
public static final int MILLISECOND_TOLERANCE = 50;
@Test
public void testToThisTime() {
final TimeStandard timeStandard = new TimeStandard() {
};
assertEquals(60_000, timeStandard.toThisTime(1, TimeUnit.MINUTES));
assertEquals(1_000, timeStandard.toThisTime(1, TimeUnit.SECONDS));
}
@Test
public void testFromThisTime() {
final TimeStandard timeStandard = new TimeStandard() {
};
assertEquals(1, timeStandard.fromThisTime(60_000, TimeUnit.MINUTES));
assertEquals(1, timeStandard.fromThisTime(1_000, TimeUnit.SECONDS));
}
@Test
public void testGetCurrentTime() {
final TimeStandard timeStandard = new TimeStandard() {
@Override
public long getCurrentTime() {
return System.nanoTime();
}
};
final long currentTime = System.nanoTime();
final long diffInMs = Math.abs(timeStandard.getCurrentTime() - currentTime) / 1000;
assertTrue(diffInMs < MILLISECOND_TOLERANCE);
}
@Test
public void testIsExpired() throws InterruptedException {
final ICooldown cooldown = new Cooldown(50);
assertFalse(cooldown.isExpired());
Thread.sleep(60);
assertTrue(cooldown.isExpired());
assertEquals(0, cooldown.getRemaining());
assertEquals(0, cooldown.getRemaining(TimeUnit.SECONDS));
assertTrue(cooldown.getDifference() < 0);
assertTrue(cooldown.getDifference(TimeUnit.NANOSECONDS) < 0);
}
@Test
public void testGetRemainingAndDifference() {
final ICooldown cooldown = new Cooldown(5_000);
final long difference = cooldown.getDifference();
final long remaining = cooldown.getRemaining();
assertTrue(difference <= 5_000 && difference > 0);
assertEquals(difference, remaining);
assertTrue(cooldown.getDifference(TimeUnit.SECONDS) <= 5);
assertTrue(cooldown.getRemaining(TimeUnit.SECONDS) <= 5);
}
@Test
public void testCooldownConstructorWithTimeUnit() {
final Cooldown cooldown = new Cooldown(1, TimeUnit.MINUTES);
assertTrue(cooldown.getExpiration() > System.currentTimeMillis());
}
@Test
public void testCooldownExpirationAfterConstructor() {
final Cooldown cooldown = new Cooldown(60_000);
assertTrue(cooldown.getExpiration() > System.currentTimeMillis());
}
@Test
public void testCooldownExtendWithTimeUnit() {
final Cooldown cooldown = new Cooldown(5_000);
final long previousExpiration = cooldown.getExpiration();
cooldown.extend(10, TimeUnit.SECONDS);
assertTrue(cooldown.getExpiration() > previousExpiration);
}
@Test
public void testCooldownExtendAfterConstructor() {
final Cooldown cooldown = new Cooldown(5_000);
final long previousExpiration = cooldown.getExpiration();
cooldown.extend(3_000);
assertTrue(cooldown.getExpiration() > previousExpiration);
}
@Test
public void testCooldownsCleanup() throws InterruptedException {
final var cooldowns = new Cooldowns<>();
cooldowns.put("test1", new Cooldown(50));
cooldowns.put("test2", new Cooldown(5_000));
Thread.sleep(50 + MILLISECOND_TOLERANCE);
assertTrue(cooldowns.clearExpired());
assertFalse(cooldowns.containsKey("test1"));
assertTrue(cooldowns.containsKey("test2"));
assertFalse(cooldowns.clearExpired());
}
@Test
public void testCooldownsConstructorWithMap() {
final var initialMap = Map.of("key1", new Cooldown(5000));
final var cooldowns = new Cooldowns<>(initialMap);
assertTrue(cooldowns.containsKey("key1"));
}
}