Fix for ONOS-5566:Issue With Region POST-DELETE REST API:Incorporated Comments
Change-Id: Id14480f26e02b87fab3e3c6a0b9f111d9477c3ac
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
index c17683c..cc6444a 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/RegionsWebResource.java
@@ -193,11 +193,13 @@
@Produces(MediaType.APPLICATION_JSON)
public Response addDevices(@PathParam("regionId") String regionId,
InputStream stream) {
- final RegionId rid = RegionId.regionId(regionId);
+ RegionId rid = RegionId.regionId(regionId);
+ Region region = nullIsNotFound(regionService.getRegion(rid),
+ REGION_NOT_FOUND + rid);
URI location;
try {
- regionAdminService.addDevices(rid, extractDeviceIds(stream));
+ regionAdminService.addDevices(region.id(), extractDeviceIds(stream));
location = new URI(rid.id());
} catch (IOException | URISyntaxException e) {
throw new IllegalArgumentException(e);
@@ -219,7 +221,9 @@
@Consumes(MediaType.APPLICATION_JSON)
public Response removeDevices(@PathParam("regionId") String regionId,
InputStream stream) {
- final RegionId rid = RegionId.regionId(regionId);
+ RegionId rid = RegionId.regionId(regionId);
+ Region region = nullIsNotFound(regionService.getRegion(rid),
+ REGION_NOT_FOUND + rid);
try {
regionAdminService.removeDevices(rid, extractDeviceIds(stream));
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/RegionsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/RegionsResourceTest.java
index 574f7e0..a00edc8 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/RegionsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/RegionsResourceTest.java
@@ -422,6 +422,26 @@
}
/**
+ * Tests creating a flow with POST.
+ */
+ @Test
+ public void testAddDevicesPostWithoutRegion() {
+ expect(mockRegionService.getRegion(anyObject())).andReturn(null).anyTimes();
+ replay(mockRegionService);
+
+ WebTarget wt = target();
+ InputStream jsonStream = RegionsResourceTest.class
+ .getResourceAsStream("region-deviceIds.json");
+
+ Response response = wt.path("regions/" + region1.id() + "/devices")
+ .request(MediaType.APPLICATION_JSON_TYPE)
+ .post(Entity.json(jsonStream));
+ assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NOT_FOUND));
+
+ verify(mockRegionService);
+ }
+
+ /**
* Tests adding a set of devices in region with POST.
*/
@Test
@@ -430,12 +450,14 @@
expectLastCall();
replay(mockRegionAdminService);
+ expect(mockRegionService.getRegion(anyObject())).andReturn(region1).anyTimes();
+ replay(mockRegionService);
+
WebTarget wt = target();
InputStream jsonStream = RegionsResourceTest.class
.getResourceAsStream("region-deviceIds.json");
- Response response = wt.path("regions/" +
- region1.id().toString() + "/devices")
+ Response response = wt.path("regions/" + region1.id().toString() + "/devices")
.request(MediaType.APPLICATION_JSON_TYPE)
.post(Entity.json(jsonStream));
assertThat(response.getStatus(), is(HttpURLConnection.HTTP_CREATED));
@@ -452,6 +474,8 @@
expectLastCall();
replay(mockRegionAdminService);
+ expect(mockRegionService.getRegion(anyObject())).andReturn(region1).anyTimes();
+ replay(mockRegionService);
WebTarget wt = target()
.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
@@ -459,8 +483,7 @@
.getResourceAsStream("region-deviceIds.json");
// FIXME: need to consider whether to use jsonStream for entry deletion
- Response response = wt.path("regions/" +
- region1.id().toString() + "/devices")
+ Response response = wt.path("regions/" + region1.id().toString() + "/devices")
.request().method("DELETE", Entity.json(jsonStream));
assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NO_CONTENT));
verify(mockRegionAdminService);