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