[ONOS-3203] End-to-end demo of Fault Management via SNMP.
This adds SNMP device-discovery, and a Fault Management app which makes alarms available to users via REST/GUI/CLI interfaces.
There is still code cleanup that could be done, but aim of this commit is an end-to-end proof of concept.
To demonstrate :
1) /opt/onos/bin/onos-service
onos> app activate org.onosproject.snmp
onos> app activate org.onosproject.faultmanagement
2) SNMP devices are seeded via config file. The default seed file contains connection details for devices (SNMP agents) available via internet e.g. demo.snmplabs.com
cp /opt/onos/apache-karaf-3.0.3/etc/samples/org.onosproject.provider.snmp.device.impl.SnmpDeviceProvider.cfg /opt/onos/apache-karaf-3.0.3/etc/
3) ONOS will poll these SNMP devices and store their alarms.
4) You can now manipulate the alarms via REST e.g. http://<onos>:8181/onos/v1/fm/alarms , via CLI via various "alarm-*” commands or in UI with an Alarms Overlay.
More info at https://wiki.onosproject.org/display/ONOS/Fault+Management
15/Dec/15: Updated regarding review comments from Thomas Vachuska.
17/Dec/15: Updated coreService.registerApplication(name) as per https://gerrit.onosproject.org/#/c/6878/
Change-Id: I886f8511f178dc4600ab96e5ff10cc90329cabec
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarmTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarmTest.java
index 199ed0d..53390bb 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarmTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/faultmanagement/alarm/DefaultAlarmTest.java
@@ -18,6 +18,7 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.greaterThan;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
@@ -35,13 +36,57 @@
*/
@Test
public void testConstruction() {
- final String nameValue = "name3";
- final DefaultAlarm a = new DefaultAlarm.Builder(AlarmId.valueOf(4),
- DeviceId.NONE, nameValue, Alarm.SeverityLevel.CLEARED, 3).build();
-
+ final DefaultAlarm a = generate();
assertThat(a, is(notNullValue()));
final DefaultAlarm b = new DefaultAlarm.Builder(a).build();
-
assertEquals(a, b);
}
+
+ @Test
+ public void testEquals() {
+ final DefaultAlarm a = new DefaultAlarm.Builder(
+ DeviceId.NONE, "desc", Alarm.SeverityLevel.MINOR, 3).build();
+ final DefaultAlarm b = new DefaultAlarm.Builder(
+ DeviceId.NONE, "desc", Alarm.SeverityLevel.MINOR, a.timeRaised() + 1).
+ withId(ALARM_ID).withTimeUpdated(a.timeUpdated() + 1).build();
+ assertEquals("id or timeRaised or timeUpdated may differ", a, b);
+
+ assertNotEquals(a, new DefaultAlarm.Builder(a).withAcknowledged(!a.acknowledged()).build());
+ assertNotEquals(a, new DefaultAlarm.Builder(a).withManuallyClearable(!a.manuallyClearable()).build());
+ assertNotEquals(a, new DefaultAlarm.Builder(a).withServiceAffecting(!a.serviceAffecting()).build());
+ assertNotEquals(a, new DefaultAlarm.Builder(a).withAssignedUser("Changed" + a.assignedUser()).build());
+
+ }
+
+ @Test
+ public void testClear() {
+ final DefaultAlarm active = generate();
+ final DefaultAlarm cleared = new DefaultAlarm.Builder(active).clear().build();
+ assertNotEquals(active, cleared);
+ assertThat(cleared.timeRaised(), is(active.timeRaised()));
+ assertThat(cleared.severity(), is(Alarm.SeverityLevel.CLEARED));
+ assertThat(cleared.timeUpdated(), greaterThan(active.timeUpdated()));
+ assertNotNull(cleared.timeCleared());
+
+ }
+
+ @Test
+ public void testId() {
+ final DefaultAlarm a = generate();
+ assertThat(a.id(), is(AlarmId.NONE));
+ final DefaultAlarm b = new DefaultAlarm.Builder(a).withId(ALARM_ID).build();
+
+ assertEquals("id ignored in equals", a, b);
+ assertNotEquals(ALARM_ID, a.id());
+ assertEquals(ALARM_ID, b.id());
+ assertEquals(ALARM_ENTITY_ID, b.source());
+
+ }
+ private static final AlarmEntityId ALARM_ENTITY_ID = AlarmEntityId.alarmEntityId("port:bar");
+ private static final AlarmId ALARM_ID = AlarmId.alarmId(888L);
+
+ private static DefaultAlarm generate() {
+ return new DefaultAlarm.Builder(
+ DeviceId.NONE, "desc", Alarm.SeverityLevel.MINOR, 3).forSource(ALARM_ENTITY_ID).build();
+ }
}