use of org.onosproject.net.intent.constraint.ObstacleConstraint in project onos by opennetworkinglab.
the class EncodeConstraintCodecHelper method encodeObstacleConstraint.
/**
* Encodes an obstacle constraint.
*
* @return JSON ObjectNode representing the constraint
*/
private ObjectNode encodeObstacleConstraint() {
checkNotNull(constraint, "Obstacle constraint cannot be null");
final ObstacleConstraint obstacleConstraint = (ObstacleConstraint) constraint;
final ObjectNode result = context.mapper().createObjectNode();
final ArrayNode jsonObstacles = result.putArray("obstacles");
for (DeviceId did : obstacleConstraint.obstacles()) {
jsonObstacles.add(did.toString());
}
return result;
}
use of org.onosproject.net.intent.constraint.ObstacleConstraint in project onos by opennetworkinglab.
the class ConstraintCodecTest method obstacleConstraint.
/**
* Tests obstacle constraint.
*/
@Test
public void obstacleConstraint() {
Constraint constraint = getConstraint("ObstacleConstraint.json");
assertThat(constraint, instanceOf(ObstacleConstraint.class));
ObstacleConstraint obstacleConstraint = (ObstacleConstraint) constraint;
assertThat(obstacleConstraint.obstacles(), hasItem(did("dev1")));
assertThat(obstacleConstraint.obstacles(), hasItem(did("dev2")));
assertThat(obstacleConstraint.obstacles(), hasItem(did("dev3")));
}
use of org.onosproject.net.intent.constraint.ObstacleConstraint in project onos by opennetworkinglab.
the class IntentCodecTest method intentWithTreatmentSelectorAndConstraints.
/**
* Tests the encoding of an intent with treatment, selector and constraints
* specified.
*/
@Test
public void intentWithTreatmentSelectorAndConstraints() {
ConnectPoint ingress = NetTestTools.connectPoint("ingress", 1);
ConnectPoint egress = NetTestTools.connectPoint("egress", 2);
DeviceId did1 = did("device1");
DeviceId did2 = did("device2");
DeviceId did3 = did("device3");
Lambda ochSignal = Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_100GHZ, 4, 8);
final TrafficSelector selector = DefaultTrafficSelector.builder().matchIPProtocol((byte) 3).matchMplsLabel(MplsLabel.mplsLabel(4)).add(Criteria.matchOchSignalType(OchSignalType.FIXED_GRID)).add(Criteria.matchLambda(ochSignal)).matchEthDst(MacAddress.BROADCAST).matchIPDst(IpPrefix.valueOf("1.2.3.4/24")).build();
final TrafficTreatment treatment = DefaultTrafficTreatment.builder().setMpls(MplsLabel.mplsLabel(44)).setOutput(PortNumber.CONTROLLER).setEthDst(MacAddress.BROADCAST).build();
final List<Constraint> constraints = ImmutableList.of(new BandwidthConstraint(Bandwidth.bps(1.0)), new AnnotationConstraint("key", 33.0), new AsymmetricPathConstraint(), new LatencyConstraint(Duration.ofSeconds(2)), new ObstacleConstraint(did1, did2), new WaypointConstraint(did3));
final PointToPointIntent intent = PointToPointIntent.builder().appId(appId).selector(selector).treatment(treatment).filteredIngressPoint(new FilteredConnectPoint(ingress)).filteredEgressPoint(new FilteredConnectPoint(egress)).constraints(constraints).build();
final JsonCodec<PointToPointIntent> intentCodec = context.codec(PointToPointIntent.class);
assertThat(intentCodec, notNullValue());
final ObjectNode intentJson = intentCodec.encode(intent, context);
assertThat(intentJson, matchesIntent(intent));
}
use of org.onosproject.net.intent.constraint.ObstacleConstraint in project onos by opennetworkinglab.
the class DecodeConstraintCodecHelper method decodeObstacleConstraint.
/**
* Decodes an obstacle constraint.
*
* @return obstacle constraint object.
*/
private Constraint decodeObstacleConstraint() {
JsonNode obstacles = nullIsIllegal(json.get(ConstraintCodec.OBSTACLES), ConstraintCodec.OBSTACLES + ConstraintCodec.MISSING_MEMBER_MESSAGE);
if (obstacles.size() < 1) {
throw new IllegalArgumentException("obstacles array in obstacles constraint must have at least one value");
}
ArrayList<DeviceId> obstacleEntries = new ArrayList<>(obstacles.size());
IntStream.range(0, obstacles.size()).forEach(index -> obstacleEntries.add(DeviceId.deviceId(obstacles.get(index).asText())));
return new ObstacleConstraint(obstacleEntries.toArray(new DeviceId[obstacles.size()]));
}
use of org.onosproject.net.intent.constraint.ObstacleConstraint in project onos by opennetworkinglab.
the class EncodeConstraintCodecHelper method encode.
/**
* Encodes the constraint in JSON.
*
* @return JSON node
*/
public ObjectNode encode() {
final ObjectNode result;
if (constraint instanceof BandwidthConstraint) {
result = encodeBandwidthConstraint();
} else if (constraint instanceof LinkTypeConstraint) {
result = encodeLinkTypeConstraint();
} else if (constraint instanceof AnnotationConstraint) {
result = encodeAnnotationConstraint();
} else if (constraint instanceof LatencyConstraint) {
result = encodeLatencyConstraint();
} else if (constraint instanceof ObstacleConstraint) {
result = encodeObstacleConstraint();
} else if (constraint instanceof WaypointConstraint) {
result = encodeWaypointConstraint();
} else if (constraint instanceof MeteredConstraint) {
result = encodeMeteredConstraint();
} else if (constraint instanceof TierConstraint) {
result = encodeTierConstraint();
} else {
result = context.mapper().createObjectNode();
}
result.put(ConstraintCodec.TYPE, constraint.getClass().getSimpleName());
return result;
}
Aggregations