package de.codecentric.boot.admin.notify;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.util.Arrays;
import java.util.Collections;
import org.junit.Test;
import de.codecentric.boot.admin.event.ClientApplicationEvent;
import de.codecentric.boot.admin.event.ClientApplicationStatusChangedEvent;
import de.codecentric.boot.admin.model.Application;
import de.codecentric.boot.admin.model.StatusInfo;
public class RemindingNotifierTest {
private static final ClientApplicationEvent APP_DOWN = new ClientApplicationStatusChangedEvent(
Application.create("App").withId("id-1").withHealthUrl("http://health")
.withStatusInfo(StatusInfo.ofDown()).build(),
StatusInfo.ofUp(), StatusInfo.ofDown());
private static final ClientApplicationEvent APP_UP = new ClientApplicationStatusChangedEvent(
Application.create("App").withId("id-1").withHealthUrl("http://health")
.withStatusInfo(StatusInfo.ofUp()).build(),
StatusInfo.ofDown(), StatusInfo.ofUp());
private static final ClientApplicationEvent OTHER_APP_UP = new ClientApplicationStatusChangedEvent(
Application.create("App").withId("id-2").withHealthUrl("http://health")
.withStatusInfo(StatusInfo.ofUp()).build(),
StatusInfo.ofDown(), StatusInfo.ofUp());
@Test(expected = IllegalArgumentException.class)
public void test_ctor_assert() {
new CompositeNotifier(null);
}
@Test
public void test_remind() throws Exception {
TestNotifier notifier = new TestNotifier();
RemindingNotifier reminder = new RemindingNotifier(notifier);
reminder.setReminderPeriod(-1000L);
reminder.notify(APP_DOWN);
reminder.notify(OTHER_APP_UP);
reminder.sendReminders();
reminder.sendReminders();
assertThat(notifier.getEvents(),
is(Arrays.asList(APP_DOWN, OTHER_APP_UP, APP_DOWN, APP_DOWN)));
}
@Test
public void test_no_remind_after_up() throws Exception {
TestNotifier notifier = new TestNotifier();
RemindingNotifier reminder = new RemindingNotifier(notifier);
reminder.setReminderPeriod(0L);
reminder.notify(APP_DOWN);
reminder.notify(APP_UP);
reminder.sendReminders();
assertThat(notifier.getEvents(), is(Arrays.asList(APP_DOWN, APP_UP)));
}
@Test
public void test_no_remind_before_end() throws Exception {
TestNotifier notifier = new TestNotifier();
RemindingNotifier reminder = new RemindingNotifier(notifier);
reminder.setReminderPeriod(Long.MAX_VALUE);
reminder.notify(APP_DOWN);
reminder.sendReminders();
assertThat(notifier.getEvents(), is(Collections.singletonList(APP_DOWN)));
}
}