use of org.opennms.netmgt.bsm.mock.MockBusinessServiceHierarchy in project opennms by OpenNMS.
the class BusinessServiceGraphImplTest method canCalculateVertexLevel.
@Test
public void canCalculateVertexLevel() {
/**
* Creates a graph that looks like:
* B1 B5 B6 B7
* | / /
* B2 / /
* | / /
* B3 /
* | /
* B4
*/
MockBusinessServiceHierarchy h = MockBusinessServiceHierarchy.builder().withBusinessService(1).withBusinessService(2).withBusinessService(3).withBusinessService(4).commit().commit().commit().commit().withBusinessService(5).withBusinessService(3).commit().commit().withBusinessService(6).withBusinessService(4).commit().commit().withBusinessService(7).commit().build();
List<BusinessService> businessServices = h.getBusinessServices();
// Quick sanity check of the generated hierarchy
assertEquals(7, businessServices.size());
assertEquals(1, h.getBusinessServiceById(3).getEdges().size());
// Create the graph
BusinessServiceGraph graph = new BusinessServiceGraphImpl(h.getBusinessServices());
// Verify the services at every level
Map<Integer, Set<BusinessService>> servicesByLevel = Maps.newTreeMap();
servicesByLevel.put(0, Sets.newHashSet(h.getBusinessServiceById(1), h.getBusinessServiceById(5), h.getBusinessServiceById(6), h.getBusinessServiceById(7)));
servicesByLevel.put(1, Sets.newHashSet(h.getBusinessServiceById(2)));
servicesByLevel.put(2, Sets.newHashSet(h.getBusinessServiceById(3)));
servicesByLevel.put(3, Sets.newHashSet(h.getBusinessServiceById(4)));
servicesByLevel.put(4, Sets.newHashSet());
for (Entry<Integer, Set<BusinessService>> entry : servicesByLevel.entrySet()) {
int level = entry.getKey();
Set<BusinessService> servicesAtLevel = graph.getVerticesByLevel(level).stream().filter(// Used to verify the level on the actual vertex
v -> v.getLevel() == level).map(v -> v.getBusinessService()).collect(Collectors.toSet());
assertEquals(String.format("Mismatch at level %d", level), entry.getValue(), servicesAtLevel);
}
}
use of org.opennms.netmgt.bsm.mock.MockBusinessServiceHierarchy in project opennms by OpenNMS.
the class RootCauseAnalysisTest method canEfficientlyPerformRootCauseAnalysis.
/**
* Verifies that the RCA and IA algorithms can be performed
* against business services that reference 100+ reduction keys.
*
* See NMS-8527 for details.
*/
@Test(timeout = 10000)
public void canEfficientlyPerformRootCauseAnalysis() {
final int NUMBER_OF_REDUCTION_KEYS_PER_BS = 2500;
HighestSeverity highestSeverity = new HighestSeverity();
BusinessServiceBuilder builder = MockBusinessServiceHierarchy.builder().withBusinessService(1).withName("b1").withReductionFunction(highestSeverity);
for (int i = 0; i < NUMBER_OF_REDUCTION_KEYS_PER_BS; i++) {
builder.withReductionKey(i, "a" + i);
}
MockBusinessServiceHierarchy h = builder.commit().build();
// Setup the state machine
DefaultBusinessServiceStateMachine stateMachine = new DefaultBusinessServiceStateMachine();
stateMachine.setBusinessServices(h.getBusinessServices());
// Bump b1 to MINOR, cause by a1
stateMachine.handleNewOrUpdatedAlarm(new MockAlarmWrapper("a1", Status.MINOR));
// Verify the state
assertEquals(Status.MINOR, stateMachine.getOperationalStatus(h.getBusinessServiceById(1)));
// Calculate and verify the root cause, b1 caused by a1
List<GraphVertex> causedby = stateMachine.calculateRootCause(h.getBusinessServiceById(1));
assertEquals(1, causedby.size());
assertEquals("a1", causedby.get(0).getReductionKey());
// Now calculate the impact, a1 impacts b1
List<GraphVertex> impacts = stateMachine.calculateImpact("a1");
assertEquals(1, impacts.size());
assertEquals("b1", impacts.get(0).getBusinessService().getName());
}
Aggregations