/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.util;
import com.liferay.portal.kernel.servlet.PersistentHttpServletRequestWrapper;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.upload.UploadServletRequest;
import com.liferay.portal.kernel.util.FileUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.test.rule.SyntheticBundleRule;
import com.liferay.portal.upload.LiferayServletRequest;
import com.liferay.portal.upload.UploadServletRequestImpl;
import com.liferay.portal.util.bundle.portalimpl.TestAlwaysAllowDoAsUser;
import com.liferay.portal.util.test.AtomicState;
import com.liferay.portal.util.test.PortletContainerTestUtil;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.portlet.MockPortletRequest;
/**
* @author Peter Fellwock
*/
public class PortalImplTest {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new AggregateTestRule(
new LiferayIntegrationTestRule(),
new SyntheticBundleRule("bundle.portalimpl"));
@BeforeClass
public static void setUpClass() {
_atomicState = new AtomicState();
}
@AfterClass
public static void tearDownClass() {
_atomicState.close();
}
@Test
public void testGetOriginalServletRequest() {
HttpServletRequest request = new MockHttpServletRequest();
Assert.assertSame(
request, PortalUtil.getOriginalServletRequest(request));
HttpServletRequestWrapper requestWrapper1 =
new HttpServletRequestWrapper(request);
Assert.assertSame(
request, PortalUtil.getOriginalServletRequest(requestWrapper1));
HttpServletRequestWrapper requestWrapper2 =
new HttpServletRequestWrapper(requestWrapper1);
Assert.assertSame(
request, PortalUtil.getOriginalServletRequest(requestWrapper2));
HttpServletRequestWrapper requestWrapper3 =
new PersistentHttpServletRequestWrapper1(requestWrapper2);
HttpServletRequest originalRequest =
PortalUtil.getOriginalServletRequest(requestWrapper3);
Assert.assertSame(
PersistentHttpServletRequestWrapper1.class,
originalRequest.getClass());
Assert.assertNotSame(requestWrapper3, originalRequest);
Assert.assertSame(request, getWrappedRequest(originalRequest));
HttpServletRequestWrapper requestWrapper4 =
new PersistentHttpServletRequestWrapper2(requestWrapper3);
originalRequest = PortalUtil.getOriginalServletRequest(requestWrapper4);
Assert.assertSame(
PersistentHttpServletRequestWrapper2.class,
originalRequest.getClass());
Assert.assertNotSame(requestWrapper4, originalRequest);
originalRequest = getWrappedRequest(originalRequest);
Assert.assertSame(
PersistentHttpServletRequestWrapper1.class,
originalRequest.getClass());
Assert.assertNotSame(requestWrapper3, originalRequest);
Assert.assertSame(request, getWrappedRequest(originalRequest));
}
@Test
public void testGetUploadPortletRequestWithInvalidHttpServletRequest() {
try {
PortalUtil.getUploadPortletRequest(new MockPortletRequest());
Assert.fail();
}
catch (Exception e) {
Assert.assertTrue(e instanceof RuntimeException);
Assert.assertEquals(
"Unable to unwrap the portlet request from " +
MockPortletRequest.class,
e.getMessage());
}
}
@Test
public void testGetUploadPortletRequestWithValidHttpServletRequest()
throws Exception {
Class<?> clazz = getClass();
InputStream inputStream = clazz.getResourceAsStream(
"/com/liferay/portal/util/dependencies/test.txt");
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
"fileParameterName", FileUtil.getBytes(inputStream));
UploadServletRequest uploadServletRequest =
PortalUtil.getUploadServletRequest(
(HttpServletRequest)liferayServletRequest.getRequest());
Assert.assertTrue(
uploadServletRequest instanceof UploadServletRequestImpl);
}
@Test
public void testGetUserId() {
_atomicState.reset();
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
mockHttpServletRequest.setParameter(
"_TestAlwaysAllowDoAsUser_actionName",
TestAlwaysAllowDoAsUser.ACTION_NAME);
mockHttpServletRequest.setParameter(
"_TestAlwaysAllowDoAsUser_struts_action",
TestAlwaysAllowDoAsUser.STRUTS_ACTION);
mockHttpServletRequest.setParameter("doAsUserId", "0");
mockHttpServletRequest.setParameter(
"p_p_id", "TestAlwaysAllowDoAsUser");
long userId = PortalUtil.getUserId(mockHttpServletRequest);
Assert.assertEquals(0, userId);
Assert.assertTrue(_atomicState.isSet());
_atomicState.reset();
mockHttpServletRequest = new MockHttpServletRequest();
mockHttpServletRequest.setParameter("doAsUserId", "0");
mockHttpServletRequest.setPathInfo(
"/TestAlwaysAllowDoAsUser/" + RandomTestUtil.randomString());
userId = PortalUtil.getUserId(mockHttpServletRequest);
Assert.assertEquals(0, userId);
Assert.assertTrue(_atomicState.isSet());
}
@Test
public void testIsValidResourceId() {
Assert.assertTrue(PortalUtil.isValidResourceId("/view.jsp"));
Assert.assertFalse(
PortalUtil.isValidResourceId("/META-INF/MANIFEST.MF"));
Assert.assertFalse(
PortalUtil.isValidResourceId("/META-INF\\MANIFEST.MF"));
Assert.assertFalse(
PortalUtil.isValidResourceId("\\META-INF/MANIFEST.MF"));
Assert.assertFalse(
PortalUtil.isValidResourceId("\\META-INF\\MANIFEST.MF"));
Assert.assertFalse(PortalUtil.isValidResourceId("/WEB-INF/web.xml"));
Assert.assertFalse(PortalUtil.isValidResourceId("/WEB-INF\\web.xml"));
Assert.assertFalse(PortalUtil.isValidResourceId("\\WEB-INF/web.xml"));
Assert.assertFalse(PortalUtil.isValidResourceId("\\WEB-INF\\web.xml"));
}
protected HttpServletRequest getWrappedRequest(
HttpServletRequest requestRequest) {
HttpServletRequestWrapper requestWrapper =
(HttpServletRequestWrapper)requestRequest;
return (HttpServletRequest)requestWrapper.getRequest();
}
private static AtomicState _atomicState;
private static class PersistentHttpServletRequestWrapper1
extends PersistentHttpServletRequestWrapper {
private PersistentHttpServletRequestWrapper1(
HttpServletRequest request) {
super(request);
}
}
private static class PersistentHttpServletRequestWrapper2
extends PersistentHttpServletRequestWrapper {
private PersistentHttpServletRequestWrapper2(
HttpServletRequest request) {
super(request);
}
}
}