http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/244cc21a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestPaths.java ---------------------------------------------------------------------- diff --git a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestPaths.java b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestPaths.java new file mode 100755 index 0000000..6f4e317 --- /dev/null +++ b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestPaths.java @@ -0,0 +1,1368 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ +package org.apache.juneau.server; + +import static org.junit.Assert.*; + +import org.apache.juneau.*; +import org.apache.juneau.client.*; +import org.apache.juneau.json.*; +import org.junit.*; + +public class CT_TestPaths { + + private static String URL = "/testPaths"; + + //==================================================================================================== + // Basic tests + //==================================================================================================== + @Test + public void testBasic() throws Exception { + RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT); + ObjectMap r; + String url; + + // [/test/testPaths] + // { + // pathInfo:null, + // pathInfoUndecoded:null, + // pathInfoParts:[], + // pathRemainder:null, + // pathRemainderUndecoded:null, + // requestURI:'/jazz/juneau/test/testPaths', + // requestParentURI:'/jazz/juneau/test', + // requestURL:'https://localhost:9443/jazz/juneau/test/testPaths', + // servletPath:'/juneau/test/testPaths', + // relativeServletURI:'/jazz/juneau/test/testPaths', + // pathRemainder2:null + // } + url = URL; + r = client.doGet(url).getResponse(ObjectMap.class); + assertNull(r.getString("pathInfo")); + assertNull(r.getString("pathInfoUndecoded")); + assertEquals("[]", r.getObjectList("pathInfoParts").toString()); + assertNull(r.getString("pathRemainder")); + assertNull(r.getString("pathRemainderUndecoded")); + assertNull(r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths")); + assertTrue(r.getString("requestParentURI").endsWith("/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + + // [/test/testPaths/] + // { + // pathInfo: '/', + // pathInfoUndecoded: '/', + // pathInfoParts: [ + // ], + // pathRemainder: '', + // pathRemainderUndecoded: '', + // requestURI: '/jazz/juneau/test/testPaths/', + // requestParentURI: '/jazz/juneau/test', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/', + // servletPath: '/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '' + // } + url = URL + '/'; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/", r.getString("pathInfo")); + assertEquals("/", r.getString("pathInfoUndecoded")); + assertEquals("[]", r.getObjectList("pathInfoParts").toString()); + assertEquals("", r.getString("pathRemainder")); + assertEquals("", r.getString("pathRemainderUndecoded")); + assertEquals("", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/")); + assertTrue(r.getString("requestParentURI").endsWith("/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + // [/test/testPaths//] + // { + // pathInfo: '//', + // pathInfoParts: [''], + // pathRemainder: '/', + // requestURI: '/jazz/juneau/test/testPaths//', + // requestParentURI: '/jazz/juneau/test', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths//', + // servletPath: '/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '/' + // } + url = URL + "//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("//", r.getString("pathInfo")); + assertEquals("['']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/", r.getString("pathRemainder")); + assertEquals("/", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths//")); + assertTrue(r.getString("requestParentURI").endsWith("/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + // [/test/testPaths///] + // { + // pathInfo: '///', + // pathInfoParts: ['',''], + // pathRemainder: '//', + // requestURI: '/jazz/juneau/test/testPaths///', + // requestParentURI: '/jazz/juneau/test', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths///', + // servletPath: '/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '//' + // } + url = URL + "///"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("///", r.getString("pathInfo")); + assertEquals("['','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("//", r.getString("pathRemainder")); + assertEquals("//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths///")); + assertTrue(r.getString("requestParentURI").endsWith("/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths///")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + // [/test/testPaths/foo/bar] + // { + // pathInfo: '/foo/bar', + // pathInfoParts: [ + // 'foo', + // 'bar' + // ], + // pathRemainder: 'foo/bar', + // requestURI: '/jazz/juneau/test/testPaths/foo/bar', + // requestParentURI: '/jazz/juneau/test/testPaths/foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/foo/bar', + // servletPath: '/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: 'foo/bar' + // } + url = URL + "/foo/bar"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/foo/bar", r.getString("pathInfo")); + assertEquals("['foo','bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo/bar", r.getString("pathRemainder")); + assertEquals("foo/bar", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/foo/bar")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/foo")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/foo/bar")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + // [/test/testPaths/foo/bar/] + // { + // pathInfo: '/foo/bar/', + // pathInfoParts: [ + // 'foo', + // 'bar' + // ], + // pathRemainder: 'foo/bar/', + // requestURI: '/jazz/juneau/test/testPaths/foo/bar/', + // requestParentURI: '/jazz/juneau/test/testPaths/foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/foo/bar/', + // servletPath: '/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: 'foo/bar/' + // } + url = URL + "/foo/bar/"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/foo/bar/", r.getString("pathInfo")); + assertEquals("['foo','bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo/bar/", r.getString("pathRemainder")); + assertEquals("foo/bar/", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/foo/bar/")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/foo")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/foo/bar/")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + // [/test/testPaths//foo//bar//] + // { + // pathInfo: '//foo//bar//', + // pathInfoParts: [ + // '', + // 'foo', + // '', + // 'bar', + // '' + // ], + // pathRemainder: '/foo//bar//', + // requestURI: '/jazz/juneau/test/testPaths//foo//bar//', + // requestParentURI: '/jazz/juneau/test/testPaths//foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths//foo//bar//', + // servletPath: '/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '/foo//bar//' + // } + url = URL + "//foo//bar//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("//foo//bar//", r.getString("pathInfo")); + assertEquals("['','foo','','bar','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/foo//bar//", r.getString("pathRemainder")); + assertEquals("/foo//bar//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths//foo//bar//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths//foo/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths//foo//bar//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + // [/test/testPaths/foo%2Fbar] + // { + // pathInfo: '/foo//bar', + // pathInfoUndecoded: '/foo%2F%2Fbar', + // pathInfoParts: [ + // 'foo//bar' + // ], + // pathRemainder: 'foo//bar', + // pathRemainderUndecoded: 'foo%2F%2Fbar', + // requestURI: '/jazz/juneau/test/testPaths/foo%2F%2Fbar', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/foo%2F%2Fbar', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: 'foo//bar', + // method: 1 + // } + url = URL + "/foo%2F%2Fbar"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/foo//bar", r.getString("pathInfo")); + assertEquals("/foo%2F%2Fbar", r.getString("pathInfoUndecoded")); + assertEquals("['foo//bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo//bar", r.getString("pathRemainder")); + assertEquals("foo%2F%2Fbar", r.getString("pathRemainderUndecoded")); + assertEquals("foo//bar", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/foo%2F%2Fbar")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/foo%2F%2Fbar")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + // [/test/testPaths//foo%2Fbar//] + // { + // pathInfo: '//foo//bar//', + // pathInfoUndecoded: '//foo%2F%2Fbar//', + // pathInfoParts: [ + // '', + // 'foo//bar', + // '' + // ], + // pathRemainder: '/foo//bar//', + // pathRemainderUndecoded: '/foo%2F%2Fbar//', + // requestURI: '/jazz/juneau/test/testPaths//foo%2F%2Fbar//', + // requestParentURI: '/jazz/juneau/test/testPaths/', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths//foo%2F%2Fbar//', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '/foo//bar//', + // method: 1 + // } + url = URL + "//foo%2F%2Fbar//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("//foo//bar//", r.getString("pathInfo")); + assertEquals("//foo%2F%2Fbar//", r.getString("pathInfoUndecoded")); + assertEquals("['','foo//bar','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/foo//bar//", r.getString("pathRemainder")); + assertEquals("/foo%2F%2Fbar//", r.getString("pathRemainderUndecoded")); + assertEquals("/foo//bar//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths//foo%2F%2Fbar//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths//foo%2F%2Fbar//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + // [/test/testPaths/test2] + // { + // pathInfo: '/test2', + // pathInfoParts: [ + // 'test2' + // ], + // pathRemainder: null, + // requestURI: '/jazz/juneau/test/testPaths/test2', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: null, + // method: 2 + // } + url = URL + "/test2"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2", r.getString("pathInfo")); + assertEquals("['test2']", r.getObjectList("pathInfoParts").toString()); + assertNull(r.getString("pathRemainder")); + assertNull(r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + + // [/test/testPaths/test2/] + // { + // pathInfo: '/test2/', + // pathInfoParts: [ + // 'test2' + // ], + // pathRemainder: '', + // requestURI: '/jazz/juneau/test/testPaths/test2/', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2/', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '', + // method: 2 + // } + url = URL + "/test2/"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/", r.getString("pathInfo")); + assertEquals("['test2']", r.getObjectList("pathInfoParts").toString()); + assertEquals("", r.getString("pathRemainder")); + assertEquals("", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2/")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2/")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + // [/test/testPaths/test2//] + // { + // pathInfo: '/test2//', + // pathInfoParts: [ + // 'test2', + // '' + // ], + // pathRemainder: '/', + // requestURI: '/jazz/juneau/test/testPaths/test2//', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2//', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '/', + // method: 2 + // } + url = URL + "/test2//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2//", r.getString("pathInfo")); + assertEquals("['test2','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/", r.getString("pathRemainder")); + assertEquals("/", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + // [/test/testPaths/test2///] + // { + // pathInfo: '/test2///', + // pathInfoParts: [ + // 'test2', + // '', + // '' + // ], + // pathRemainder: '//', + // requestURI: '/jazz/juneau/test/testPaths/test2///', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2///', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '//', + // method: 2 + // } + url = URL + "/test2///"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2///", r.getString("pathInfo")); + assertEquals("['test2','','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("//", r.getString("pathRemainder")); + assertEquals("//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2///")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2///")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + // [/test/testPaths/test2/foo/bar] + // { + // pathInfo: '/test2/foo/bar', + // pathInfoParts: [ + // 'test2', + // 'foo', + // 'bar' + // ], + // pathRemainder: 'foo/bar', + // requestURI: '/jazz/juneau/test/testPaths/test2/foo/bar', + // requestParentURI: '/jazz/juneau/test/testPaths/test2/foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2/foo/bar', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: 'foo/bar', + // method: 2 + // } + url = URL + "/test2/foo/bar"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/foo/bar", r.getString("pathInfo")); + assertEquals("['test2','foo','bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo/bar", r.getString("pathRemainder")); + assertEquals("foo/bar", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2/foo/bar")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/test2/foo")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2/foo/bar")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + // [/test/testPaths/test2/foo/bar/] + // { + // pathInfo: '/test2/foo/bar/', + // pathInfoParts: [ + // 'test2', + // 'foo', + // 'bar' + // ], + // pathRemainder: 'foo/bar/', + // requestURI: '/jazz/juneau/test/testPaths/test2/foo/bar/', + // requestParentURI: '/jazz/juneau/test/testPaths/test2/foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2/foo/bar/', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: 'foo/bar/', + // method: 2 + // } + url = URL + "/test2/foo/bar/"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/foo/bar/", r.getString("pathInfo")); + assertEquals("['test2','foo','bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo/bar/", r.getString("pathRemainder")); + assertEquals("foo/bar/", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2/foo/bar/")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/test2/foo")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2/foo/bar/")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + // [/test/testPaths/test2//foo//bar//] + // { + // pathInfo: '/test2//foo//bar//', + // pathInfoParts: [ + // 'test2', + // '', + // 'foo', + // '', + // 'bar', + // '' + // ], + // pathRemainder: '/foo//bar//', + // requestURI: '/jazz/juneau/test/testPaths/test2//foo//bar//', + // requestParentURI: '/jazz/juneau/test/testPaths/test2//foo/', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2//foo//bar//', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '/foo//bar//', + // method: 2 + // } + url = URL + "/test2//foo//bar//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2//foo//bar//", r.getString("pathInfo")); + assertEquals("['test2','','foo','','bar','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/foo//bar//", r.getString("pathRemainder")); + assertEquals("/foo//bar//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2//foo//bar//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/test2//foo/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2//foo//bar//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + // [/test/testPaths/test2/foo%2Fbar] + // { + // pathInfo: '/test2/foo//bar', + // pathInfoUndecoded: '/test2/foo%2F%2Fbar', + // pathInfoParts: [ + // 'test2', + // 'foo//bar' + // ], + // pathRemainder: 'foo//bar', + // pathRemainderUndecoded: 'foo%2F%2Fbar', + // requestURI: '/jazz/juneau/test/testPaths/test2/foo%2F%2Fbar', + // requestParentURI: '/jazz/juneau/test/testPaths/test2', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2/foo%2F%2Fbar', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: 'foo//bar', + // method: 2 + // } + url = URL + "/test2/foo%2F%2Fbar"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/foo//bar", r.getString("pathInfo")); + assertEquals("/test2/foo%2F%2Fbar", r.getString("pathInfoUndecoded")); + assertEquals("['test2','foo//bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo//bar", r.getString("pathRemainder")); + assertEquals("foo%2F%2Fbar", r.getString("pathRemainderUndecoded")); + assertEquals("foo//bar", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2/foo%2F%2Fbar")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/test2")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2/foo%2F%2Fbar")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + // [/test/testPaths/test2//foo%2Fbar//] + // { + // pathInfo: '/test2//foo//bar//', + // pathInfoUndecoded: '/test2//foo%2F%2Fbar//', + // pathInfoParts: [ + // 'test2', + // '', + // 'foo//bar', + // '' + // ], + // pathRemainder: '/foo//bar//', + // pathRemainderUndecoded: '/foo%2F%2Fbar//', + // requestURI: '/jazz/juneau/test/testPaths/test2//foo%2F%2Fbar//', + // requestParentURI: '/jazz/juneau/test/testPaths/test2/', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/test2//foo%2F%2Fbar//', + // servletPath: '/juneau/test/testPaths', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test', + // relativeServletURI: '/jazz/juneau/test/testPaths', + // pathRemainder2: '/foo//bar//', + // method: 2 + // } + url = URL + "/test2//foo%2F%2Fbar//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2//foo//bar//", r.getString("pathInfo")); + assertEquals("/test2//foo%2F%2Fbar//", r.getString("pathInfoUndecoded")); + assertEquals("['test2','','foo//bar','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/foo//bar//", r.getString("pathRemainder")); + assertEquals("/foo%2F%2Fbar//", r.getString("pathRemainderUndecoded")); + assertEquals("/foo//bar//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2//foo%2F%2Fbar//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/test2/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2//foo%2F%2Fbar//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + // [/test/testPaths/a] + // { + // pathInfo: null, + // pathInfoParts: [ + // ], + // pathRemainder: null, + // requestURI: '/jazz/juneau/test/testPaths/a', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: null, + // method: 3 + // } + url = URL + "/a"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertNull(r.getString("pathInfo")); + assertEquals("[]", r.getObjectList("pathInfoParts").toString()); + assertNull(r.getString("pathRemainder")); + assertNull(r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + // [/test/testPaths/a/] + // { + // pathInfo: '/', + // pathInfoParts: [ + // ], + // pathRemainder: '', + // requestURI: '/jazz/juneau/test/testPaths/a/', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '', + // method: 3 + // } + url = URL + "/a/"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/", r.getString("pathInfo")); + assertEquals("[]", r.getObjectList("pathInfoParts").toString()); + assertEquals("", r.getString("pathRemainder")); + assertEquals("", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + // [/test/testPaths/a//] + // { + // pathInfo: '//', + // pathInfoParts: [ + // '' + // ], + // pathRemainder: '/', + // requestURI: '/jazz/juneau/test/testPaths/a//', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a//', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '/', + // method: 3 + // } + url = URL + "/a//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("//", r.getString("pathInfo")); + assertEquals("['']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/", r.getString("pathRemainder")); + assertEquals("/", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + // [/test/testPaths/a///] + // { + // pathInfo: '///', + // pathInfoParts: [ + // '', + // '' + // ], + // pathRemainder: '//', + // requestURI: '/jazz/juneau/test/testPaths/a///', + // requestParentURI: '/jazz/juneau/test/testPaths', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a///', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '//', + // method: 3 + // } + url = URL + "/a///"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("///", r.getString("pathInfo")); + assertEquals("['','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("//", r.getString("pathRemainder")); + assertEquals("//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a///")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a///")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + // [/test/testPaths/a/foo/bar] + // { + // pathInfo: '/foo/bar', + // pathInfoParts: [ + // 'foo', + // 'bar' + // ], + // pathRemainder: 'foo/bar', + // requestURI: '/jazz/juneau/test/testPaths/a/foo/bar', + // requestParentURI: '/jazz/juneau/test/testPaths/a/foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/foo/bar', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: 'foo/bar', + // method: 3 + // } + url = URL + "/a/foo/bar"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/foo/bar", r.getString("pathInfo")); + assertEquals("['foo','bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo/bar", r.getString("pathRemainder")); + assertEquals("foo/bar", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/foo/bar")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/foo")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/foo/bar")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + // [/test/testPaths/a/foo/bar/] + // { + // pathInfo: '/foo/bar/', + // pathInfoParts: [ + // 'foo', + // 'bar' + // ], + // pathRemainder: 'foo/bar/', + // requestURI: '/jazz/juneau/test/testPaths/a/foo/bar/', + // requestParentURI: '/jazz/juneau/test/testPaths/a/foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/foo/bar/', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: 'foo/bar/', + // method: 3 + // } + url = URL + "/a/foo/bar/"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/foo/bar/", r.getString("pathInfo")); + assertEquals("['foo','bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo/bar/", r.getString("pathRemainder")); + assertEquals("foo/bar/", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/foo/bar/")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/foo")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/foo/bar/")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + // [/test/testPaths/a//foo//bar//] + // { + // pathInfo: '//foo//bar//', + // pathInfoParts: [ + // '', + // 'foo', + // '', + // 'bar', + // '' + // ], + // pathRemainder: '/foo//bar//', + // requestURI: '/jazz/juneau/test/testPaths/a//foo//bar//', + // requestParentURI: '/jazz/juneau/test/testPaths/a//foo/', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a//foo//bar//', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '/foo//bar//', + // method: 3 + // } + url = URL + "/a//foo//bar//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("//foo//bar//", r.getString("pathInfo")); + assertEquals("['','foo','','bar','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/foo//bar//", r.getString("pathRemainder")); + assertEquals("/foo//bar//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a//foo//bar//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a//foo/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a//foo//bar//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + // [/test/testPaths/a/foo%2Fbar] + // { + // pathInfo: '/foo//bar', + // pathInfoUndecoded: '/foo%2F%2Fbar', + // pathInfoParts: [ + // 'foo//bar' + // ], + // pathRemainder: 'foo//bar', + // pathRemainderUndecoded: 'foo%2F%2Fbar', + // requestURI: '/jazz/juneau/test/testPaths/a/foo%2F%2Fbar', + // requestParentURI: '/jazz/juneau/test/testPaths/a', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/foo%2F%2Fbar', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: 'foo//bar', + // method: 3 + // } + url = URL + "/a/foo%2F%2Fbar"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/foo//bar", r.getString("pathInfo")); + assertEquals("/foo%2F%2Fbar", r.getString("pathInfoUndecoded")); + assertEquals("['foo//bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo//bar", r.getString("pathRemainder")); + assertEquals("foo%2F%2Fbar", r.getString("pathRemainderUndecoded")); + assertEquals("foo//bar", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/foo%2F%2Fbar")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/foo%2F%2Fbar")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + // [/test/testPaths/a//foo%2Fbar//] + // { + // pathInfo: '//foo//bar//', + // pathInfoUndecoded: '//foo%2F%2Fbar//', + // pathInfoParts: [ + // '', + // 'foo//bar', + // '' + // ], + // pathRemainder: '/foo//bar//', + // pathRemainderUndecoded: '/foo%2F%2Fbar//', + // requestURI: '/jazz/juneau/test/testPaths/a//foo%2F%2Fbar//', + // requestParentURI: '/jazz/juneau/test/testPaths/a/', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a//foo%2F%2Fbar//', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '/foo//bar//', + // method: 3 + // } + url = URL + "/a//foo%2F%2Fbar//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("//foo//bar//", r.getString("pathInfo")); + assertEquals("//foo%2F%2Fbar//", r.getString("pathInfoUndecoded")); + assertEquals("['','foo//bar','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/foo//bar//", r.getString("pathRemainder")); + assertEquals("/foo%2F%2Fbar//", r.getString("pathRemainderUndecoded")); + assertEquals("/foo//bar//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a//foo%2F%2Fbar//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a//foo%2F%2Fbar//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + + // [/test/testPaths/a/test2] + // { + // pathInfo: '/test2', + // pathInfoParts: [ + // 'test2' + // ], + // pathRemainder: null, + // requestURI: '/jazz/juneau/test/testPaths/a/test2', + // requestParentURI: '/jazz/juneau/test/testPaths/a', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: null, + // method: 4 + // } + url = URL + "/a/test2"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2", r.getString("pathInfo")); + assertEquals("['test2']", r.getObjectList("pathInfoParts").toString()); + assertNull(r.getString("pathRemainder")); + assertNull(r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + // [/test/testPaths/a/test2/] + // { + // pathInfo: '/test2/', + // pathInfoParts: [ + // 'test2' + // ], + // pathRemainder: '', + // requestURI: '/jazz/juneau/test/testPaths/a/test2/', + // requestParentURI: '/jazz/juneau/test/testPaths/a', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2/', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '', + // method: 4 + // } + url = URL + "/a/test2/"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/", r.getString("pathInfo")); + assertEquals("['test2']", r.getObjectList("pathInfoParts").toString()); + assertEquals("", r.getString("pathRemainder")); + assertEquals("", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2/")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2/")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + // [/test/testPaths/a/test2//] + // { + // pathInfo: '/test2//', + // pathInfoParts: [ + // 'test2', + // '' + // ], + // pathRemainder: '/', + // requestURI: '/jazz/juneau/test/testPaths/a/test2//', + // requestParentURI: '/jazz/juneau/test/testPaths/a', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2//', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '/', + // method: 4 + // } + url = URL + "/a/test2//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2//", r.getString("pathInfo")); + assertEquals("['test2','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/", r.getString("pathRemainder")); + assertEquals("/", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + // [/test/testPaths/a/test2///] + // { + // pathInfo: '/test2///', + // pathInfoParts: [ + // 'test2', + // '', + // '' + // ], + // pathRemainder: '//', + // requestURI: '/jazz/juneau/test/testPaths/a/test2///', + // requestParentURI: '/jazz/juneau/test/testPaths/a', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2///', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '//', + // method: 4 + // } + url = URL + "/a/test2///"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2///", r.getString("pathInfo")); + assertEquals("['test2','','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("//", r.getString("pathRemainder")); + assertEquals("//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2///")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2///")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + // [/test/testPaths/a/test2/foo/bar] + // { + // pathInfo: '/test2/foo/bar', + // pathInfoParts: [ + // 'test2', + // 'foo', + // 'bar' + // ], + // pathRemainder: 'foo/bar', + // requestURI: '/jazz/juneau/test/testPaths/a/test2/foo/bar', + // requestParentURI: '/jazz/juneau/test/testPaths/a/test2/foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2/foo/bar', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: 'foo/bar', + // method: 4 + // } + url = URL + "/a/test2/foo/bar"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/foo/bar", r.getString("pathInfo")); + assertEquals("['test2','foo','bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo/bar", r.getString("pathRemainder")); + assertEquals("foo/bar", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2/foo/bar")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/test2/foo")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2/foo/bar")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + // [/test/testPaths/a/test2/foo/bar/] + // { + // pathInfo: '/test2/foo/bar/', + // pathInfoParts: [ + // 'test2', + // 'foo', + // 'bar' + // ], + // pathRemainder: 'foo/bar/', + // requestURI: '/jazz/juneau/test/testPaths/a/test2/foo/bar/', + // requestParentURI: '/jazz/juneau/test/testPaths/a/test2/foo', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2/foo/bar/', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: 'foo/bar/', + // method: 4 + // } + url = URL + "/a/test2/foo/bar/"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/foo/bar/", r.getString("pathInfo")); + assertEquals("['test2','foo','bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo/bar/", r.getString("pathRemainder")); + assertEquals("foo/bar/", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2/foo/bar/")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/test2/foo")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2/foo/bar/")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + // [/test/testPaths/a/test2//foo//bar//] + // { + // pathInfo: '/test2//foo//bar//', + // pathInfoParts: [ + // 'test2', + // '', + // 'foo', + // '', + // 'bar', + // '' + // ], + // pathRemainder: '/foo//bar//', + // requestURI: '/jazz/juneau/test/testPaths/a/test2//foo//bar//', + // requestParentURI: '/jazz/juneau/test/testPaths/a/test2//foo/', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2//foo//bar//', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '/foo//bar//', + // method: 4 + // } + url = URL + "/a/test2//foo//bar//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2//foo//bar//", r.getString("pathInfo")); + assertEquals("['test2','','foo','','bar','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/foo//bar//", r.getString("pathRemainder")); + assertEquals("/foo//bar//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2//foo//bar//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/test2//foo/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2//foo//bar//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + // [/test/testPaths/a/test2/foo%2Fbar] + // { + // pathInfo: '/test2/foo//bar', + // pathInfoUndecoded: '/test2/foo%2F%2Fbar', + // pathInfoParts: [ + // 'test2', + // 'foo//bar' + // ], + // pathRemainder: 'foo//bar', + // pathRemainderUndecoded: 'foo%2F%2Fbar', + // requestURI: '/jazz/juneau/test/testPaths/a/test2/foo%2F%2Fbar', + // requestParentURI: '/jazz/juneau/test/testPaths/a/test2', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2/foo%2F%2Fbar', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: 'foo//bar', + // method: 4 + // } + url = URL + "/a/test2/foo%2F%2Fbar"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/foo//bar", r.getString("pathInfo")); + assertEquals("/test2/foo%2F%2Fbar", r.getString("pathInfoUndecoded")); + assertEquals("['test2','foo//bar']", r.getObjectList("pathInfoParts").toString()); + assertEquals("foo//bar", r.getString("pathRemainder")); + assertEquals("foo%2F%2Fbar", r.getString("pathRemainderUndecoded")); + assertEquals("foo//bar", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2/foo%2F%2Fbar")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/test2")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2/foo%2F%2Fbar")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + // [/test/testPaths/a/test2//foo%2Fbar//] + // { + // pathInfo: '/test2//foo//bar//', + // pathInfoUndecoded: '/test2//foo%2F%2Fbar//', + // pathInfoParts: [ + // 'test2', + // '', + // 'foo//bar', + // '' + // ], + // pathRemainder: '/foo//bar//', + // pathRemainderUndecoded: '/foo%2F%2Fbar//', + // requestURI: '/jazz/juneau/test/testPaths/a/test2//foo%2F%2Fbar//', + // requestParentURI: '/jazz/juneau/test/testPaths/a/test2/', + // requestURL: 'https://localhost:9443/jazz/juneau/test/testPaths/a/test2//foo%2F%2Fbar//', + // servletPath: '/juneau/test/testPaths/a', + // servletURI: 'https://localhost:9443/jazz/juneau/test/testPaths/a', + // servletParentURI: 'https://localhost:9443/jazz/juneau/test/testPaths', + // relativeServletURI: '/jazz/juneau/test/testPaths/a', + // pathRemainder2: '/foo//bar//', + // method: 4 + // } + url = URL + "/a/test2//foo%2F%2Fbar//"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2//foo//bar//", r.getString("pathInfo")); + assertEquals("/test2//foo%2F%2Fbar//", r.getString("pathInfoUndecoded")); + assertEquals("['test2','','foo//bar','']", r.getObjectList("pathInfoParts").toString()); + assertEquals("/foo//bar//", r.getString("pathRemainder")); + assertEquals("/foo%2F%2Fbar//", r.getString("pathRemainderUndecoded")); + assertEquals("/foo//bar//", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2//foo%2F%2Fbar//")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/test2/")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2//foo%2F%2Fbar//")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + //-------------------------------------------------------------------------------- + // Spaces + //-------------------------------------------------------------------------------- + url = URL + "/%20"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/ ", r.getString("pathInfo")); + assertEquals("/%20", r.getString("pathInfoUndecoded")); + assertEquals("[' ']", r.getObjectList("pathInfoParts").toString()); + assertEquals(" ", r.getString("pathRemainder")); + assertEquals("%20", r.getString("pathRemainderUndecoded")); + assertEquals(" ", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/%20")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/%20")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + url = URL + "/test2/%20"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/ ", r.getString("pathInfo")); + assertEquals("/test2/%20", r.getString("pathInfoUndecoded")); + assertEquals("['test2',' ']", r.getObjectList("pathInfoParts").toString()); + assertEquals(" ", r.getString("pathRemainder")); + assertEquals("%20", r.getString("pathRemainderUndecoded")); + assertEquals(" ", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2/%20")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/test2")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2/%20")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + url = URL + "/a/%20"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/ ", r.getString("pathInfo")); + assertEquals("/%20", r.getString("pathInfoUndecoded")); + assertEquals("[' ']", r.getObjectList("pathInfoParts").toString()); + assertEquals(" ", r.getString("pathRemainder")); + assertEquals("%20", r.getString("pathRemainderUndecoded")); + assertEquals(" ", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/%20")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/%20")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + url = URL + "/a/test2/%20"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/ ", r.getString("pathInfo")); + assertEquals("/test2/%20", r.getString("pathInfoUndecoded")); + assertEquals("['test2',' ']", r.getObjectList("pathInfoParts").toString()); + assertEquals(" ", r.getString("pathRemainder")); + assertEquals("%20", r.getString("pathRemainderUndecoded")); + assertEquals(" ", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2/%20")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/test2")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2/%20")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + url = URL + "/+"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/ ", r.getString("pathInfo")); + assertEquals("/+", r.getString("pathInfoUndecoded")); + assertEquals("[' ']", r.getObjectList("pathInfoParts").toString()); + assertEquals(" ", r.getString("pathRemainder")); + assertEquals("+", r.getString("pathRemainderUndecoded")); + assertEquals(" ", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/+")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/+")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(1, (int)r.getInt("method")); + + url = URL + "/test2/+"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/ ", r.getString("pathInfo")); + assertEquals("/test2/+", r.getString("pathInfoUndecoded")); + assertEquals("['test2',' ']", r.getObjectList("pathInfoParts").toString()); + assertEquals(" ", r.getString("pathRemainder")); + assertEquals("+", r.getString("pathRemainderUndecoded")); + assertEquals(" ", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/test2/+")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/test2")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/test2/+")); + assertTrue(r.getString("servletPath").endsWith("/testPaths")); + assertTrue(r.getString("servletURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths")); + assertEquals(2, (int)r.getInt("method")); + + url = URL + "/a/+"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/ ", r.getString("pathInfo")); + assertEquals("/+", r.getString("pathInfoUndecoded")); + assertEquals("[' ']", r.getObjectList("pathInfoParts").toString()); + assertEquals(" ", r.getString("pathRemainder")); + assertEquals("+", r.getString("pathRemainderUndecoded")); + assertEquals(" ", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/+")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/+")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(3, (int)r.getInt("method")); + + url = URL + "/a/test2/+"; + r = client.doGet(url).getResponse(ObjectMap.class); + assertEquals("/test2/ ", r.getString("pathInfo")); + assertEquals("/test2/+", r.getString("pathInfoUndecoded")); + assertEquals("['test2',' ']", r.getObjectList("pathInfoParts").toString()); + assertEquals(" ", r.getString("pathRemainder")); + assertEquals("+", r.getString("pathRemainderUndecoded")); + assertEquals(" ", r.getString("pathRemainder2")); + assertTrue(r.getString("requestURI").endsWith("/testPaths/a/test2/+")); + assertTrue(r.getString("requestParentURI").endsWith("/testPaths/a/test2")); + assertTrue(r.getString("requestURL").endsWith("/testPaths/a/test2/+")); + assertTrue(r.getString("servletPath").endsWith("/testPaths/a")); + assertTrue(r.getString("servletURI").endsWith("/testPaths/a")); + assertTrue(r.getString("servletParentURI").endsWith("/testPaths")); + assertTrue(r.getString("relativeServletURI").endsWith("/testPaths/a")); + assertEquals(4, (int)r.getInt("method")); + + client.closeQuietly(); + } +}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/244cc21a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestProperties.java ---------------------------------------------------------------------- diff --git a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestProperties.java b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestProperties.java new file mode 100755 index 0000000..f66ad17 --- /dev/null +++ b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestProperties.java @@ -0,0 +1,48 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ +package org.apache.juneau.server; + +import static org.junit.Assert.*; + +import org.apache.juneau.client.*; +import org.apache.juneau.json.*; +import org.junit.*; + +public class CT_TestProperties { + + private static String URL = "/testProperties"; + + //==================================================================================================== + // Properties defined on method. + //==================================================================================================== + @Test + public void testPropertiesDefinedOnMethod() throws Exception { + RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT); + String r = client.doGet(URL + "/testPropertiesDefinedOnMethod").getResponseAsString(); + assertTrue(r.matches("A1=a1,A2=c,B1=b1,B2=c,C=c,R1a=.*/testProperties/testPropertiesDefinedOnMethod,R1b=.*/testProperties,R2=bar,R3=baz,R4=a1,R5=c,R6=c")); + + client.closeQuietly(); + } + + //==================================================================================================== + // Make sure attributes/parameters/headers are available through ctx.getProperties(). + //==================================================================================================== + @Test + public void testProperties() throws Exception { + RestClient client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT); + String r = client.doGet(URL + "/testProperties/a1?P=p1").setHeader("H", "h1").getResponseAsString(); + assertEquals("A=a1,P=p1,H=h1", r); + + client.closeQuietly(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/244cc21a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestRestClient.java ---------------------------------------------------------------------- diff --git a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestRestClient.java b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestRestClient.java new file mode 100755 index 0000000..b3109d4 --- /dev/null +++ b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestRestClient.java @@ -0,0 +1,199 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ +package org.apache.juneau.server; + +import static org.apache.juneau.server.TestUtils.*; +import static org.junit.Assert.*; + +import java.util.*; +import java.util.regex.*; + +import org.apache.http.entity.*; +import org.apache.juneau.client.*; +import org.apache.juneau.json.*; +import org.junit.*; + +public class CT_TestRestClient { + + private static String URL = "/testRestClient"; + + //==================================================================================================== + // successPattern() + //==================================================================================================== + @Test + public void testSuccessPattern() throws Exception { + RestClient c = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT); + String r; + int rc; + + r = c.doPost(URL, new StringEntity("xxxSUCCESSxxx")).successPattern("SUCCESS").getResponseAsString(); + assertEquals("xxxSUCCESSxxx", r); + rc = c.doPost(URL, new StringEntity("xxxSUCCESSxxx")).successPattern("SUCCESS").run(); + assertEquals(200, rc); + + try { + r = c.doPost(URL, new StringEntity("xxxFAILURExxx")).successPattern("SUCCESS").getResponseAsString(); + fail(); + } catch (RestCallException e) { + assertEquals("Success pattern not detected.", e.getLocalizedMessage()); + } + + c.closeQuietly(); + } + + //==================================================================================================== + // failurePattern() + //==================================================================================================== + @Test + public void testFailurePattern() throws Exception { + RestClient c = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT); + String r; + int rc; + + r = c.doPost(URL, new StringEntity("xxxSUCCESSxxx")).failurePattern("FAILURE").getResponseAsString(); + assertEquals("xxxSUCCESSxxx", r); + rc = c.doPost(URL, new StringEntity("xxxSUCCESSxxx")).failurePattern("FAILURE").run(); + assertEquals(200, rc); + + try { + r = c.doPost(URL, new StringEntity("xxxFAILURExxx")).failurePattern("FAILURE").getResponseAsString(); + fail(); + } catch (RestCallException e) { + assertEquals("Failure pattern detected.", e.getLocalizedMessage()); + } + + try { + r = c.doPost(URL, new StringEntity("xxxERRORxxx")).failurePattern("FAILURE|ERROR").getResponseAsString(); + fail(); + } catch (RestCallException e) { + assertEquals("Failure pattern detected.", e.getLocalizedMessage()); + } + + c.closeQuietly(); + } + + //==================================================================================================== + // captureResponse()/getCapturedResponse() + //==================================================================================================== + @Test + public void testCaptureResponse() throws Exception { + RestClient c = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT); + RestCall rc = c.doPost(URL, new StringEntity("xxx")).captureResponse(); + + try { + rc.getCapturedResponse(); + fail(); + } catch (IllegalStateException e) { + assertEquals("This method cannot be called until the response has been consumed.", e.getLocalizedMessage()); + } + rc.run(); + assertEquals("xxx", rc.getCapturedResponse()); + assertEquals("xxx", rc.getCapturedResponse()); + + rc = c.doPost(URL, new StringEntity("xxx")).captureResponse(); + assertEquals("xxx", rc.getResponseAsString()); + assertEquals("xxx", rc.getCapturedResponse()); + assertEquals("xxx", rc.getCapturedResponse()); + + try { + rc.getResponseAsString(); + fail(); + } catch (IllegalStateException e) { + assertEquals("Method cannot be called. Response has already been consumed.", e.getLocalizedMessage()); + } + + c.closeQuietly(); + } + + //==================================================================================================== + // addResponsePattern() + //==================================================================================================== + @Test + public void testAddResponsePattern() throws Exception { + RestClient c = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT); + String r; + + final List<String> l = new ArrayList<String>(); + ResponsePattern p = new ResponsePattern("x=(\\d+),y=(\\S+)") { + @Override + public void onMatch(RestCall restCall, Matcher m) throws RestCallException { + l.add(m.group(1)+'/'+m.group(2)); + } + @Override + public void onNoMatch(RestCall restCall) throws RestCallException { + throw new RestCallException("Pattern not found!"); + } + }; + + r = c.doPost(URL, new StringEntity("x=1,y=2")).addResponsePattern(p).getResponseAsString(); + assertEquals("x=1,y=2", r); + assertObjectEquals("['1/2']", l); + + l.clear(); + + r = c.doPost(URL, new StringEntity("x=1,y=2\nx=3,y=4")).addResponsePattern(p).getResponseAsString(); + assertEquals("x=1,y=2\nx=3,y=4", r); + assertObjectEquals("['1/2','3/4']", l); + + try { + c.doPost(URL, new StringEntity("x=1")).addResponsePattern(p).run(); + fail(); + } catch (RestCallException e) { + assertEquals("Pattern not found!", e.getLocalizedMessage()); + assertEquals(0, e.getResponseCode()); + } + + // Two patterns! + ResponsePattern p1 = new ResponsePattern("x=(\\d+)") { + @Override + public void onMatch(RestCall restCall, Matcher m) throws RestCallException { + l.add("x="+m.group(1)); + } + @Override + public void onNoMatch(RestCall restCall) throws RestCallException { + throw new RestCallException("Pattern x not found!"); + } + }; + ResponsePattern p2 = new ResponsePattern("y=(\\S+)") { + @Override + public void onMatch(RestCall restCall, Matcher m) throws RestCallException { + l.add("y="+m.group(1)); + } + @Override + public void onNoMatch(RestCall restCall) throws RestCallException { + throw new RestCallException("Pattern y not found!"); + } + }; + + l.clear(); + r = c.doPost(URL, new StringEntity("x=1,y=2\nx=3,y=4")).addResponsePattern(p1).addResponsePattern(p2).getResponseAsString(); + assertEquals("x=1,y=2\nx=3,y=4", r); + assertObjectEquals("['x=1','x=3','y=2','y=4']", l); + + try { + c.doPost(URL, new StringEntity("x=1\nx=3")).addResponsePattern(p1).addResponsePattern(p2).getResponseAsString(); + } catch (RestCallException e) { + assertEquals("Pattern y not found!", e.getLocalizedMessage()); + assertEquals(0, e.getResponseCode()); + } + + try { + c.doPost(URL, new StringEntity("y=1\ny=3")).addResponsePattern(p1).addResponsePattern(p2).getResponseAsString(); + } catch (RestCallException e) { + assertEquals("Pattern x not found!", e.getLocalizedMessage()); + assertEquals(0, e.getResponseCode()); + } + + c.closeQuietly(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/244cc21a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestSerializers.java ---------------------------------------------------------------------- diff --git a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestSerializers.java b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestSerializers.java new file mode 100755 index 0000000..ac3bf6a --- /dev/null +++ b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestSerializers.java @@ -0,0 +1,152 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ +package org.apache.juneau.server; + +import static javax.servlet.http.HttpServletResponse.*; +import static org.apache.juneau.server.TestUtils.*; +import static org.junit.Assert.*; + +import org.apache.juneau.client.*; +import org.apache.juneau.json.*; +import org.junit.*; + +public class CT_TestSerializers { + + private static String URL = "/testSerializers"; + private static boolean debug = false; + private static RestClient client; + + @BeforeClass + public static void beforeClass() { + client = new TestRestClient(JsonSerializer.DEFAULT, JsonParser.DEFAULT); + } + + @AfterClass + public static void afterClass() { + client.closeQuietly(); + } + + //==================================================================================================== + // Serializer defined on class. + //==================================================================================================== + @Test + public void testSerializerOnClass() throws Exception { + String url = URL + "/testSerializerOnClass"; + + client.setAccept("text/a"); + String r = client.doGet(url).getResponseAsString(); + assertEquals("text/a - test1", r); + + try { + client.setAccept("text/b"); + client.doGet(url + "?noTrace=true").getResponseAsString(); + fail("Exception expected"); + } catch (RestCallException e) { + checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE, + "Unsupported media-type in request header 'Accept': 'text/b'", + "Supported media-types: [text/a, "); + } + + client.setAccept("text/json"); + r = client.doGet(url).getResponseAsString(); + assertEquals("\"test1\"", r); + } + + //==================================================================================================== + // Serializer defined on method. + //==================================================================================================== + @Test + public void testSerializerOnMethod() throws Exception { + String url = URL + "/testSerializerOnMethod"; + + try { + client.setAccept("text/a"); + client.doGet(url + "?noTrace=true").getResponseAsString(); + fail("Exception expected"); + } catch (RestCallException e) { + checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE, + "Unsupported media-type in request header 'Accept': 'text/a'", + "Supported media-types: [text/b]" + ); + } + + try { + client.setAccept("text/json"); + client.doGet(url + "?noTrace=true").getResponseAsString(); + fail("Exception expected"); + } catch (RestCallException e) { + checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE, + "Unsupported media-type in request header 'Accept': 'text/json'", + "Supported media-types: [text/b]" + ); + } + } + + //==================================================================================================== + // Serializer overridden on method. + //==================================================================================================== + @Test + public void testSerializerOverriddenOnMethod() throws Exception { + String url = URL + "/testSerializerOverriddenOnMethod"; + + client.setAccept("text/a"); + String r = client.doGet(url).getResponseAsString(); + assertEquals("text/c - test3", r); + + client.setAccept("text/b"); + r = client.doGet(url).getResponseAsString(); + assertEquals("text/b - test3", r); + + client.setAccept("text/json"); + r = client.doGet(url).getResponseAsString(); + assertEquals("\"test3\"", r); + } + + //==================================================================================================== + // Serializer with different Accept than Content-Type. + //==================================================================================================== + @Test + public void testSerializerWithDifferentMediaTypes() throws Exception { + String url = URL + "/testSerializerWithDifferentMediaTypes"; + + client.setAccept("text/a"); + String r = client.doGet(url).getResponseAsString(); + assertEquals("text/d - test4", r); + + client.setAccept("text/d"); + r = client.doGet(url).getResponseAsString(); + assertEquals("text/d - test4", r); + + client.setAccept("text/json"); + r = client.doGet(url).getResponseAsString(); + assertEquals("\"test4\"", r); + } + + //==================================================================================================== + // Check for valid 406 error response. + //==================================================================================================== + @Test + public void test406() throws Exception { + String url = URL + "/test406"; + + try { + client.setAccept("text/bad"); + client.doGet(url + "?noTrace=true").getResponseAsString(); + fail("Exception expected"); + } catch (RestCallException e) { + checkErrorResponse(debug, e, SC_NOT_ACCEPTABLE, + "Unsupported media-type in request header 'Accept': 'text/bad'", + "Supported media-types: [text/a"); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/244cc21a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestStaticFiles.java ---------------------------------------------------------------------- diff --git a/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestStaticFiles.java b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestStaticFiles.java new file mode 100755 index 0000000..46fce22 --- /dev/null +++ b/org.apache.juneau.server.test/src/test/java/org/apache/juneau/server/CT_TestStaticFiles.java @@ -0,0 +1,56 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ +package org.apache.juneau.server; + +import static org.junit.Assert.*; + +import org.apache.juneau.client.*; +import org.apache.juneau.plaintext.*; +import org.junit.*; + +public class CT_TestStaticFiles { + + private static String URL = "/testStaticFiles"; + + //==================================================================================================== + // Tests the @RestResource(staticFiles) annotation. + //==================================================================================================== + @Test + public void testXdocs() throws Exception { + RestClient client = new TestRestClient(PlainTextSerializer.class, PlainTextParser.class); + String r; + String url = URL + "/xdocs"; + + r = client.doGet(url + "/test.txt").getResponseAsString(); + assertEquals("OK-1", r); + r = client.doGet(url + "/xdocs/test.txt").getResponseAsString(); + assertEquals("OK-2", r); + + // For security reasons, paths containing ".." should always return 404. + try { + client.doGet(url + "/xdocs/../test.txt?noTrace=true").connect(); + fail("404 exception expected"); + } catch (RestCallException e) { + assertEquals(404, e.getResponseCode()); + } + + try { + client.doGet(url + "/xdocs/%2E%2E/test.txt?noTrace=true").connect(); + fail("404 exception expected"); + } catch (RestCallException e) { + assertEquals(404, e.getResponseCode()); + } + + client.closeQuietly(); + } +}