use of org.openkilda.messaging.payload.flow.FlowEndpointPayload in project open-kilda by telstra.
the class FlowServiceImplTest method updateFlow.
@Test
public void updateFlow() throws Exception {
long updatedBandwidth = 20000L;
FlowEndpointPayload firstEndpoint = new FlowEndpointPayload(srcSwitchId, 10, 100);
FlowEndpointPayload secondEndpoint = new FlowEndpointPayload(dstSwitchId, 20, 100);
FlowPayload flowPayload = new FlowPayload(flowId, 0L, secondEndpoint, firstEndpoint, 10000L, "", "", OutputVlanType.NONE);
FlowPayload newFlowPayload = new FlowPayload(flowId, 0L, secondEndpoint, firstEndpoint, updatedBandwidth, "", "", OutputVlanType.NONE);
flowService.createFlow(flowPayload, DEFAULT_CORRELATION_ID);
flowService.updateFlow(newFlowPayload, DEFAULT_CORRELATION_ID);
Set<Flow> flows = flowRepository.findByFlowId(flowId);
assertNotNull(flows);
assertFalse(flows.isEmpty());
assertEquals(2, flows.size());
for (Flow flow : flowRepository.findAll()) {
assertEquals(flowId, flow.getFlowId());
assertEquals(updatedBandwidth, flow.getBandwidth());
}
}
use of org.openkilda.messaging.payload.flow.FlowEndpointPayload in project open-kilda by telstra.
the class FlowIgnoreBandwidthTest method flowIgnoreBandwidthBetweenSwitchesWithBandwidthIsCreated.
@When("^flow ignore bandwidth between ([0-9a-f]{2}(?::[0-9a-f]{2}){7}) and ([0-9a-f]{2}(?::[0-9a-f]{2}){7}) with (\\d+) bandwidth is created$")
public void flowIgnoreBandwidthBetweenSwitchesWithBandwidthIsCreated(String source, String dest, int bandwidth) throws InterruptedException {
String flowId = FlowUtils.getFlowName("flowId");
FlowEndpointPayload sourcePoint = new FlowEndpointPayload(source, 1, 0);
FlowEndpointPayload destPoint = new FlowEndpointPayload(dest, 2, 0);
FlowPayload requestPayload = new FlowPayload(flowId, sourcePoint, destPoint, bandwidth, true, "Flow that ignore ISL bandwidth", null);
System.out.println(String.format("==> Send flow CREATE request (%s <--> %s)", source, dest));
FlowPayload response = FlowUtils.putFlow(requestPayload);
Assert.assertNotNull(response);
response.setLastUpdated(null);
System.out.println(String.format("==> Wait till flow become \"UP\" (%s <--> %s)", source, dest));
FlowIdStatusPayload status = FlowUtils.waitFlowStatus(flowId, FlowState.UP);
assertNotNull(status);
assertEquals(FlowState.UP, status.getStatus());
saveCreatedFlowId(source, dest, flowId);
}
use of org.openkilda.messaging.payload.flow.FlowEndpointPayload in project open-kilda by telstra.
the class FlowServiceImplTest method deleteFlow.
@Test
public void deleteFlow() throws Exception {
FlowEndpointPayload firstEndpoint = new FlowEndpointPayload(srcSwitchId, 10, 100);
FlowEndpointPayload secondEndpoint = new FlowEndpointPayload(dstSwitchId, 20, 100);
FlowPayload flowPayload = new FlowPayload(flowId, 0L, secondEndpoint, firstEndpoint, 10000L, "", "", OutputVlanType.NONE);
FlowIdStatusPayload flowIdStatusPayload = new FlowIdStatusPayload(flowId);
flowService.createFlow(flowPayload, DEFAULT_CORRELATION_ID);
flowService.deleteFlow(flowIdStatusPayload, DEFAULT_CORRELATION_ID);
Set<Flow> flows = flowRepository.findByFlowId(flowId);
assertNotNull(flows);
assertTrue(flows.isEmpty());
}
use of org.openkilda.messaging.payload.flow.FlowEndpointPayload in project open-kilda by telstra.
the class FlowServiceImplTest method createFlow.
@Test
public void createFlow() throws Exception {
FlowEndpointPayload firstEndpoint = new FlowEndpointPayload(srcSwitchId, DIRECT_INCOMING_PORT, INPUT_VLAN_ID);
FlowEndpointPayload secondEndpoint = new FlowEndpointPayload(dstSwitchId, DIRECT_OUTGOING_PORT, OUTPUT_VLAN_ID);
FlowPayload flowPayload = new FlowPayload(flowId, 0L, firstEndpoint, secondEndpoint, 10000L, "", "", OutputVlanType.NONE);
flowService.createFlow(flowPayload, DEFAULT_CORRELATION_ID);
Set<Flow> flows = flowRepository.findByFlowId(flowId);
assertNotNull(flows);
assertFalse(flows.isEmpty());
assertEquals(2, flows.size());
}
use of org.openkilda.messaging.payload.flow.FlowEndpointPayload in project open-kilda by telstra.
the class FlowCrudSteps method buildFlow.
private FlowPayload buildFlow(String flowId, Switch srcSwitch, Switch destSwitch) {
// Take the switch vlan ranges as the base
RangeSet<Integer> srcRangeSet = TreeRangeSet.create();
srcSwitch.getOutPorts().forEach(port -> srcRangeSet.addAll(port.getVlanRange()));
RangeSet<Integer> destRangeSet = TreeRangeSet.create();
destSwitch.getOutPorts().forEach(port -> destRangeSet.addAll(port.getVlanRange()));
// Exclude already allocated vlans
srcRangeSet.removeAll(allocatedVlans);
destRangeSet.removeAll(allocatedVlans);
if (srcRangeSet.isEmpty() || destRangeSet.isEmpty()) {
LOGGER.warn("Unable to define a flow between {} and {} as no vlan available.", srcSwitch, destSwitch);
return null;
}
// Calculate intersection of the ranges
RangeSet<Integer> interRangeSet = TreeRangeSet.create(srcRangeSet);
interRangeSet.removeAll(destRangeSet.complement());
// Same vlan for source and destination
final Optional<Integer> sameVlan = interRangeSet.asRanges().stream().flatMap(range -> ContiguousSet.create(range, DiscreteDomain.integers()).stream()).findFirst();
int srcVlan;
int destVlan;
if (sameVlan.isPresent()) {
srcVlan = sameVlan.get();
destVlan = sameVlan.get();
} else {
// Cross vlan flow
Optional<Integer> srcVlanOpt = srcRangeSet.asRanges().stream().flatMap(range -> ContiguousSet.create(range, DiscreteDomain.integers()).stream()).findFirst();
if (!srcVlanOpt.isPresent()) {
LOGGER.warn("Unable to allocate a vlan for the switch {}.", srcSwitch);
return null;
}
srcVlan = srcVlanOpt.get();
Optional<Integer> destVlanOpt = destRangeSet.asRanges().stream().flatMap(range -> ContiguousSet.create(range, DiscreteDomain.integers()).stream()).findFirst();
if (!destVlanOpt.isPresent()) {
LOGGER.warn("Unable to allocate a vlan for the switch {}.", destSwitch);
return null;
}
destVlan = destVlanOpt.get();
}
boolean sameSwitchFlow = srcSwitch.getDpId().equals(destSwitch.getDpId());
Optional<OutPort> srcPort = srcSwitch.getOutPorts().stream().filter(p -> p.getVlanRange().contains(srcVlan)).findFirst();
int srcPortId = srcPort.orElseThrow(() -> new IllegalStateException("Unable to allocate a port in found vlan.")).getPort();
Optional<OutPort> destPort = destSwitch.getOutPorts().stream().filter(p -> p.getVlanRange().contains(destVlan)).filter(p -> !sameSwitchFlow || p.getPort() != srcPortId).findFirst();
if (!destPort.isPresent()) {
if (sameSwitchFlow) {
LOGGER.warn("Unable to define a same switch flow for {} as no ports available.", srcSwitch);
return null;
} else {
throw new IllegalStateException("Unable to allocate a port in found vlan.");
}
}
// Record used vlan to archive uniqueness
allocatedVlans.add(Range.singleton(srcVlan));
allocatedVlans.add(Range.singleton(destVlan));
FlowEndpointPayload srcEndpoint = new FlowEndpointPayload(srcSwitch.getDpId(), srcPortId, srcVlan);
FlowEndpointPayload destEndpoint = new FlowEndpointPayload(destSwitch.getDpId(), destPort.get().getPort(), destVlan);
return new FlowPayload(flowId, srcEndpoint, destEndpoint, 1, false, flowId, null);
}
Aggregations