From dba61119d17fcffa67026d1cf7e450fc7fb2a2ec Mon Sep 17 00:00:00 2001 From: Jayasree Ghosh Date: Fri, 28 Oct 2016 23:14:27 +0530 Subject: [PATCH] Fix for ONOS-5417:Issue with Creating Flows using POST flows REST API Change-Id: Ie608f2ef0447fc8c2a73f46df0e5b195c333fcbf (cherry picked from commit 3565ca6f5b2b46ee2fe9b93aa7d0ea4df592830b) --- .../rest/resources/FlowsWebResource.java | 13 +++++++------ .../rest/resources/FlowsResourceTest.java | 13 +++++-------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java index fa5c3c7ef2..e9f88bab11 100644 --- a/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java +++ b/web/api/src/main/java/org/onosproject/rest/resources/FlowsWebResource.java @@ -116,13 +116,14 @@ public class FlowsWebResource extends AbstractWebResource { @Produces(MediaType.APPLICATION_JSON) public Response createFlows(@QueryParam("appId") String appId, InputStream stream) { try { + final ApplicationService appService = get(ApplicationService.class); + final ApplicationId idInstant = nullIsNotFound(appService.getId(appId), APP_ID_NOT_FOUND); ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); ArrayNode flowsArray = nullIsIllegal((ArrayNode) jsonTree.get(FLOWS), FLOW_ARRAY_REQUIRED); - if (appId != null) { - flowsArray.forEach(flowJson -> ((ObjectNode) flowJson).put("appId", appId)); - } + flowsArray.forEach(flowJson -> ((ObjectNode) flowJson).put("appId", idInstant.name())); + List rules = codec(FlowRule.class).decode(flowsArray, this); @@ -253,6 +254,8 @@ public class FlowsWebResource extends AbstractWebResource { @QueryParam("appId") String appId, InputStream stream) { try { + final ApplicationService appService = get(ApplicationService.class); + final ApplicationId idInstant = nullIsNotFound(appService.getId(appId), APP_ID_NOT_FOUND); ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); JsonNode specifiedDeviceId = jsonTree.get("deviceId"); if (specifiedDeviceId != null && @@ -262,9 +265,7 @@ public class FlowsWebResource extends AbstractWebResource { } jsonTree.put("deviceId", deviceId); - if (appId != null) { - jsonTree.put("appId", appId); - } + jsonTree.put("appId", idInstant.name()); FlowRule rule = codec(FlowRule.class).decode(jsonTree, this); service.applyFlowRules(rule); diff --git a/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java index 2ecd373cee..74defed198 100644 --- a/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java +++ b/web/api/src/test/java/org/onosproject/rest/resources/FlowsResourceTest.java @@ -33,7 +33,6 @@ import org.onlab.rest.BaseResource; import org.onosproject.app.ApplicationService; import org.onosproject.codec.CodecService; import org.onosproject.codec.impl.CodecManager; -import org.onosproject.codec.impl.FlowRuleCodec; import org.onosproject.core.CoreService; import org.onosproject.core.DefaultGroupId; import org.onosproject.core.GroupId; @@ -46,7 +45,6 @@ import org.onosproject.net.flow.DefaultTrafficSelector; import org.onosproject.net.flow.DefaultTrafficTreatment; import org.onosproject.net.flow.FlowEntry; import org.onosproject.net.flow.FlowId; -import org.onosproject.net.flow.FlowRule.FlowRemoveReason; import org.onosproject.net.flow.FlowRule; import org.onosproject.net.flow.FlowRuleExtPayLoad; import org.onosproject.net.flow.FlowRuleService; @@ -404,7 +402,7 @@ public class FlowsResourceTest extends ResourceTest { .andReturn(NetTestTools.APP_ID).anyTimes(); expect(mockCoreService.getAppId(anyString())) .andReturn(NetTestTools.APP_ID).anyTimes(); - expect(mockCoreService.registerApplication(FlowRuleCodec.REST_APP_ID)) + expect(mockCoreService.registerApplication(anyString())) .andReturn(APP_ID).anyTimes(); replay(mockCoreService); @@ -880,8 +878,6 @@ public class FlowsResourceTest extends ResourceTest { */ @Test public void testPostWithoutAppId() { - mockFlowService.applyFlowRules(anyObject()); - expectLastCall(); replay(mockFlowService); WebTarget wt = target(); @@ -891,9 +887,7 @@ public class FlowsResourceTest extends ResourceTest { Response response = wt.path("flows/of:0000000000000001") .request(MediaType.APPLICATION_JSON_TYPE) .post(Entity.json(jsonStream)); - assertThat(response.getStatus(), is(HttpURLConnection.HTTP_CREATED)); - String location = response.getLocation().getPath(); - assertThat(location, Matchers.startsWith("/flows/of:0000000000000001/")); + assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NOT_FOUND)); } /** @@ -905,6 +899,9 @@ public class FlowsResourceTest extends ResourceTest { expectLastCall(); replay(mockFlowService); + expect(mockApplicationService.getId(anyObject())).andReturn(APP_ID).anyTimes(); + replay(mockApplicationService); + WebTarget wt = target(); InputStream jsonStream = FlowsResourceTest.class .getResourceAsStream("post-flow.json");