Skip to content

Commit 246f716

Browse files
committed
Add timer accumulation logging and keyset key unit tests
1 parent ef241d0 commit 246f716

2 files changed

Lines changed: 88 additions & 3 deletions

File tree

src/main/java/com/uid2/operator/vertx/OperatorShutdownHandler.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,17 @@ public void handleKeysetKeyRefreshResponse(Boolean success) {
8585
keysetKeyFailureStartTime.set(clock.instant());
8686
LOGGER.warn(
8787
"keyset keys sync started failing. shutdown timer started (will shutdown in 7 days if not recovered)");
88-
} else if (Duration.between(t, clock.instant()).compareTo(this.keysetKeyShutdownWaitTime) > 0) {
89-
LOGGER.error("keyset keys have been failing to sync for too long. shutting down operator");
90-
this.shutdownService.Shutdown(1);
88+
} else {
89+
Duration elapsed = Duration.between(t, clock.instant());
90+
LOGGER.debug("keyset keys sync still failing - timer at {} ({}d {}h {}m) / 7 days",
91+
elapsed,
92+
elapsed.toDays(),
93+
elapsed.toHoursPart(),
94+
elapsed.toMinutesPart());
95+
if (elapsed.compareTo(this.keysetKeyShutdownWaitTime) > 0) {
96+
LOGGER.error("keyset keys have been failing to sync for too long. shutting down operator");
97+
this.shutdownService.Shutdown(1);
98+
}
9199
}
92100
}
93101
}

src/test/java/com/uid2/operator/OperatorShutdownHandlerTest.java

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,4 +166,81 @@ void saltsLogErrorAtInterval(VertxTestContext testContext) {
166166

167167
testContext.completeNow();
168168
}
169+
170+
@Test
171+
void shutdownOnKeysetKeyFailedTooLong(VertxTestContext testContext) {
172+
ListAppender<ILoggingEvent> logWatcher = new ListAppender<>();
173+
logWatcher.start();
174+
((Logger) LoggerFactory.getLogger(OperatorShutdownHandler.class)).addAppender(logWatcher);
175+
176+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(false);
177+
Assertions.assertTrue(logWatcher.list.get(0).getFormattedMessage().contains("keyset keys sync failing"));
178+
Assertions.assertTrue(logWatcher.list.get(1).getFormattedMessage().contains("keyset keys sync started failing"));
179+
180+
when(clock.instant()).thenAnswer(i -> Instant.now().plus(7, ChronoUnit.DAYS).plusSeconds(60));
181+
try {
182+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(false);
183+
} catch (RuntimeException e) {
184+
verify(shutdownService).Shutdown(1);
185+
Assertions.assertTrue(logWatcher.list.stream().anyMatch(log ->
186+
log.getFormattedMessage().contains("keyset keys have been failing to sync for too long")));
187+
testContext.completeNow();
188+
}
189+
}
190+
191+
@Test
192+
void keysetKeyRecoverOnSuccess(VertxTestContext testContext) {
193+
ListAppender<ILoggingEvent> logWatcher = new ListAppender<>();
194+
logWatcher.start();
195+
((Logger) LoggerFactory.getLogger(OperatorShutdownHandler.class)).addAppender(logWatcher);
196+
197+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(false);
198+
when(clock.instant()).thenAnswer(i -> Instant.now().plus(3, ChronoUnit.DAYS));
199+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(true);
200+
201+
Assertions.assertTrue(logWatcher.list.stream().anyMatch(log ->
202+
log.getFormattedMessage().contains("keyset keys sync recovered")));
203+
204+
when(clock.instant()).thenAnswer(i -> Instant.now().plus(7, ChronoUnit.DAYS));
205+
assertDoesNotThrow(() -> {
206+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(false);
207+
});
208+
verify(shutdownService, never()).Shutdown(anyInt());
209+
testContext.completeNow();
210+
}
211+
212+
@Test
213+
void keysetKeyLogErrorAtInterval(VertxTestContext testContext) {
214+
ListAppender<ILoggingEvent> logWatcher = new ListAppender<>();
215+
logWatcher.start();
216+
((Logger) LoggerFactory.getLogger(OperatorShutdownHandler.class)).addAppender(logWatcher);
217+
218+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(false);
219+
long errorLogCount1 = logWatcher.list.stream().filter(log ->
220+
log.getFormattedMessage().contains("keyset keys sync failing")).count();
221+
222+
when(clock.instant()).thenAnswer(i -> Instant.now().plus(9, ChronoUnit.MINUTES));
223+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(false);
224+
long errorLogCount2 = logWatcher.list.stream().filter(log ->
225+
log.getFormattedMessage().contains("keyset keys sync failing")).count();
226+
Assertions.assertEquals(errorLogCount1, errorLogCount2);
227+
228+
when(clock.instant()).thenAnswer(i -> Instant.now().plus(11, ChronoUnit.MINUTES));
229+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(false);
230+
long errorLogCount3 = logWatcher.list.stream().filter(log ->
231+
log.getFormattedMessage().contains("keyset keys sync failing")).count();
232+
Assertions.assertTrue(errorLogCount3 > errorLogCount2);
233+
234+
testContext.completeNow();
235+
}
236+
237+
@Test
238+
void keysetKeyNoShutdownWhenAlwaysSuccessful(VertxTestContext testContext) {
239+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(true);
240+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(true);
241+
this.operatorShutdownHandler.handleKeysetKeyRefreshResponse(true);
242+
243+
verify(shutdownService, never()).Shutdown(anyInt());
244+
testContext.completeNow();
245+
}
169246
}

0 commit comments

Comments
 (0)