/* * 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.wicket.protocol.http.mock; import java.util.Enumeration; import java.util.Locale; import javax.servlet.http.HttpSession; import org.apache.wicket.Session; import org.apache.wicket.request.Url; import org.apache.wicket.util.tester.WicketTestCase; import org.junit.Test; import org.mockito.Mockito; import static org.hamcrest.Matchers.is; /** * test features of {@link MockHttpServletRequest} */ public class MockHttpServletRequestTest extends WicketTestCase { @Test public void setAbsoluteUrlWithHost() { MockHttpServletRequest request = tester.getRequest(); assertEquals("http", request.getScheme()); assertEquals("localhost", request.getServerName()); assertEquals(80, request.getServerPort()); request.setURL("https://myhost.mydomain.org:1234/foo/bar/baz.html?a=123&b=456"); assertEquals("https", request.getScheme()); assertEquals("myhost.mydomain.org", request.getServerName()); assertEquals(1234, request.getServerPort()); Url url = request.getUrl(); assertEquals("https", url.getProtocol()); assertEquals("myhost.mydomain.org", url.getHost()); assertEquals(new Integer(1234), url.getPort()); assertEquals("/foo/bar/baz.html", url.getPath()); assertEquals("a=123&b=456", url.getQueryString()); String pathInfo = request.getPathInfo(); assertEquals("/foo/bar/baz.html", pathInfo); } @Test public void setAbsoluteUrlWithoutHost() { MockHttpServletRequest request = tester.getRequest(); assertEquals("http", request.getScheme()); assertEquals("localhost", request.getServerName()); assertEquals(80, request.getServerPort()); request.setURL("/foo/bar/baz.html?a=123&b=456"); assertEquals("http", request.getScheme()); assertEquals("localhost", request.getServerName()); assertEquals(80, request.getServerPort()); Url url = request.getUrl(); assertEquals("http", url.getProtocol()); assertEquals("localhost", url.getHost()); assertEquals(new Integer(80), url.getPort()); assertEquals("/foo/bar/baz.html", url.getPath()); assertEquals("a=123&b=456", url.getQueryString()); String pathInfo = request.getPathInfo(); assertEquals("/foo/bar/baz.html", pathInfo); } @Test public void setRelativeUrl() { MockHttpServletRequest request = tester.getRequest(); assertEquals("http", request.getScheme()); assertEquals("localhost", request.getServerName()); assertEquals(80, request.getServerPort()); request.setURL("foo/bar/baz.html?a=123&b=456"); assertEquals("http", request.getScheme()); assertEquals("localhost", request.getServerName()); assertEquals(80, request.getServerPort()); Url url = request.getUrl(); assertEquals("http", url.getProtocol()); assertEquals("localhost", url.getHost()); assertEquals(new Integer(80), url.getPort()); assertEquals(request.getContextPath() + request.getServletPath() + "/foo/bar/baz.html", url.getPath()); assertEquals("a=123&b=456", url.getQueryString()); String pathInfo = request.getPathInfo(); assertEquals("/foo/bar/baz.html", pathInfo); } /** * WICKET-4664 - no query string returns null as per HttpServletRequest */ @Test public void testNoQueryString_returnsNull() { MockHttpServletRequest request = tester.getRequest(); request.setURL("my/servlet/without/query/param"); Url url = request.getUrl(); assertNull(url.getQueryString()); } @Test public void getSessionFromNonMockHttpSession() { HttpSession httpSession = Mockito.mock(HttpSession.class); MockHttpServletRequest request = new MockHttpServletRequest(null, httpSession, null); assertNull("MockHttpServletRequest knows how to work only with MockHttpSession", request.getSession(true)); assertNull("MockHttpServletRequest knows how to work only with MockHttpSession", request.getSession(false)); } @Test public void getSessionFalseFromMockHttpSession() { HttpSession httpSession = new MockHttpSession(null); MockHttpServletRequest request = new MockHttpServletRequest(null, httpSession, null); assertNull("HttpSession should not be created!", request.getSession(false)); } @Test public void getSessionDefaultFromMockHttpSession() { HttpSession httpSession = new MockHttpSession(null); MockHttpServletRequest request = new MockHttpServletRequest(null, httpSession, null); assertSame("HttpSession should be created!", httpSession, request.getSession()); } @Test public void getSessionTrueFromMockHttpSession() { HttpSession httpSession = new MockHttpSession(null); MockHttpServletRequest request = new MockHttpServletRequest(null, httpSession, null); assertSame("HttpSession should be created!", httpSession, request.getSession(true)); } /** * https://issues.apache.org/jira/browse/WICKET-4481 */ @Test public void setHeader() { HttpSession httpSession = new MockHttpSession(null); MockHttpServletRequest request = new MockHttpServletRequest(null, httpSession, null); String headerName = "headerName"; request.setHeader(headerName, "headerValue"); Enumeration<String> headers = request.getHeaders(headerName); assertEquals("headerValue", headers.nextElement()); assertFalse(headers.hasMoreElements()); request.addHeader(headerName, "headerValue2"); headers = request.getHeaders(headerName); assertEquals("headerValue", headers.nextElement()); assertEquals("headerValue2", headers.nextElement()); assertFalse(headers.hasMoreElements()); request.setHeader(headerName, "completelyNewValue"); headers = request.getHeaders(headerName); assertEquals("completelyNewValue", headers.nextElement()); assertFalse(headers.hasMoreElements()); } @Test public void setLocale() { Session session = tester.getSession(); session.setLocale(Locale.US); tester.getRequest().setLocale(Locale.CANADA_FRENCH); session.invalidateNow(); assertThat(tester.getSession().getLocale(), is(Locale.CANADA_FRENCH)); } }