use of org.opennms.netmgt.snmp.SnmpResult in project opennms by OpenNMS.
the class TableTrackerProxyTest method canHandleAValidResponse.
@Test
public void canHandleAValidResponse() {
// Build a response with an OID from the requested table
SnmpValue value = mock(SnmpValue.class);
SnmpResult result = new SnmpResult(table, SnmpInstId.INST_ZERO, value);
WalkResponse response = new WalkResponse(Collections.singletonList(result));
// Resolve the walker
tracker.handleWalkResponses(Collections.singletonList(response));
// We should be finished, and have captured the expected value
assertThat(tracker.isFinished(), equalTo(true));
assertThat(rows, hasSize(1));
assertThat(rows.get(0).getValue(table), equalTo(value));
}
use of org.opennms.netmgt.snmp.SnmpResult in project opennms by OpenNMS.
the class AggregateTrackerProxyTest method canHandleValidResponses.
@Test
public void canHandleValidResponses() {
// Build responses
SnmpValue value = mock(SnmpValue.class);
List<WalkResponse> responses = Lists.newArrayList(new WalkResponse(Collections.singletonList(new SnmpResult(baseOids[0], SnmpInstId.INST_ZERO, value)), "0-0"), new WalkResponse(Collections.singletonList(new SnmpResult(baseOids[1], SnmpInstId.INST_ZERO, value)), "0-1"), new WalkResponse(Collections.singletonList(new SnmpResult(baseOids[2], SnmpInstId.INST_ZERO, value)), "0-2"), new WalkResponse(Collections.singletonList(new SnmpResult(baseOids[3], SnmpInstId.INST_ZERO, value)), "1"));
// Resolve the walker
parentAggregateTracker.handleWalkResponses(responses);
// We should be finished, and have captured the expected results
assertThat(parentAggregateTracker.isFinished(), equalTo(true));
assertThat(gatherer.getResults(), hasSize(4));
}
use of org.opennms.netmgt.snmp.SnmpResult in project opennms by OpenNMS.
the class ColumnTrackerProxyTest method canHandleValidResponses.
@Test
public void canHandleValidResponses() {
// Build a response with the requested OID
SnmpValue value = mock(SnmpValue.class);
List<SnmpResult> results = new ArrayList<>();
results.add(new SnmpResult(base, SnmpInstId.INST_ZERO, value));
// Outside of base
results.add(new SnmpResult(SnmpObjId.get(".1.3.6.1.2.2"), SnmpInstId.INST_ZERO, null));
WalkResponse response = new WalkResponse(results);
// Resolve the walker
tracker.handleWalkResponses(Collections.singletonList(response));
// We should be finished, and have captured the expected value
assertThat(tracker.isFinished(), equalTo(true));
assertThat(gatherer.getResults(), hasSize(1));
assertThat(gatherer.getResults().get(0).getValue(), equalTo(value));
}
use of org.opennms.netmgt.snmp.SnmpResult in project opennms by OpenNMS.
the class SingleInstanceTrackerProxyTest method canHandleResponsesForOtherOids.
@Test
public void canHandleResponsesForOtherOids() {
// Build a response for another OID
SnmpValue value = mock(SnmpValue.class);
SnmpResult result = new SnmpResult(SnmpObjId.get(".1.3.6.1.2.1.1.1"), instance, value);
WalkResponse response = new WalkResponse(Collections.singletonList(result));
// Resolve the walker
tracker.handleWalkResponses(Collections.singletonList(response));
// We should be finished, without any captured values
assertThat(tracker.isFinished(), equalTo(true));
assertThat(gatherer.getResults(), hasSize(0));
}
use of org.opennms.netmgt.snmp.SnmpResult in project opennms by OpenNMS.
the class SnmpProxyRpcModule method walk.
private CompletableFuture<Collection<SnmpResponseDTO>> walk(SnmpRequestDTO request, List<SnmpWalkRequestDTO> walks) {
final CompletableFuture<Collection<SnmpResponseDTO>> future = new CompletableFuture<>();
final Map<String, SnmpResponseDTO> responsesByCorrelationId = new LinkedHashMap<>();
final List<Collectable> trackers = new ArrayList<>(walks.size());
for (final SnmpWalkRequestDTO walk : walks) {
CollectionTracker tracker;
if (walk.getInstance() != null) {
if (walk.getOids().size() != 1) {
future.completeExceptionally(new IllegalArgumentException("Single instance requests must have a single OID."));
return future;
}
final SnmpObjId oid = walk.getOids().get(0);
tracker = new SingleInstanceTracker(oid, new SnmpInstId(walk.getInstance())) {
@Override
protected void storeResult(SnmpResult res) {
addResult(res, walk.getCorrelationId(), responsesByCorrelationId);
}
};
} else {
final Collection<Collectable> columnTrackers = walk.getOids().stream().map(oid -> SnmpObjId.get(oid)).map(objId -> new ColumnTracker(objId)).collect(Collectors.toList());
tracker = new AggregateTracker(columnTrackers) {
@Override
protected void storeResult(SnmpResult res) {
addResult(res, walk.getCorrelationId(), responsesByCorrelationId);
}
};
}
if (walk.getMaxRepetitions() != null) {
tracker.setMaxRepetitions(walk.getMaxRepetitions());
}
trackers.add(tracker);
}
AggregateTracker aggregate = new AggregateTracker(trackers);
final SnmpWalker walker = SnmpUtils.createWalker(request.getAgent(), request.getDescription(), aggregate);
walker.setCallback(new SnmpWalkCallback() {
@Override
public void complete(SnmpWalker tracker, Throwable t) {
try {
if (t != null) {
future.completeExceptionally(t);
} else {
future.complete(responsesByCorrelationId.values());
}
} finally {
// Close the tracker using a separate thread
// This allows the SnmpWalker to clean up properly instead
// of interrupting execution as it's executing the callback
REAPER_EXECUTOR.submit(new Runnable() {
@Override
public void run() {
tracker.close();
}
});
}
}
});
walker.start();
return future;
}
Aggregations