package org.yamcs.alarms; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.LinkedList; import java.util.Queue; import org.junit.BeforeClass; import org.junit.Test; import org.yamcs.parameter.ParameterValue; import org.yamcs.api.EventProducerFactory; import org.yamcs.protobuf.Pvalue.MonitoringResult; import org.yamcs.xtce.Parameter; public class AlarmServerTest { Parameter p1 = new Parameter("p1"); Parameter p2 = new Parameter("p2"); @BeforeClass static public void setupBeforeClass() { EventProducerFactory.setMockup(true); } ParameterValue getParameterValue(Parameter p, MonitoringResult mr) { ParameterValue pv = new ParameterValue(p); pv.setMonitoringResult(mr); return pv; } @Test public void test1 () throws CouldNotAcknowledgeAlarmException { AlarmServer as = new AlarmServer("toto"); MyListener l = new MyListener(); as.subscribe(l); ParameterValue pv1_0 = getParameterValue(p1, MonitoringResult.WARNING); as.update(pv1_0, 1); ActiveAlarm aa = l.triggered.remove(); assertEquals(pv1_0, aa.currentValue); assertEquals(pv1_0, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); ParameterValue pv1_1 = getParameterValue(p1, MonitoringResult.WARNING); as.update(pv1_1, 1); assertTrue(l.triggered.isEmpty()); aa = l.updated.remove(); assertEquals(pv1_1, aa.currentValue); assertEquals(pv1_0, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); ParameterValue pv1_2 = getParameterValue(p1, MonitoringResult.CRITICAL); as.update(pv1_2, 1); assertTrue(l.triggered.isEmpty()); assertFalse(l.updated.isEmpty()); aa = l.severityIncreased.remove(); assertEquals(pv1_2, aa.currentValue); assertEquals(pv1_2, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); long ackTime = 123L; as.acknowledge(p1, aa.id, "test1", ackTime, "bla"); assertTrue(l.cleared.isEmpty()); assertEquals(1, l.acknowledged.size()); assertEquals(aa, l.acknowledged.remove()); ParameterValue pv1_3 = getParameterValue(p1, MonitoringResult.IN_LIMITS); as.update(pv1_3, 1); aa = l.cleared.remove(); assertEquals(pv1_3, aa.currentValue); assertEquals(pv1_2, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); assertEquals("test1", aa.usernameThatAcknowledged); assertEquals(ackTime, aa.acknowledgeTime); assertEquals("bla", aa.message); } @Test public void test2 () throws CouldNotAcknowledgeAlarmException { AlarmServer as = new AlarmServer("toto"); MyListener l = new MyListener(); as.subscribe(l); ParameterValue pv1_0 = getParameterValue(p1, MonitoringResult.WARNING); as.update(pv1_0, 1); ActiveAlarm aa = l.triggered.remove(); assertEquals(pv1_0, aa.currentValue); assertEquals(pv1_0, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); ParameterValue pv1_1 = getParameterValue(p1, MonitoringResult.IN_LIMITS); as.update(pv1_1, 1); assertTrue(l.cleared.isEmpty()); aa = l.updated.remove(); assertEquals(pv1_1, aa.currentValue); assertEquals(pv1_0, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); long ackTime = 123L; as.acknowledge(p1, aa.id, "test2", ackTime, "bla"); assertEquals(1, l.acknowledged.size()); assertEquals(aa, l.acknowledged.remove()); aa = l.cleared.remove(); assertEquals(pv1_1, aa.currentValue); assertEquals(pv1_0, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); assertEquals("test2", aa.usernameThatAcknowledged); assertEquals(ackTime, aa.acknowledgeTime); assertEquals("bla", aa.message); } @Test public void testAutoAck () { AlarmServer as = new AlarmServer("toto"); MyListener l = new MyListener(); as.subscribe(l); ParameterValue pv1_0 = getParameterValue(p1, MonitoringResult.WARNING); as.update(pv1_0, 1, true); ActiveAlarm aa = l.triggered.remove(); assertEquals(pv1_0, aa.currentValue); assertEquals(pv1_0, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); ParameterValue pv1_1 = getParameterValue(p1, MonitoringResult.IN_LIMITS); as.update(pv1_1, 1, true); aa = l.cleared.remove(); assertEquals(pv1_1, aa.currentValue); assertEquals(pv1_0, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); } @Test(expected = CouldNotAcknowledgeAlarmException.class) public void testAcknowledgeButNoAlarm() throws CouldNotAcknowledgeAlarmException { AlarmServer as = new AlarmServer("toto"); MyListener l = new MyListener(); as.subscribe(l); long ackTime = 123L; as.acknowledge(p1, 1, "a-user", ackTime, "bla"); } @Test(expected = CouldNotAcknowledgeAlarmException.class) public void testAcknowledgeButNoParameterMatch() throws CouldNotAcknowledgeAlarmException { AlarmServer as = new AlarmServer("toto"); MyListener l = new MyListener(); as.subscribe(l); ParameterValue pv1_0 = getParameterValue(p1, MonitoringResult.WARNING); as.update(pv1_0, 1, true); ActiveAlarm aa = l.triggered.remove(); assertEquals(pv1_0, aa.currentValue); assertEquals(pv1_0, aa.mostSevereValue); assertEquals(pv1_0, aa.triggerValue); long ackTime = 123L; as.acknowledge(p2 /* not p1 */, aa.id, "a-user", ackTime, "bla"); } @Test public void testMoreSevere() { assertTrue(AlarmServer.moreSevere(MonitoringResult.CRITICAL, MonitoringResult.WARNING)); assertFalse(AlarmServer.moreSevere(MonitoringResult.WARNING, MonitoringResult.CRITICAL)); assertFalse(AlarmServer.moreSevere(MonitoringResult.CRITICAL, MonitoringResult.CRITICAL)); } class MyListener implements AlarmListener { Queue<ActiveAlarm> triggered = new LinkedList<>(); Queue<ActiveAlarm> updated = new LinkedList<>(); Queue<ActiveAlarm> severityIncreased = new LinkedList<>(); Queue<ActiveAlarm> acknowledged = new LinkedList<>(); Queue<ActiveAlarm> cleared = new LinkedList<>(); @Override public void notifyTriggered(ActiveAlarm activeAlarm) { triggered.add(activeAlarm); } @Override public void notifyParameterValueUpdate(ActiveAlarm activeAlarm) { updated.add(activeAlarm); } @Override public void notifySeverityIncrease(ActiveAlarm activeAlarm) { severityIncreased.add(activeAlarm); } @Override public void notifyAcknowledged(ActiveAlarm activeAlarm) { acknowledged.add(activeAlarm); } @Override public void notifyCleared(ActiveAlarm activeAlarm) { cleared.add(activeAlarm); } } }