[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/AlarmIdTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmIdTest.java
index 74453a4..615ccf8 100644
--- a/incubator/api/src/test/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmIdTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmIdTest.java
@@ -16,19 +16,21 @@
package org.onosproject.incubator.net.faultmanagement.alarm;
import com.google.common.testing.EqualsTester;
+import static org.hamcrest.Matchers.containsString;
import org.junit.Test;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
/**
- * This class tests the immutability, equality, and non-equality of
- * {@link AlarmId}.
+ * This class tests the immutability, equality, and non-equality of {@link AlarmId}.
*/
public class AlarmIdTest {
+
private static final long ID_A = 1L;
private static final long ID_B = 2L;
private static final long ID_Z = 987654321L;
@@ -46,28 +48,27 @@
*/
@Test
public void testEquality() {
- final AlarmId id1 = new AlarmId(ID_A);
- final AlarmId id2 = new AlarmId(ID_A);
+ final AlarmId id1 = AlarmId.alarmId(ID_A);
+ final AlarmId id2 = AlarmId.alarmId(ID_A);
assertThat(id1, is(id2));
}
-
/**
* Tests non-equality of {@link AlarmId}.
*/
@Test
public void testNonEquality() {
- final AlarmId id1 = new AlarmId(ID_A);
- final AlarmId id2 = new AlarmId(ID_B);
+ final AlarmId id1 = AlarmId.alarmId(ID_A);
+ final AlarmId id2 = AlarmId.alarmId(ID_B);
assertThat(id1, is(not(id2)));
}
@Test
public void valueOf() {
- final AlarmId id = new AlarmId(0xdeadbeefL);
- assertEquals("incorrect valueOf", id, AlarmId.valueOf(0xdeadbeefL));
+ final AlarmId id = AlarmId.alarmId(0xdeadbeefL);
+ assertEquals("incorrect valueOf", id, AlarmId.alarmId(0xdeadbeefL));
}
/**
@@ -75,9 +76,9 @@
*/
@Test
public void testEquals() {
- final AlarmId id1 = new AlarmId(11111L);
- final AlarmId sameAsId1 = new AlarmId(11111L);
- final AlarmId id2 = new AlarmId(22222L);
+ final AlarmId id1 = AlarmId.alarmId(11111L);
+ final AlarmId sameAsId1 = AlarmId.alarmId(11111L);
+ final AlarmId id2 = AlarmId.alarmId(22222L);
new EqualsTester()
.addEqualityGroup(id1, sameAsId1)
@@ -90,9 +91,18 @@
*/
@Test
public void testConstruction() {
- final AlarmId id1 = new AlarmId(ID_Z);
+ final AlarmId id1 = AlarmId.alarmId(ID_Z);
assertEquals(id1.fingerprint(), ID_Z);
// No default constructor so no need to test it !
+ assertEquals(0L, AlarmId.NONE.fingerprint());
+ try {
+ final AlarmId bad = AlarmId.alarmId(0L);
+ fail("0 is a Reserved value but we created " + bad);
+ } catch (IllegalArgumentException ex) {
+ assertThat(ex.getMessage(),
+ containsString("id must be non-zero"));
+ }
+
}
}
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();
+ }
}