[ONOS-5324] Issue with Meter POST Rest API
- ConsistentMapException while POST a Meter With non existent DeviceId
Changes
1. added DeviceID check mechanism to confirm
the requested ID refers an available device.
2. Changed MeterResourceTest to address
a specific deviceID (of:0000000000000001)
Change-Id: I9ce70a73dc03e9e7516e8aaff3895a66f3b69b13
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
index ffb9149..8fa660e 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
@@ -19,6 +19,7 @@
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.device.DeviceService;
import org.onosproject.net.meter.DefaultMeterRequest;
import org.onosproject.net.meter.Meter;
import org.onosproject.net.meter.MeterId;
@@ -140,12 +141,17 @@
ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream);
JsonNode specifiedDeviceId = jsonTree.get("deviceId");
- if (specifiedDeviceId != null &&
- !specifiedDeviceId.asText().equals(deviceId)) {
+ if ((specifiedDeviceId != null &&
+ !specifiedDeviceId.asText().equals(deviceId)) ||
+ get(DeviceService.class).getDevice(DeviceId.deviceId(deviceId))
+ == null) {
throw new IllegalArgumentException(DEVICE_INVALID);
}
+
jsonTree.put("deviceId", deviceId);
- final MeterRequest meterRequest = codec(MeterRequest.class).decode(jsonTree, this);
+ final MeterRequest meterRequest = codec(MeterRequest.class)
+ .decode(jsonTree, this);
+
final Meter meter = meterService.submit(meterRequest);
UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()