use of org.openkilda.messaging.info.network.PathsInfoData in project open-kilda by telstra.
the class PathsServiceTest method findNPathsByTransitVlanAndTooSmallMaxLatencyEnoughTier2Latency.
@Test
public void findNPathsByTransitVlanAndTooSmallMaxLatencyEnoughTier2Latency() throws SwitchNotFoundException, RecoverableException, UnroutableFlowException {
Duration maxLatencyTier2 = Duration.ofNanos(MIN_LATENCY * 2 + 1);
List<PathsInfoData> paths = pathsService.getPaths(SWITCH_ID_1, SWITCH_ID_2, TRANSIT_VLAN, MAX_LATENCY, Duration.ofNanos(1L), maxLatencyTier2);
assertMaxLatencyPaths(paths, maxLatencyTier2, 1, TRANSIT_VLAN);
}
use of org.openkilda.messaging.info.network.PathsInfoData in project open-kilda by telstra.
the class PathsServiceTest method assertMaxLatencyPaths.
private void assertMaxLatencyPaths(List<PathsInfoData> paths, Duration maxLatency, long expectedCount, FlowEncapsulationType encapsulationType) {
assertEquals(expectedCount, paths.size());
assertPathLength(paths);
for (PathsInfoData path : paths) {
assertTrue(path.getPath().getLatency().minus(maxLatency).isNegative());
Optional<SwitchProperties> properties = switchPropertiesRepository.findBySwitchId(path.getPath().getNodes().get(1).getSwitchId());
assertTrue(properties.isPresent());
assertTrue(properties.get().getSupportedTransitEncapsulation().contains(encapsulationType));
}
}
use of org.openkilda.messaging.info.network.PathsInfoData in project open-kilda by telstra.
the class PathsServiceTest method findNPathsByVxlanAndEnoughMaxLatencyZeroTier2Latency.
@Test
public void findNPathsByVxlanAndEnoughMaxLatencyZeroTier2Latency() throws SwitchNotFoundException, RecoverableException, UnroutableFlowException {
Duration maxLatency = Duration.ofNanos(MIN_LATENCY * 2 + 1);
List<PathsInfoData> paths = pathsService.getPaths(SWITCH_ID_1, SWITCH_ID_2, VXLAN, MAX_LATENCY, maxLatency, Duration.ZERO);
assertMaxLatencyPaths(paths, maxLatency, 1, VXLAN);
}
use of org.openkilda.messaging.info.network.PathsInfoData in project open-kilda by telstra.
the class PathsServiceTest method assertPathLength.
private void assertPathLength(List<PathsInfoData> paths) {
for (PathsInfoData path : paths) {
assertEquals(3, path.getPath().getNodes().size());
assertEquals(SWITCH_ID_1, path.getPath().getNodes().get(0).getSwitchId());
assertEquals(SWITCH_ID_2, path.getPath().getNodes().get(2).getSwitchId());
}
}
use of org.openkilda.messaging.info.network.PathsInfoData in project open-kilda by telstra.
the class PathsService method getPaths.
/**
* Get paths.
*/
public List<PathsInfoData> getPaths(SwitchId srcSwitchId, SwitchId dstSwitchId, FlowEncapsulationType requestEncapsulationType, PathComputationStrategy requestPathComputationStrategy, Duration maxLatency, Duration maxLatencyTier2) throws RecoverableException, SwitchNotFoundException, UnroutableFlowException {
if (Objects.equals(srcSwitchId, dstSwitchId)) {
throw new IllegalArgumentException(String.format("Source and destination switch IDs are equal: '%s'", srcSwitchId));
}
if (!switchRepository.exists(srcSwitchId)) {
throw new SwitchNotFoundException(srcSwitchId);
}
if (!switchRepository.exists(dstSwitchId)) {
throw new SwitchNotFoundException(dstSwitchId);
}
KildaConfiguration kildaConfiguration = kildaConfigurationRepository.getOrDefault();
FlowEncapsulationType flowEncapsulationType = Optional.ofNullable(requestEncapsulationType).orElse(kildaConfiguration.getFlowEncapsulationType());
SwitchProperties srcProperties = switchPropertiesRepository.findBySwitchId(srcSwitchId).orElseThrow(() -> new SwitchPropertiesNotFoundException(srcSwitchId));
if (!srcProperties.getSupportedTransitEncapsulation().contains(flowEncapsulationType)) {
throw new IllegalArgumentException(String.format("Switch %s doesn't support %s encapslation type. Choose " + "one of the supported encapsulation types %s or update switch properties and add needed " + "encapsulation type.", srcSwitchId, flowEncapsulationType, srcProperties.getSupportedTransitEncapsulation()));
}
SwitchProperties dstProperties = switchPropertiesRepository.findBySwitchId(dstSwitchId).orElseThrow(() -> new SwitchPropertiesNotFoundException(dstSwitchId));
if (!dstProperties.getSupportedTransitEncapsulation().contains(flowEncapsulationType)) {
throw new IllegalArgumentException(String.format("Switch %s doesn't support %s encapslation type. Choose " + "one of the supported encapsulation types %s or update switch properties and add needed " + "encapsulation type.", dstSwitchId, requestEncapsulationType, dstProperties.getSupportedTransitEncapsulation()));
}
PathComputationStrategy pathComputationStrategy = Optional.ofNullable(requestPathComputationStrategy).orElse(kildaConfiguration.getPathComputationStrategy());
List<Path> flowPaths = pathComputer.getNPaths(srcSwitchId, dstSwitchId, MAX_PATH_COUNT, flowEncapsulationType, pathComputationStrategy, maxLatency, maxLatencyTier2);
return flowPaths.stream().map(PathMapper.INSTANCE::map).map(path -> PathsInfoData.builder().path(path).build()).collect(Collectors.toList());
}
Aggregations