use of org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session in project bgpcep by opendaylight.
the class TopologyStatsRpcServiceImpl method getStats.
@Override
public ListenableFuture<RpcResult<GetStatsOutput>> getStats(final GetStatsInput input) {
final var iTopologies = input.getTopology();
final List<TopologyId> iTopologyIds;
if (iTopologies != null) {
iTopologyIds = iTopologies.values().stream().map(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.Topology::getTopologyId).collect(Collectors.toList());
} else {
iTopologyIds = getAvailableTopologyIds();
}
return Futures.immediateFuture(SuccessfulRpcResult.create(new GetStatsOutputBuilder().setTopology(iTopologyIds.stream().map(iTopologyId -> {
final Collection<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.topology.Node> iNodes;
if (iTopologies != null) {
final var nodes = iTopologies.values().stream().filter(t -> iTopologyId.equals(t.getTopologyId())).findFirst().get().getNode();
iNodes = nodes != null ? nodes.values() : null;
} else {
iNodes = null;
}
final List<NodeId> iNodeIds;
if (iNodes != null) {
iNodeIds = iNodes.stream().map(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.input.topology.Node::getNodeId).collect(Collectors.toList());
} else {
iNodeIds = getAvailableNodeIds(iTopologyId);
}
return new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.TopologyBuilder().setTopologyId(iTopologyId).setNode(iNodeIds.stream().map(iNodeId -> {
final PcepSessionState state = sessionStateMap.get(InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class, new TopologyKey(iTopologyId)).child(Node.class, new NodeKey(iNodeId)).augmentation(PcepTopologyNodeStatsAug.class).child(PcepSessionState.class).build());
if (state == null) {
LOG.debug("Pcep session stats not available for node {} in topology {}", iNodeId.getValue(), iTopologyId.getValue());
}
return new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.topology.stats.rpc.rev190321.get.stats.output.topology.NodeBuilder().setNodeId(iNodeId).setPcepSessionState(transformStatefulAugmentation(state)).build();
}).collect(BindingMap.toOrderedMap())).build();
}).collect(BindingMap.toOrderedMap())).build()));
}
use of org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session in project bgpcep by opendaylight.
the class PCEPTopologySessionListenerTest method testDuplicatedSession.
/**
* When a session is somehow duplicated in controller, the controller should drop existing session.
*/
@Test
public void testDuplicatedSession() throws ExecutionException, InterruptedException {
listener.onSessionUp(session);
// create node
topologyRpcs.addLsp(createAddLspInput());
final Pcinitiate pcinitiate = (Pcinitiate) receivedMsgs.get(0);
final Requests req = pcinitiate.getPcinitiateMessage().getRequests().get(0);
final Uint32 srpId = req.getSrp().getOperationId().getValue();
final Tlvs tlvs = createLspTlvs(req.getLsp().getPlspId().getValue(), true, testAddress, testAddress, testAddress, Optional.empty());
final Pcrpt pcRpt = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req.getLsp()).setTlvs(tlvs).setSync(TRUE).setRemove(FALSE).setOperational(OperationalStatus.Active).build(), Optional.of(MsgBuilderUtil.createSrp(srpId)), MsgBuilderUtil.createPath(req.getEro().getSubobject()));
listener.onMessage(session, pcRpt);
readDataOperational(getDataBroker(), TOPO_IID, topology -> {
assertEquals(1, topology.nonnullNode().size());
return topology;
});
// now we do session up again
listener.onSessionUp(session);
assertTrue(session.isClosed());
// node should be removed after termination
checkNotPresentOperational(getDataBroker(), pathComputationClientIId);
assertFalse(receivedMsgs.isEmpty());
// the last message should be a Close message
assertTrue(receivedMsgs.get(receivedMsgs.size() - 1) instanceof Close);
}
use of org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session in project bgpcep by opendaylight.
the class PCEPTopologySessionListenerTest method testOnSessionTermination.
@Test
public void testOnSessionTermination() throws Exception {
listener.onSessionUp(session);
// create node
topologyRpcs.addLsp(createAddLspInput());
final Pcinitiate pcinitiate = (Pcinitiate) receivedMsgs.get(0);
final Requests req = pcinitiate.getPcinitiateMessage().getRequests().get(0);
final Uint32 srpId = req.getSrp().getOperationId().getValue();
final Tlvs tlvs = createLspTlvs(req.getLsp().getPlspId().getValue(), true, testAddress, testAddress, testAddress, Optional.empty());
final Pcrpt pcRpt = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req.getLsp()).setTlvs(tlvs).setSync(TRUE).setRemove(FALSE).setOperational(OperationalStatus.Active).build(), Optional.of(MsgBuilderUtil.createSrp(srpId)), MsgBuilderUtil.createPath(req.getEro().getSubobject()));
listener.onMessage(session, pcRpt);
readDataOperational(getDataBroker(), TOPO_IID, topology -> {
assertEquals(1, topology.nonnullNode().size());
return topology;
});
assertFalse(session.isClosed());
// node should be removed after termination
listener.onSessionTerminated(session, new PCEPCloseTermination(TerminationReason.UNKNOWN));
assertTrue(session.isClosed());
checkNotPresentOperational(getDataBroker(), pathComputationClientIId);
}
use of org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session in project bgpcep by opendaylight.
the class PCEPTopologySessionListenerTest method testPCEPTopologySessionListener.
@Test
public void testPCEPTopologySessionListener() throws Exception {
listener.onSessionUp(session);
final PcepSessionState listenerState = listener.listenerState;
assertEquals(testAddress, listenerState.getPeerPref().getIpAddress());
final LocalPref state = listener.listenerState.getLocalPref();
assertNotNull(state);
assertEquals(DEAD_TIMER, state.getDeadtimer().shortValue());
assertEquals(KEEP_ALIVE, state.getKeepalive().shortValue());
assertEquals(0, state.getSessionId().intValue());
assertEquals(testAddress, state.getIpAddress());
final PeerPref peerState = listenerState.getPeerPref();
assertEquals(DEAD_TIMER, peerState.getDeadtimer().shortValue());
assertEquals(KEEP_ALIVE, peerState.getKeepalive().shortValue());
assertEquals(0, peerState.getSessionId().intValue());
assertEquals(testAddress, peerState.getIpAddress());
// add-lsp
topologyRpcs.addLsp(createAddLspInput());
assertEquals(1, receivedMsgs.size());
assertTrue(receivedMsgs.get(0) instanceof Pcinitiate);
final Pcinitiate pcinitiate = (Pcinitiate) receivedMsgs.get(0);
final Requests req = pcinitiate.getPcinitiateMessage().getRequests().get(0);
final Uint32 srpId = req.getSrp().getOperationId().getValue();
final Tlvs tlvs = createLspTlvs(req.getLsp().getPlspId().getValue(), true, testAddress, testAddress, testAddress, Optional.empty());
final Pcrpt pcRpt = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req.getLsp()).setTlvs(tlvs).setPlspId(new PlspId(Uint32.ONE)).setSync(FALSE).setRemove(FALSE).setOperational(OperationalStatus.Active).build(), Optional.of(MsgBuilderUtil.createSrp(srpId)), MsgBuilderUtil.createPath(req.getEro().getSubobject()));
final Pcrpt esm = MsgBuilderUtil.createPcRtpMessage(new LspBuilder().setSync(FALSE).build(), Optional.of(MsgBuilderUtil.createSrp(Uint32.ZERO)), null);
listener.onMessage(session, esm);
readDataOperational(getDataBroker(), pathComputationClientIId, pcc -> {
assertEquals(testAddress, pcc.getIpAddress().getIpv4AddressNoZone().getValue());
// reported lsp so far empty, has not received response (PcRpt) yet
assertNull(pcc.getReportedLsp());
return pcc;
});
listener.onMessage(session, pcRpt);
// check created lsp
readDataOperational(getDataBroker(), pathComputationClientIId, pcc -> {
assertEquals(1, pcc.nonnullReportedLsp().size());
final ReportedLsp reportedLsp = pcc.getReportedLsp().values().iterator().next();
assertEquals(tunnelName, reportedLsp.getName());
assertEquals(1, reportedLsp.nonnullPath().size());
final Path path = reportedLsp.nonnullPath().values().iterator().next();
assertEquals(1, path.getEro().getSubobject().size());
assertEquals(eroIpPrefix, getLastEroIpPrefix(path.getEro()));
return pcc;
});
// check stats
checkEquals(() -> assertEquals(1, listenerState.getDelegatedLspsCount().intValue()));
checkEquals(() -> assertTrue(listener.isSessionSynchronized()));
checkEquals(() -> assertTrue(listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class).getLastReceivedRptMsgTimestamp().toJava() > 0));
checkEquals(() -> assertEquals(2, listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class).getReceivedRptMsgCount().intValue()));
checkEquals(() -> assertEquals(1, listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class).getSentInitMsgCount().intValue()));
checkEquals(() -> assertEquals(0, listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class).getSentUpdMsgCount().intValue()));
// update-lsp
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.update.lsp.args.ArgumentsBuilder updArgsBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.update.lsp.args.ArgumentsBuilder();
updArgsBuilder.setEro(createEroWithIpPrefixes(Lists.newArrayList(eroIpPrefix, dstIpPrefix)));
updArgsBuilder.addAugmentation(new Arguments3Builder().setLsp(new LspBuilder().setDelegate(TRUE).setAdministrative(FALSE).build()).build());
final UpdateLspInput update = new UpdateLspInputBuilder().setArguments(updArgsBuilder.build()).setName(tunnelName).setNetworkTopologyRef(new NetworkTopologyRef(TOPO_IID)).setNode(nodeId).build();
topologyRpcs.updateLsp(update);
assertEquals(2, receivedMsgs.size());
assertTrue(receivedMsgs.get(1) instanceof Pcupd);
final Pcupd updateMsg = (Pcupd) receivedMsgs.get(1);
final Updates upd = updateMsg.getPcupdMessage().getUpdates().get(0);
final Uint32 srpId2 = upd.getSrp().getOperationId().getValue();
final Tlvs tlvs2 = createLspTlvs(upd.getLsp().getPlspId().getValue(), false, newDestinationAddress, testAddress, testAddress, Optional.empty());
final Pcrpt pcRpt2 = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(upd.getLsp()).setTlvs(tlvs2).setSync(TRUE).setRemove(FALSE).setOperational(OperationalStatus.Active).build(), Optional.of(MsgBuilderUtil.createSrp(srpId2)), MsgBuilderUtil.createPath(upd.getPath().getEro().getSubobject()));
listener.onMessage(session, pcRpt2);
// check updated lsp
readDataOperational(getDataBroker(), pathComputationClientIId, pcc -> {
assertEquals(1, pcc.getReportedLsp().size());
final ReportedLsp reportedLsp = pcc.getReportedLsp().values().iterator().next();
assertEquals(tunnelName, reportedLsp.getName());
assertEquals(1, reportedLsp.getPath().size());
final Path path = reportedLsp.getPath().values().iterator().next();
assertEquals(2, path.getEro().getSubobject().size());
assertEquals(dstIpPrefix, getLastEroIpPrefix(path.getEro()));
assertEquals(1, listenerState.getDelegatedLspsCount().intValue());
assertTrue(listener.isSessionSynchronized());
final StatefulMessagesStatsAug statefulstate = listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class);
assertTrue(statefulstate.getLastReceivedRptMsgTimestamp().toJava() > 0);
assertEquals(3, statefulstate.getReceivedRptMsgCount().intValue());
assertEquals(1, statefulstate.getSentInitMsgCount().intValue());
assertEquals(1, statefulstate.getSentUpdMsgCount().intValue());
final ReplyTime replyTime = listenerState.getMessages().getReplyTime();
assertTrue(replyTime.getAverageTime().toJava() > 0);
assertTrue(replyTime.getMaxTime().toJava() > 0);
final StatefulCapabilitiesStatsAug statefulCapabilities = listenerState.getPeerCapabilities().augmentation(StatefulCapabilitiesStatsAug.class);
assertFalse(statefulCapabilities.getActive());
assertTrue(statefulCapabilities.getInstantiation());
assertTrue(statefulCapabilities.getStateful());
return pcc;
});
// ensure-operational
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.ensure.lsp.operational.args.ArgumentsBuilder ensureArgs = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.pcep.rev200120.ensure.lsp.operational.args.ArgumentsBuilder();
ensureArgs.addAugmentation(new Arguments1Builder().setOperational(OperationalStatus.Active).build());
final EnsureLspOperationalInput ensure = new EnsureLspOperationalInputBuilder().setArguments(ensureArgs.build()).setName(tunnelName).setNetworkTopologyRef(new NetworkTopologyRef(TOPO_IID)).setNode(nodeId).build();
final OperationResult result = topologyRpcs.ensureLspOperational(ensure).get().getResult();
// check result
assertNull(result.getFailure());
// remove-lsp
final RemoveLspInput remove = new RemoveLspInputBuilder().setName(tunnelName).setNetworkTopologyRef(new NetworkTopologyRef(TOPO_IID)).setNode(nodeId).build();
topologyRpcs.removeLsp(remove);
assertEquals(3, receivedMsgs.size());
assertTrue(receivedMsgs.get(2) instanceof Pcinitiate);
final Pcinitiate pcinitiate2 = (Pcinitiate) receivedMsgs.get(2);
final Requests req2 = pcinitiate2.getPcinitiateMessage().getRequests().get(0);
final Uint32 srpId3 = req2.getSrp().getOperationId().getValue();
final Tlvs tlvs3 = createLspTlvs(req2.getLsp().getPlspId().getValue(), false, testAddress, testAddress, testAddress, Optional.empty());
final Pcrpt pcRpt3 = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req2.getLsp()).setTlvs(tlvs3).setRemove(TRUE).setSync(TRUE).setOperational(OperationalStatus.Down).build(), Optional.of(MsgBuilderUtil.createSrp(srpId3)), MsgBuilderUtil.createPath(Collections.emptyList()));
listener.onMessage(session, pcRpt3);
// check if lsp was removed
readDataOperational(getDataBroker(), pathComputationClientIId, pcc -> {
assertNull(pcc.getReportedLsp());
return pcc;
});
// check stats
checkEquals(() -> assertEquals(0, listenerState.getDelegatedLspsCount().intValue()));
checkEquals(() -> assertTrue(listener.isSessionSynchronized()));
checkEquals(() -> assertTrue(listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class).getLastReceivedRptMsgTimestamp().toJava() > 0));
checkEquals(() -> assertEquals(4, listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class).getReceivedRptMsgCount().intValue()));
checkEquals(() -> assertEquals(2, listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class).getSentInitMsgCount().intValue()));
checkEquals(() -> assertEquals(1, listenerState.getMessages().augmentation(StatefulMessagesStatsAug.class).getSentUpdMsgCount().intValue()));
}
use of org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.netconf.state.sessions.Session in project bgpcep by opendaylight.
the class PCEPTopologySessionListenerTest method testDelegatedLspsCountWithoutDelegation.
@Test
public void testDelegatedLspsCountWithoutDelegation() throws Exception {
listener.onSessionUp(session);
topologyRpcs.addLsp(createAddLspInput());
assertEquals(1, receivedMsgs.size());
assertTrue(receivedMsgs.get(0) instanceof Pcinitiate);
final Pcinitiate pcinitiate = (Pcinitiate) receivedMsgs.get(0);
final Requests req = pcinitiate.getPcinitiateMessage().getRequests().get(0);
final Uint32 srpId = req.getSrp().getOperationId().getValue();
final Tlvs tlvs = createLspTlvs(req.getLsp().getPlspId().getValue(), true, testAddress, testAddress, testAddress, Optional.empty());
// delegate set to false
final Pcrpt pcRpt = MsgBuilderUtil.createPcRtpMessage(new LspBuilder(req.getLsp()).setTlvs(tlvs).setPlspId(new PlspId(Uint32.ONE)).setSync(FALSE).setRemove(FALSE).setOperational(OperationalStatus.Active).setDelegate(FALSE).build(), Optional.of(MsgBuilderUtil.createSrp(srpId)), MsgBuilderUtil.createPath(req.getEro().getSubobject()));
listener.onMessage(session, pcRpt);
checkEquals(() -> assertEquals(0, listener.listenerState.getDelegatedLspsCount().intValue()));
}
Aggregations