@Test public void shouldCallDiskDumpForEachRepoAtExit() throws InterruptedException, IOException { EntryRepo repoFoo = mock(EntryRepo.class); EntryRepo repoBar = mock(EntryRepo.class); EntryRepo repoBaz = mock(EntryRepo.class); when(repoFoo.isDirty()).thenReturn(true); when(repoFoo.diskDump()).thenReturn("foo-data"); when(repoBar.isDirty()).thenReturn(true); when(repoBar.diskDump()).thenReturn("bar-data"); when(repoBaz.isDirty()).thenReturn(true); when(repoBaz.diskDump()).thenReturn("baz-data"); factory.getRepos().put("foo", repoFoo); factory.getRepos().put("bar", repoBar); factory.getRepos().put("baz", repoBaz); Thread exitHook = factory.exitHook(); exitHook.start(); exitHook.join(); verify(repoFoo).diskDump(); verify(repoBar).diskDump(); verify(repoBaz).diskDump(); }
@Test public void shouldLogExceptionsButContinueDumpingRepositories() throws InterruptedException, IOException { EntryRepo repoFoo = mock(EntryRepo.class); EntryRepo repoBar = mock(EntryRepo.class); factory.getRepos().put("foo_subset__size", repoFoo); factory.getRepos().put("bar_subset__size", repoBar); when(repoFoo.isDirty()).thenReturn(true); when(repoFoo.diskDump()).thenThrow(new RuntimeException("test exception")); when(repoBar.isDirty()).thenReturn(true); when(repoBar.diskDump()).thenReturn("bar-data"); logFixture.startListening(); factory.run(); logFixture.stopListening(); logFixture.assertHeard("disk dump of foo_subset__size failed"); verify(repoFoo).diskDump(); verify(repoBar).diskDump(); }