From 4063669aa69554b0513aac11c7a4e20fa066fa06 Mon Sep 17 00:00:00 2001 From: Jozef Gloncak Date: Mon, 17 Feb 2014 15:13:56 +0100 Subject: [PATCH] bug 344 interpretation of slashes ('/') in URI If slash (/) should be part of path parameter from URI it can be specified with %2F placeholder. e.g. list which key is "ke/y_1" CAN'T be specified as list_name/ke/y_1 but should be constructed as list_name/ke%2Fy_1 It is also necessary to add to target distribution folder /opendaylight/configuration/config.ini following line org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true Change-Id: Id07e7969247f3b60a44b808c95dac6375cebc011 Signed-off-by: Jozef Gloncak --- .../main/resources/configuration/config.ini | 1 + .../sal/rest/api/RestconfService.java | 13 +++++---- .../sal/restconf/impl/ControllerContext.xtend | 17 +++++++++-- .../restconf/impl/test/MediaTypesTest.java | 16 +++++----- .../impl/test/RestDeleteOperationTest.java | 3 +- .../impl/test/RestGetOperationTest.java | 29 +++++++++---------- .../impl/test/RestOperationUtils.java | 10 ------- .../impl/test/RestPostOperationTest.java | 24 +++++++-------- .../impl/test/RestPutOperationTest.java | 9 +++--- .../impl/websockets/test/RestStream.java | 5 ++-- 10 files changed, 61 insertions(+), 66 deletions(-) diff --git a/opendaylight/distribution/opendaylight/src/main/resources/configuration/config.ini b/opendaylight/distribution/opendaylight/src/main/resources/configuration/config.ini index 1ddfe1c7f3..99f8df358e 100644 --- a/opendaylight/distribution/opendaylight/src/main/resources/configuration/config.ini +++ b/opendaylight/distribution/opendaylight/src/main/resources/configuration/config.ini @@ -83,6 +83,7 @@ connection.scheme = ANY_CONTROLLER_ONE_MASTER # Embedded Tomcat configuration File org.eclipse.gemini.web.tomcat.config.path=configuration/tomcat-server.xml +org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true # Open Flow related system parameters # TCP port on which the controller is listening (default 6633) diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java index cef5df9e57..f6c39bf8c5 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/api/RestconfService.java @@ -16,6 +16,7 @@ import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.Encoded; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -106,25 +107,25 @@ public interface RestconfService { @Path("/config/{identifier:.+}") @Produces({Draft02.MediaTypes.DATA+JSON,Draft02.MediaTypes.DATA+XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML}) - public StructuredData readConfigurationData(@PathParam("identifier") String identifier); + public StructuredData readConfigurationData(@Encoded @PathParam("identifier") String identifier); @GET @Path("/operational/{identifier:.+}") @Produces({Draft02.MediaTypes.DATA+JSON,Draft02.MediaTypes.DATA+XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML}) - public StructuredData readOperationalData(@PathParam("identifier") String identifier); + public StructuredData readOperationalData(@Encoded @PathParam("identifier") String identifier); @PUT @Path("/config/{identifier:.+}") @Consumes({Draft02.MediaTypes.DATA+JSON,Draft02.MediaTypes.DATA+XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML}) - public Response updateConfigurationData(@PathParam("identifier") String identifier, CompositeNode payload); + public Response updateConfigurationData(@Encoded @PathParam("identifier") String identifier, CompositeNode payload); @POST @Path("/config/{identifier:.+}") @Consumes({Draft02.MediaTypes.DATA+JSON,Draft02.MediaTypes.DATA+XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_XML}) - public Response createConfigurationData(@PathParam("identifier") String identifier, CompositeNode payload); + public Response createConfigurationData(@Encoded @PathParam("identifier") String identifier, CompositeNode payload); @POST @Path("/config") @@ -134,10 +135,10 @@ public interface RestconfService { @DELETE @Path("/config/{identifier:.+}") - public Response deleteConfigurationData(@PathParam("identifier") String identifier); + public Response deleteConfigurationData(@Encoded @PathParam("identifier") String identifier); @GET @Path("/streams/stream/{identifier:.+}") - public Response subscribeToStream(@PathParam("identifier") String identifier, @Context UriInfo uriInfo); + public Response subscribeToStream(@Encoded @PathParam("identifier") String identifier, @Context UriInfo uriInfo); } diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend index c2b82eae63..f1d412cdb0 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.xtend @@ -57,6 +57,8 @@ class ControllerContext implements SchemaServiceListener { val static MOUNT_MODULE = "yang-ext" val static MOUNT_NODE = "mount" public val static MOUNT = "yang-ext:mount" + val static URI_ENCODING_CHAR_SET = "ISO-8859-1" + val static URI_SLASH_PLACEHOLDER = "%2F"; @Property var SchemaContext globalSchema; @@ -98,7 +100,8 @@ class ControllerContext implements SchemaServiceListener { private def InstanceIdWithSchemaNode toIdentifier(String restconfInstance, boolean toMountPointIdentifier) { checkPreconditions - val pathArgs = Lists.newArrayList(Splitter.on("/").split(restconfInstance)) + val encodedPathArgs = Lists.newArrayList(Splitter.on("/").split(restconfInstance)) + val pathArgs = urlPathArgsDecode(encodedPathArgs) pathArgs.omitFirstAndLastEmptyString if (pathArgs.empty) { return null; @@ -353,7 +356,8 @@ class ControllerContext implements SchemaServiceListener { private def toUriString(Object object) { if(object === null) return ""; - return URLEncoder.encode(object.toString) +// return object.toString.replace("/",URI_SLASH_PLACEHOLDER) + return URLEncoder.encode(object.toString,URI_ENCODING_CHAR_SET) } private def InstanceIdWithSchemaNode collectPathArguments(InstanceIdentifierBuilder builder, List strings, @@ -606,4 +610,13 @@ class ControllerContext implements SchemaServiceListener { } } + + def urlPathArgsDecode(List strings) { + val List decodedPathArgs = new ArrayList(); + for (pathArg : strings) { + decodedPathArgs.add(URLDecoder.decode(pathArg, URI_ENCODING_CHAR_SET)) + } + return decodedPathArgs + } + } diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/MediaTypesTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/MediaTypesTest.java index e1d7e6a624..5a2c964b8b 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/MediaTypesTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/MediaTypesTest.java @@ -15,7 +15,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.JSON; import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.XML; -import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.createUri; import java.io.IOException; import java.io.InputStream; @@ -24,6 +23,7 @@ import java.io.UnsupportedEncodingException; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Application; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; @@ -70,7 +70,7 @@ public class MediaTypesTest extends JerseyTest { public void testPostOperationsWithInputDataMediaTypes() throws UnsupportedEncodingException { String uriPrefix = "/operations/"; String uriPath = "ietf-interfaces:interfaces"; - String uri = createUri(uriPrefix, uriPath); + String uri = uriPrefix + uriPath; when(restconfService.invokeRpc(eq(uriPath), any(CompositeNode.class))).thenReturn(null); post(uri, Draft02.MediaTypes.OPERATION+JSON, Draft02.MediaTypes.OPERATION+JSON, jsonData); verify(restconfService, times(1)).invokeRpc(eq(uriPath), any(CompositeNode.class)); @@ -96,7 +96,7 @@ public class MediaTypesTest extends JerseyTest { public void testGetConfigMediaTypes() throws UnsupportedEncodingException { String uriPrefix = "/config/"; String uriPath = "ietf-interfaces:interfaces"; - String uri = createUri(uriPrefix, uriPath); + String uri = uriPrefix + uriPath; when(restconfService.readConfigurationData(uriPath)).thenReturn(null); get(uri, Draft02.MediaTypes.DATA+JSON); verify(restconfService, times(1)).readConfigurationData(uriPath); @@ -118,7 +118,7 @@ public class MediaTypesTest extends JerseyTest { public void testGetOperationalMediaTypes() throws UnsupportedEncodingException { String uriPrefix = "/operational/"; String uriPath = "ietf-interfaces:interfaces"; - String uri = createUri(uriPrefix, uriPath); + String uri = uriPrefix + uriPath; when(restconfService.readOperationalData(uriPath)).thenReturn(null); get(uri, Draft02.MediaTypes.DATA+JSON); verify(restconfService, times(1)).readOperationalData(uriPath); @@ -140,7 +140,7 @@ public class MediaTypesTest extends JerseyTest { public void testPutConfigMediaTypes() throws UnsupportedEncodingException { String uriPrefix = "/config/"; String uriPath = "ietf-interfaces:interfaces"; - String uri = createUri(uriPrefix, uriPath); + String uri = uriPrefix + uriPath; when(restconfService.updateConfigurationData(eq(uriPath), any(CompositeNode.class))).thenReturn(null); put(uri, null, Draft02.MediaTypes.DATA+JSON, jsonData); verify(restconfService, times(1)).updateConfigurationData(eq(uriPath), any(CompositeNode.class)); @@ -160,7 +160,7 @@ public class MediaTypesTest extends JerseyTest { public void testPostConfigWithPathMediaTypes() throws UnsupportedEncodingException { String uriPrefix = "/config/"; String uriPath = "ietf-interfaces:interfaces"; - String uri = createUri(uriPrefix, uriPath); + String uri = uriPrefix + uriPath; when(restconfService.createConfigurationData(eq(uriPath), any(CompositeNode.class))).thenReturn(null); post(uri, null, Draft02.MediaTypes.DATA+JSON, jsonData); verify(restconfService, times(1)).createConfigurationData(eq(uriPath), any(CompositeNode.class)); @@ -179,7 +179,7 @@ public class MediaTypesTest extends JerseyTest { @Test public void testPostConfigMediaTypes() throws UnsupportedEncodingException { String uriPrefix = "/config/"; - String uri = createUri(uriPrefix, ""); + String uri = uriPrefix; when(restconfService.createConfigurationData(any(CompositeNode.class))).thenReturn(null); post(uri, null, Draft02.MediaTypes.DATA+JSON, jsonData); verify(restconfService, times(1)).createConfigurationData(any(CompositeNode.class)); @@ -199,7 +199,7 @@ public class MediaTypesTest extends JerseyTest { public void testDeleteConfigMediaTypes() throws UnsupportedEncodingException { String uriPrefix = "/config/"; String uriPath = "ietf-interfaces:interfaces"; - String uri = createUri(uriPrefix, uriPath); + String uri = uriPrefix + uriPath; when(restconfService.deleteConfigurationData(eq(uriPath))).thenReturn(null); target(uri).request("fooMediaType").delete(); verify(restconfService, times(1)).deleteConfigurationData(uriPath); diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java index 73b4b3a2af..408b14acfe 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestDeleteOperationTest.java @@ -12,7 +12,6 @@ import static org.junit.Assert.assertNotNull; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.createUri; import java.io.FileNotFoundException; import java.io.UnsupportedEncodingException; @@ -72,7 +71,7 @@ public class RestDeleteOperationTest extends JerseyTest { @Test public void deleteConfigStatusCodes() throws UnsupportedEncodingException { - String uri = createUri("/config/", "test-interface:interfaces"); + String uri = "/config/test-interface:interfaces"; Future> dummyFuture = createFuture(TransactionStatus.COMMITED); when(brokerFacade.commitConfigurationDataDelete(any(InstanceIdentifier.class))).thenReturn(dummyFuture); Response response = target(uri).request(MediaType.APPLICATION_XML).delete(); diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java index 1e01020e78..6f507f96e2 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestGetOperationTest.java @@ -12,7 +12,6 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.createUri; import java.io.FileNotFoundException; import java.io.UnsupportedEncodingException; @@ -94,10 +93,10 @@ public class RestGetOperationTest extends JerseyTest { @Test public void getOperationalStatusCodes() throws UnsupportedEncodingException { mockReadOperationalDataMethod(); - String uri = createUri("/operational/", "ietf-interfaces:interfaces/interface/eth0"); + String uri = "/operational/ietf-interfaces:interfaces/interface/eth0"; assertEquals(200, get(uri, MediaType.APPLICATION_XML)); - uri = createUri("/operational/", "wrong-module:interfaces/interface/eth0"); + uri = "/operational/wrong-module:interfaces/interface/eth0"; assertEquals(400, get(uri, MediaType.APPLICATION_XML)); } @@ -107,10 +106,10 @@ public class RestGetOperationTest extends JerseyTest { @Test public void getConfigStatusCodes() throws UnsupportedEncodingException { mockReadConfigurationDataMethod(); - String uri = createUri("/config/", "ietf-interfaces:interfaces/interface/eth0"); + String uri = "/config/ietf-interfaces:interfaces/interface/eth0"; assertEquals(200, get(uri, MediaType.APPLICATION_XML)); - uri = createUri("/config/", "wrong-module:interfaces/interface/eth0"); + uri = "/config/wrong-module:interfaces/interface/eth0"; assertEquals(400, get(uri, MediaType.APPLICATION_XML)); } @@ -129,11 +128,10 @@ public class RestGetOperationTest extends JerseyTest { ControllerContext.getInstance().setMountService(mockMountService); - String uri = createUri("/config/", - "ietf-interfaces:interfaces/interface/0/yang-ext:mount/test-module:cont/cont1"); + String uri = "/config/ietf-interfaces:interfaces/interface/0/yang-ext:mount/test-module:cont/cont1"; assertEquals(200, get(uri, MediaType.APPLICATION_XML)); - uri = createUri("/config/", "ietf-interfaces:interfaces/yang-ext:mount/test-module:cont/cont1"); + uri = "/config/ietf-interfaces:interfaces/yang-ext:mount/test-module:cont/cont1"; assertEquals(200, get(uri, MediaType.APPLICATION_XML)); } @@ -149,7 +147,7 @@ public class RestGetOperationTest extends JerseyTest { ControllerContext.getInstance().setMountService(mockMountService); - String uri = createUri("/config/", "ietf-interfaces:interfaces/interface/0/yang-ext:mount/"); + String uri = "/config/ietf-interfaces:interfaces/interface/0/yang-ext:mount/"; assertEquals(200, get(uri, MediaType.APPLICATION_XML)); } @@ -158,7 +156,7 @@ public class RestGetOperationTest extends JerseyTest { public void getModulesTest() throws UnsupportedEncodingException, FileNotFoundException { ControllerContext.getInstance().setGlobalSchema(schemaContextModules); - String uri = createUri("/modules", ""); + String uri = "/modules"; Response response = target(uri).request("application/yang.api+json").get(); validateModulesResponseJson(response); @@ -172,7 +170,7 @@ public class RestGetOperationTest extends JerseyTest { public void getModuleTest() throws FileNotFoundException, UnsupportedEncodingException { ControllerContext.getInstance().setGlobalSchema(schemaContextModules); - String uri = createUri("/modules/module/module2/2014-01-02", ""); + String uri = "/modules/module/module2/2014-01-02"; Response response = target(uri).request("application/yang.api+xml").get(); assertEquals(200, response.getStatus()); @@ -197,7 +195,7 @@ public class RestGetOperationTest extends JerseyTest { public void getOperationsTest() throws FileNotFoundException, UnsupportedEncodingException { ControllerContext.getInstance().setGlobalSchema(schemaContextModules); - String uri = createUri("/operations", ""); + String uri = "/operations"; Response response = target(uri).request("application/yang.api+xml").get(); assertEquals(200, response.getStatus()); @@ -238,7 +236,7 @@ public class RestGetOperationTest extends JerseyTest { controllerContext.setMountService(mockMountService); - String uri = createUri("/operations/", "ietf-interfaces:interfaces/interface/0/yang-ext:mount/"); + String uri = "/operations/ietf-interfaces:interfaces/interface/0/yang-ext:mount/"; Response response = target(uri).request("application/yang.api+xml").get(); assertEquals(200, response.getStatus()); @@ -329,7 +327,7 @@ public class RestGetOperationTest extends JerseyTest { controllerContext.setMountService(mockMountService); - String uri = createUri("/modules/", "ietf-interfaces:interfaces/interface/0/yang-ext:mount/"); + String uri = "/modules/ietf-interfaces:interfaces/interface/0/yang-ext:mount/"; Response response = target(uri).request("application/yang.api+json").get(); assertEquals(200, response.getStatus()); @@ -371,8 +369,7 @@ public class RestGetOperationTest extends JerseyTest { controllerContext.setMountService(mockMountService); - String uri = createUri("/modules/module/", - "ietf-interfaces:interfaces/interface/0/yang-ext:mount/module1-behind-mount-point/2014-02-03"); + String uri = "/modules/module/ietf-interfaces:interfaces/interface/0/yang-ext:mount/module1-behind-mount-point/2014-02-03"; Response response = target(uri).request("application/yang.api+json").get(); assertEquals(200, response.getStatus()); diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestOperationUtils.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestOperationUtils.java index a0e61a6fa1..7bf4782790 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestOperationUtils.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestOperationUtils.java @@ -7,12 +7,6 @@ */ package org.opendaylight.controller.sal.restconf.impl.test; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URLEncoder; - -import com.google.common.base.Charsets; - public class RestOperationUtils { public static final String JSON = "+json"; @@ -20,8 +14,4 @@ public class RestOperationUtils { private RestOperationUtils() { } - - public static String createUri(String prefix, String encodedPart) throws UnsupportedEncodingException { - return URI.create(prefix + URLEncoder.encode(encodedPart, Charsets.US_ASCII.name()).toString()).toASCIIString(); - } } diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java index 050aa9ab24..11264e7f86 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPostOperationTest.java @@ -109,7 +109,7 @@ public class RestPostOperationTest extends JerseyTest { public void postOperationsStatusCodes() throws UnsupportedEncodingException { controllerContext.setSchemas(schemaContextTestModule); mockInvokeRpc(cnSnDataOutput, true); - String uri = createUri("/operations/", "test-module:rpc-test"); + String uri = "/operations/test-module:rpc-test"; assertEquals(200, post(uri, MediaType.APPLICATION_XML, xmlDataRpcInput)); mockInvokeRpc(null, true); @@ -118,7 +118,7 @@ public class RestPostOperationTest extends JerseyTest { mockInvokeRpc(null, false); assertEquals(500, post(uri, MediaType.APPLICATION_XML, xmlDataRpcInput)); - uri = createUri("/operations/", "test-module:rpc-wrongtest"); + uri = "/operations/test-module:rpc-wrongtest"; assertEquals(404, post(uri, MediaType.APPLICATION_XML, xmlDataRpcInput)); } @@ -126,7 +126,7 @@ public class RestPostOperationTest extends JerseyTest { public void postConfigOnlyStatusCodes() throws UnsupportedEncodingException { controllerContext.setSchemas(schemaContextYangsIetf); mockCommitConfigurationDataPostMethod(TransactionStatus.COMMITED); - String uri = createUri("/config", ""); + String uri = "/config"; assertEquals(204, post(uri, MediaType.APPLICATION_XML, xmlDataAbsolutePath)); mockCommitConfigurationDataPostMethod(null); @@ -140,7 +140,7 @@ public class RestPostOperationTest extends JerseyTest { public void postConfigStatusCodes() throws UnsupportedEncodingException { controllerContext.setSchemas(schemaContextYangsIetf); mockCommitConfigurationDataPostMethod(TransactionStatus.COMMITED); - String uri = createUri("/config/", "ietf-interfaces:interfaces"); + String uri = "/config/ietf-interfaces:interfaces"; assertEquals(204, post(uri, MediaType.APPLICATION_XML, xmlDataInterfaceAbsolutePath)); mockCommitConfigurationDataPostMethod(null); @@ -167,9 +167,9 @@ public class RestPostOperationTest extends JerseyTest { ControllerContext.getInstance().setMountService(mockMountService); - String uri = createUri("/config/", "ietf-interfaces:interfaces/interface/0/"); + String uri = "/config/ietf-interfaces:interfaces/interface/0/"; assertEquals(204, post(uri, Draft02.MediaTypes.DATA + XML, xmlData4)); - uri = createUri("/config/", "ietf-interfaces:interfaces/interface/0/yang-ext:mount/test-module:cont"); + uri = "/config/ietf-interfaces:interfaces/interface/0/yang-ext:mount/test-module:cont"; assertEquals(204, post(uri, Draft02.MediaTypes.DATA + XML, xmlData3)); } @@ -206,13 +206,13 @@ public class RestPostOperationTest extends JerseyTest { ArgumentCaptor instanceIdCaptor = ArgumentCaptor.forClass(InstanceIdentifier.class); ArgumentCaptor compNodeCaptor = ArgumentCaptor.forClass(CompositeNode.class); - String URI_1 = createUri("/config", ""); + String URI_1 = "/config"; assertEquals(204, post(URI_1, Draft02.MediaTypes.DATA + XML, xmlTestInterface)); verify(brokerFacade).commitConfigurationDataPost(instanceIdCaptor.capture(), compNodeCaptor.capture()); String identifier = "[(urn:ietf:params:xml:ns:yang:test-interface?revision=2014-07-01)interfaces]"; assertEquals(identifier, instanceIdCaptor.getValue().getPath().toString()); - String URI_2 = createUri("/config/", "test-interface:interfaces"); + String URI_2 = "/config/test-interface:interfaces"; assertEquals(204, post(URI_2, Draft02.MediaTypes.DATA + XML, xmlBlockData)); verify(brokerFacade, times(2)) .commitConfigurationDataPost(instanceIdCaptor.capture(), compNodeCaptor.capture()); @@ -227,17 +227,13 @@ public class RestPostOperationTest extends JerseyTest { when(brokerFacade.commitConfigurationDataPost(any(InstanceIdentifier.class), any(CompositeNode.class))) .thenReturn(null); - String URI_1 = createUri("/config", ""); + String URI_1 = "/config"; assertEquals(202, post(URI_1, Draft02.MediaTypes.DATA + XML, xmlTestInterface)); - String URI_2 = createUri("/config/", "test-interface:interfaces"); + String URI_2 = "/config/test-interface:interfaces"; assertEquals(202, post(URI_2, Draft02.MediaTypes.DATA + XML, xmlBlockData)); } - private String createUri(String prefix, String encodedPart) throws UnsupportedEncodingException { - return URI.create(prefix + URLEncoder.encode(encodedPart, Charsets.US_ASCII.name()).toString()).toASCIIString(); - } - private static void initMocking() { controllerContext = ControllerContext.getInstance(); controllerContext.setSchemas(schemaContext); diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java index 2ba4a38c88..3af2945526 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/RestPutOperationTest.java @@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.createUri; import java.io.FileNotFoundException; import java.io.IOException; @@ -95,7 +94,7 @@ public class RestPutOperationTest extends JerseyTest { */ @Test public void putConfigStatusCodes() throws UnsupportedEncodingException { - String uri = createUri("/config/", "ietf-interfaces:interfaces/interface/eth0"); + String uri = "/config/ietf-interfaces:interfaces/interface/eth0"; mockCommitConfigurationDataPutMethod(TransactionStatus.COMMITED); assertEquals(200, put(uri, MediaType.APPLICATION_XML, xmlData)); @@ -121,10 +120,10 @@ public class RestPutOperationTest extends JerseyTest { ControllerContext.getInstance().setMountService(mockMountService); - String uri = createUri("/config/", "ietf-interfaces:interfaces/interface/0/yang-ext:mount/test-module:cont"); + String uri = "/config/ietf-interfaces:interfaces/interface/0/yang-ext:mount/test-module:cont"; assertEquals(200, put(uri, MediaType.APPLICATION_XML, xmlData2)); - uri = createUri("/config/", "ietf-interfaces:interfaces/yang-ext:mount/test-module:cont"); + uri = "/config/ietf-interfaces:interfaces/yang-ext:mount/test-module:cont"; assertEquals(200, put(uri, MediaType.APPLICATION_XML, xmlData2)); } @@ -144,7 +143,7 @@ public class RestPutOperationTest extends JerseyTest { ControllerContext.getInstance().setMountService(mockMountService); - String uri = createUri("/config/", "ietf-interfaces:interfaces/yang-ext:mount"); + String uri = "/config/ietf-interfaces:interfaces/yang-ext:mount"; assertEquals(200, put(uri, MediaType.APPLICATION_XML, xmlData3)); } diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/websockets/test/RestStream.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/websockets/test/RestStream.java index 4dcc63e89a..d9ef2ef243 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/websockets/test/RestStream.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/websockets/test/RestStream.java @@ -11,7 +11,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; -import static org.opendaylight.controller.sal.restconf.impl.test.RestOperationUtils.createUri; import java.io.FileNotFoundException; import java.io.UnsupportedEncodingException; @@ -69,13 +68,13 @@ public class RestStream extends JerseyTest { @Test public void testCallRpcCallGet() throws UnsupportedEncodingException, InterruptedException { - String uri = createUri("/operations/", "sal-remote:create-data-change-event-subscription"); + String uri = "/operations/sal-remote:create-data-change-event-subscription"; Response responseWithStreamName = post(uri, MediaType.APPLICATION_XML, getRpcInput()); String xmlResponse = responseWithStreamName.readEntity(String.class); assertNotNull(xmlResponse); assertTrue(xmlResponse.contains("ietf-interfaces:interfaces/ietf-interfaces:interface/eth0")); - uri = createUri("/streams/stream/", "ietf-interfaces:interfaces/ietf-interfaces:interface/eth0"); + uri = "/streams/stream/ietf-interfaces:interfaces/ietf-interfaces:interface/eth0"; Response responseWithRedirectionUri = get(uri, MediaType.APPLICATION_XML); final URI websocketServerUri = responseWithRedirectionUri.getLocation(); assertNotNull(websocketServerUri); -- 2.36.6