Committed by
Gerrit Code Review
[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
Showing
2 changed files
with
36 additions
and
4 deletions
| ... | @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode; | ... | @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode; |
| 19 | import com.fasterxml.jackson.databind.node.ArrayNode; | 19 | import com.fasterxml.jackson.databind.node.ArrayNode; |
| 20 | import com.fasterxml.jackson.databind.node.ObjectNode; | 20 | import com.fasterxml.jackson.databind.node.ObjectNode; |
| 21 | import org.onosproject.net.DeviceId; | 21 | import org.onosproject.net.DeviceId; |
| 22 | +import org.onosproject.net.device.DeviceService; | ||
| 22 | import org.onosproject.net.meter.DefaultMeterRequest; | 23 | import org.onosproject.net.meter.DefaultMeterRequest; |
| 23 | import org.onosproject.net.meter.Meter; | 24 | import org.onosproject.net.meter.Meter; |
| 24 | import org.onosproject.net.meter.MeterId; | 25 | import org.onosproject.net.meter.MeterId; |
| ... | @@ -140,12 +141,17 @@ public class MetersWebResource extends AbstractWebResource { | ... | @@ -140,12 +141,17 @@ public class MetersWebResource extends AbstractWebResource { |
| 140 | ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); | 141 | ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); |
| 141 | JsonNode specifiedDeviceId = jsonTree.get("deviceId"); | 142 | JsonNode specifiedDeviceId = jsonTree.get("deviceId"); |
| 142 | 143 | ||
| 143 | - if (specifiedDeviceId != null && | 144 | + if ((specifiedDeviceId != null && |
| 144 | - !specifiedDeviceId.asText().equals(deviceId)) { | 145 | + !specifiedDeviceId.asText().equals(deviceId)) || |
| 146 | + get(DeviceService.class).getDevice(DeviceId.deviceId(deviceId)) | ||
| 147 | + == null) { | ||
| 145 | throw new IllegalArgumentException(DEVICE_INVALID); | 148 | throw new IllegalArgumentException(DEVICE_INVALID); |
| 146 | } | 149 | } |
| 150 | + | ||
| 147 | jsonTree.put("deviceId", deviceId); | 151 | jsonTree.put("deviceId", deviceId); |
| 148 | - final MeterRequest meterRequest = codec(MeterRequest.class).decode(jsonTree, this); | 152 | + final MeterRequest meterRequest = codec(MeterRequest.class) |
| 153 | + .decode(jsonTree, this); | ||
| 154 | + | ||
| 149 | final Meter meter = meterService.submit(meterRequest); | 155 | final Meter meter = meterService.submit(meterRequest); |
| 150 | 156 | ||
| 151 | UriBuilder locationBuilder = uriInfo.getBaseUriBuilder() | 157 | UriBuilder locationBuilder = uriInfo.getBaseUriBuilder() | ... | ... |
| ... | @@ -87,10 +87,13 @@ public class MetersResourceTest extends ResourceTest { | ... | @@ -87,10 +87,13 @@ public class MetersResourceTest extends ResourceTest { |
| 87 | final DeviceId deviceId1 = DeviceId.deviceId("1"); | 87 | final DeviceId deviceId1 = DeviceId.deviceId("1"); |
| 88 | final DeviceId deviceId2 = DeviceId.deviceId("2"); | 88 | final DeviceId deviceId2 = DeviceId.deviceId("2"); |
| 89 | final DeviceId deviceId3 = DeviceId.deviceId("3"); | 89 | final DeviceId deviceId3 = DeviceId.deviceId("3"); |
| 90 | + final DeviceId deviceId4 = DeviceId.deviceId("of:0000000000000001"); | ||
| 90 | final Device device1 = new DefaultDevice(null, deviceId1, Device.Type.OTHER, | 91 | final Device device1 = new DefaultDevice(null, deviceId1, Device.Type.OTHER, |
| 91 | "", "", "", "", null); | 92 | "", "", "", "", null); |
| 92 | final Device device2 = new DefaultDevice(null, deviceId2, Device.Type.OTHER, | 93 | final Device device2 = new DefaultDevice(null, deviceId2, Device.Type.OTHER, |
| 93 | "", "", "", "", null); | 94 | "", "", "", "", null); |
| 95 | + final Device device4 = new DefaultDevice(null, deviceId4, Device.Type.OTHER, | ||
| 96 | + "", "", "", "", null); | ||
| 94 | 97 | ||
| 95 | final MockMeter meter1 = new MockMeter(deviceId1, 1, 111, 1); | 98 | final MockMeter meter1 = new MockMeter(deviceId1, 1, 111, 1); |
| 96 | final MockMeter meter2 = new MockMeter(deviceId1, 2, 222, 2); | 99 | final MockMeter meter2 = new MockMeter(deviceId1, 2, 222, 2); |
| ... | @@ -214,8 +217,10 @@ public class MetersResourceTest extends ResourceTest { | ... | @@ -214,8 +217,10 @@ public class MetersResourceTest extends ResourceTest { |
| 214 | .andReturn(device1); | 217 | .andReturn(device1); |
| 215 | expect(mockDeviceService.getDevice(deviceId2)) | 218 | expect(mockDeviceService.getDevice(deviceId2)) |
| 216 | .andReturn(device2); | 219 | .andReturn(device2); |
| 220 | + expect(mockDeviceService.getDevice(deviceId4)) | ||
| 221 | + .andReturn(device4); | ||
| 217 | expect(mockDeviceService.getDevices()) | 222 | expect(mockDeviceService.getDevices()) |
| 218 | - .andReturn(ImmutableSet.of(device1, device2)); | 223 | + .andReturn(ImmutableSet.of(device1, device2, device4)); |
| 219 | 224 | ||
| 220 | // Mock Core Service | 225 | // Mock Core Service |
| 221 | expect(mockCoreService.getAppId(anyShort())) | 226 | expect(mockCoreService.getAppId(anyShort())) |
| ... | @@ -475,6 +480,7 @@ public class MetersResourceTest extends ResourceTest { | ... | @@ -475,6 +480,7 @@ public class MetersResourceTest extends ResourceTest { |
| 475 | mockMeterService.submit(anyObject()); | 480 | mockMeterService.submit(anyObject()); |
| 476 | expectLastCall().andReturn(meter5).anyTimes(); | 481 | expectLastCall().andReturn(meter5).anyTimes(); |
| 477 | replay(mockMeterService); | 482 | replay(mockMeterService); |
| 483 | + replay(mockDeviceService); | ||
| 478 | 484 | ||
| 479 | WebTarget wt = target(); | 485 | WebTarget wt = target(); |
| 480 | InputStream jsonStream = MetersResourceTest.class | 486 | InputStream jsonStream = MetersResourceTest.class |
| ... | @@ -489,6 +495,26 @@ public class MetersResourceTest extends ResourceTest { | ... | @@ -489,6 +495,26 @@ public class MetersResourceTest extends ResourceTest { |
| 489 | } | 495 | } |
| 490 | 496 | ||
| 491 | /** | 497 | /** |
| 498 | + * Tests creating a meter with POST, but wrong deviceID. | ||
| 499 | + */ | ||
| 500 | + @Test | ||
| 501 | + public void testPostWithWrongDevice() { | ||
| 502 | + mockMeterService.submit(anyObject()); | ||
| 503 | + expectLastCall().andReturn(meter5).anyTimes(); | ||
| 504 | + replay(mockMeterService); | ||
| 505 | + replay(mockDeviceService); | ||
| 506 | + | ||
| 507 | + WebTarget wt = target(); | ||
| 508 | + InputStream jsonStream = MetersResourceTest.class | ||
| 509 | + .getResourceAsStream("post-meter.json"); | ||
| 510 | + | ||
| 511 | + Response response = wt.path("meters/of:0000000000000002") | ||
| 512 | + .request(MediaType.APPLICATION_JSON_TYPE) | ||
| 513 | + .post(Entity.json(jsonStream)); | ||
| 514 | + assertThat(response.getStatus(), is(HttpURLConnection.HTTP_BAD_REQUEST)); | ||
| 515 | + } | ||
| 516 | + | ||
| 517 | + /** | ||
| 492 | * Tests deleting a meter. | 518 | * Tests deleting a meter. |
| 493 | */ | 519 | */ |
| 494 | @Test | 520 | @Test | ... | ... |
-
Please register or login to post a comment