15
15
import io .opentelemetry .sdk .common .Clock ;
16
16
import io .opentelemetry .sdk .testing .time .TestClock ;
17
17
import java .time .Duration ;
18
+ import java .util .concurrent .TimeUnit ;
18
19
import java .util .logging .Level ;
19
20
import java .util .logging .Logger ;
20
21
import org .junit .jupiter .api .Test ;
@@ -45,6 +46,23 @@ void delegation() {
45
46
.isSameAs (throwable );
46
47
}
47
48
49
+ @ Test
50
+ void delegationCustom () {
51
+ ThrottlingLogger logger = new ThrottlingLogger (realLogger , 10 , 2 , TimeUnit .HOURS );
52
+
53
+ logger .log (Level .WARNING , "oh no!" );
54
+ logger .log (Level .INFO , "oh yes!" );
55
+ RuntimeException throwable = new RuntimeException ();
56
+ logger .log (Level .SEVERE , "secrets" , throwable );
57
+
58
+ logs .assertContains (loggingEvent -> loggingEvent .getLevel ().equals (WARN ), "oh no!" );
59
+ logs .assertContains (loggingEvent -> loggingEvent .getLevel ().equals (INFO ), "oh yes!" );
60
+ assertThat (
61
+ logs .assertContains (loggingEvent -> loggingEvent .getLevel ().equals (ERROR ), "secrets" )
62
+ .getThrowable ())
63
+ .isSameAs (throwable );
64
+ }
65
+
48
66
@ Test
49
67
void logsBelowLevelDontCount () {
50
68
ThrottlingLogger logger =
@@ -76,7 +94,26 @@ void fiveInAMinuteTriggersLimiting() {
76
94
assertThat (logs .getEvents ()).hasSize (7 );
77
95
logs .assertDoesNotContain ("oh no I should be suppressed!" );
78
96
logs .assertContains (
79
- "Too many log messages detected. Will only log once per minute from now on." );
97
+ "Too many log messages detected. Will only log 1 time(s) per minute from now on." );
98
+ logs .assertContains ("oh no I should trigger suppression!" );
99
+ }
100
+
101
+ @ Test
102
+ void tenInAnHourTriggersLimiting () {
103
+ Clock clock = TestClock .create ();
104
+ ThrottlingLogger logger = new ThrottlingLogger (realLogger , clock , 10 , 2 , TimeUnit .HOURS );
105
+
106
+ for (int i = 0 ; i < 10 ; i ++) {
107
+ logger .log (Level .WARNING , "oh no!" );
108
+ }
109
+
110
+ logger .log (Level .WARNING , "oh no I should trigger suppression!" );
111
+ logger .log (Level .WARNING , "oh no I should be suppressed!" );
112
+
113
+ assertThat (logs .getEvents ()).hasSize (12 );
114
+ logs .assertDoesNotContain ("oh no I should be suppressed!" );
115
+ logs .assertContains (
116
+ "Too many log messages detected. Will only log 2 time(s) per hour from now on." );
80
117
logs .assertContains ("oh no I should trigger suppression!" );
81
118
}
82
119
@@ -130,7 +167,7 @@ void afterAMinuteLetOneThrough() {
130
167
logs .assertDoesNotContain ("oh no I should be suppressed!" );
131
168
logs .assertContains ("oh no I should trigger suppression!" );
132
169
logs .assertContains (
133
- "Too many log messages detected. Will only log once per minute from now on." );
170
+ "Too many log messages detected. Will only log 1 time(s) per minute from now on." );
134
171
135
172
clock .advance (Duration .ofMillis (60_001 ));
136
173
logger .log (Level .WARNING , "oh no!" );
@@ -145,6 +182,41 @@ void afterAMinuteLetOneThrough() {
145
182
assertThat (logs .getEvents ().get (8 ).getMessage ()).isEqualTo ("oh no!" );
146
183
}
147
184
185
+ @ Test
186
+ void afterAnHourLetTwoThrough () {
187
+ TestClock clock = TestClock .create ();
188
+ ThrottlingLogger logger = new ThrottlingLogger (realLogger , clock , 10 , 2 , TimeUnit .HOURS );
189
+
190
+ for (int i = 0 ; i < 10 ; i ++) {
191
+ logger .log (Level .WARNING , "oh no!" );
192
+ }
193
+
194
+ logger .log (Level .WARNING , "oh no I should trigger suppression!" );
195
+ logger .log (Level .WARNING , "oh no I should be suppressed!" );
196
+
197
+ assertThat (logs .getEvents ()).hasSize (12 );
198
+ logs .assertDoesNotContain ("oh no I should be suppressed!" );
199
+ logs .assertContains ("oh no I should trigger suppression!" );
200
+ logs .assertContains (
201
+ "Too many log messages detected. Will only log 2 time(s) per hour from now on." );
202
+
203
+ clock .advance (Duration .ofMinutes (61 ));
204
+ logger .log (Level .WARNING , "oh no!" );
205
+ logger .log (Level .WARNING , "oh no!" );
206
+ logger .log (Level .WARNING , "oh no I should be suppressed!" );
207
+ assertThat (logs .getEvents ()).hasSize (14 );
208
+ assertThat (logs .getEvents ().get (13 ).getMessage ()).isEqualTo ("oh no!" );
209
+
210
+ clock .advance (Duration .ofMinutes (61 ));
211
+ logger .log (Level .WARNING , "oh no!" );
212
+ logger .log (Level .WARNING , "oh no!" );
213
+ logger .log (Level .WARNING , "oh no I should be suppressed!" );
214
+ assertThat (logs .getEvents ()).hasSize (16 );
215
+ assertThat (logs .getEvents ().get (15 ).getMessage ()).isEqualTo ("oh no!" );
216
+
217
+ logs .assertDoesNotContain ("oh no I should be suppressed!" );
218
+ }
219
+
148
220
@ Test
149
221
void allowOnlyOneLogPerMinuteAfterSuppression () {
150
222
TestClock clock = TestClock .create ();
@@ -181,4 +253,45 @@ void allowOnlyOneLogPerMinuteAfterSuppression() {
181
253
assertThat (logs .getEvents ()).hasSize (8 );
182
254
assertThat (logs .getEvents ().get (7 ).getMessage ()).isEqualTo ("allowed 1" );
183
255
}
256
+
257
+ @ Test
258
+ void allowOnlyTwoLogPerHourAfterSuppression () {
259
+ TestClock clock = TestClock .create ();
260
+ ThrottlingLogger logger = new ThrottlingLogger (realLogger , clock , 10 , 2 , TimeUnit .HOURS );
261
+
262
+ for (int i = 0 ; i < 10 ; i ++) {
263
+ logger .log (Level .WARNING , "oh no!" );
264
+ }
265
+
266
+ logger .log (Level .WARNING , "oh no I should trigger suppression!" );
267
+ logger .log (Level .WARNING , "oh no I should be suppressed!" );
268
+
269
+ assertThat (logs .getEvents ()).hasSize (12 );
270
+
271
+ clock .advance (Duration .ofMinutes (10 ));
272
+ logger .log (Level .WARNING , "suppression 1" );
273
+ clock .advance (Duration .ofMinutes (10 ));
274
+ logger .log (Level .WARNING , "suppression 2" );
275
+ clock .advance (Duration .ofMinutes (10 ));
276
+ clock .advance (Duration .ofSeconds (1 ));
277
+ logger .log (Level .WARNING , "allowed 1" );
278
+ clock .advance (Duration .ofMinutes (10 ));
279
+ logger .log (Level .WARNING , "suppression 3" );
280
+ clock .advance (Duration .ofMinutes (10 ));
281
+ logger .log (Level .WARNING , "suppression 4" );
282
+ clock .advance (Duration .ofMinutes (10 ));
283
+ clock .advance (Duration .ofSeconds (1 ));
284
+ logger .log (Level .WARNING , "allowed 2" );
285
+
286
+ logs .assertDoesNotContain ("suppression 1" );
287
+ logs .assertDoesNotContain ("suppression 2" );
288
+ logs .assertDoesNotContain ("suppression 3" );
289
+ logs .assertDoesNotContain ("suppression 4" );
290
+ logs .assertContains ("allowed 1" );
291
+ logs .assertContains ("allowed 2" );
292
+
293
+ assertThat (logs .getEvents ()).hasSize (14 );
294
+ assertThat (logs .getEvents ().get (12 ).getMessage ()).isEqualTo ("allowed 1" );
295
+ assertThat (logs .getEvents ().get (13 ).getMessage ()).isEqualTo ("allowed 2" );
296
+ }
184
297
}
0 commit comments