@@ -144,4 +144,41 @@ void afterAMinuteLetOneThrough() {
144
144
assertThat (logs .getEvents ()).hasSize (9 );
145
145
assertThat (logs .getEvents ().get (8 ).getMessage ()).isEqualTo ("oh no!" );
146
146
}
147
+
148
+ @ Test
149
+ void allowOnlyOneLogPerMinuteAfterSuppression () {
150
+ TestClock clock = TestClock .create ();
151
+ ThrottlingLogger logger = new ThrottlingLogger (realLogger , clock );
152
+
153
+ logger .log (Level .WARNING , "oh no!" );
154
+ logger .log (Level .WARNING , "oh no!" );
155
+ logger .log (Level .WARNING , "oh no!" );
156
+ logger .log (Level .WARNING , "oh no!" );
157
+ logger .log (Level .WARNING , "oh no!" );
158
+
159
+ logger .log (Level .WARNING , "oh no I should trigger suppression!" );
160
+ logger .log (Level .WARNING , "oh no I should be suppressed!" );
161
+
162
+ assertThat (logs .getEvents ()).hasSize (7 );
163
+
164
+ clock .advance (Duration .ofMillis (12_001 ));
165
+ logger .log (Level .WARNING , "suppression 1" );
166
+ clock .advance (Duration .ofMillis (12_001 ));
167
+ logger .log (Level .WARNING , "suppression 2" );
168
+ clock .advance (Duration .ofMillis (12_001 ));
169
+ logger .log (Level .WARNING , "suppression 3" );
170
+ clock .advance (Duration .ofMillis (12_001 ));
171
+ logger .log (Level .WARNING , "suppression 4" );
172
+ clock .advance (Duration .ofMillis (12_001 ));
173
+ logger .log (Level .WARNING , "allowed 1" );
174
+
175
+ logs .assertDoesNotContain ("suppression 1" );
176
+ logs .assertDoesNotContain ("suppression 2" );
177
+ logs .assertDoesNotContain ("suppression 3" );
178
+ logs .assertDoesNotContain ("suppression 4" );
179
+ logs .assertContains ("allowed 1" );
180
+
181
+ assertThat (logs .getEvents ()).hasSize (8 );
182
+ assertThat (logs .getEvents ().get (7 ).getMessage ()).isEqualTo ("allowed 1" );
183
+ }
147
184
}
0 commit comments