/**
* 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.osgi.web.portlet.container.upload.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.portal.kernel.servlet.ServletInputStreamAdapter;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.upload.FileItem;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.ProgressTracker;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.SystemProperties;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.upload.LiferayInputStream;
import com.liferay.portal.upload.LiferayServletRequest;
import com.liferay.portal.upload.UploadServletRequestImpl;
import com.liferay.portal.util.PrefsPropsUtil;
import com.liferay.portal.util.test.PortletContainerTestUtil;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.runners.Enclosed;
import org.junit.rules.TemporaryFolder;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.springframework.mock.web.MockHttpServletRequest;
/**
* @author Manuel de la Peña
*/
@RunWith(Enclosed.class)
public class UploadServletRequestTest {
@RunWith(Arquillian.class)
public static class WhenCleaningUp {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldNotRemoveMultipartParameters() throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
uploadServletRequest.cleanUp();
Map<String, FileItem[]> multipartParameterMap =
uploadServletRequest.getMultipartParameterMap();
Assert.assertNotNull(multipartParameterMap);
Assert.assertEquals(
multipartParameterMap.toString(), 1,
multipartParameterMap.size());
}
}
@RunWith(Arquillian.class)
public static final class WhenCreatingFromMainConstructor {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldAddProgressTrackerToSession() throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
HttpServletRequest mockHttpServletRequest =
(HttpServletRequest)liferayServletRequest.getRequest();
new UploadServletRequestImpl(mockHttpServletRequest);
HttpSession mockHttpSession = mockHttpServletRequest.getSession();
Assert.assertNotNull(
mockHttpSession.getAttribute(ProgressTracker.PERCENT));
}
@Test
public void shouldNotPopulateParameters() throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
HttpServletRequest mockHttpServletRequest =
(HttpServletRequest)liferayServletRequest.getRequest();
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(mockHttpServletRequest);
Map<String, FileItem[]> multipartParameterMap =
uploadServletRequest.getMultipartParameterMap();
Assert.assertNotNull(multipartParameterMap);
Assert.assertTrue(
multipartParameterMap.toString(),
multipartParameterMap.isEmpty());
Map<String, List<String>> regularParameterMap =
uploadServletRequest.getRegularParameterMap();
Assert.assertNotNull(regularParameterMap);
Assert.assertTrue(
regularParameterMap.toString(), regularParameterMap.isEmpty());
}
}
@RunWith(Arquillian.class)
public static final class WhenCreatingFromParametrizedConstructor {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldNotPopulateParametersWithEmptyParameters()
throws Exception {
Map<String, FileItem[]> fileParameters = Collections.emptyMap();
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> multipartParameterMap =
uploadServletRequest.getMultipartParameterMap();
Assert.assertNotNull(multipartParameterMap);
Assert.assertTrue(
multipartParameterMap.toString(),
multipartParameterMap.isEmpty());
Map<String, List<String>> regularParameterMap =
uploadServletRequest.getRegularParameterMap();
Assert.assertNotNull(regularParameterMap);
Assert.assertTrue(
regularParameterMap.toString(), regularParameterMap.isEmpty());
}
@Test
public void shouldPopulateMultipartParametersWithFileParameters()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> multipartParameterMap =
uploadServletRequest.getMultipartParameterMap();
Assert.assertNotNull(multipartParameterMap);
Assert.assertEquals(
multipartParameterMap.toString(), 1,
multipartParameterMap.size());
Map<String, List<String>> regularParameterMap =
uploadServletRequest.getRegularParameterMap();
Assert.assertNotNull(regularParameterMap);
Assert.assertTrue(
regularParameterMap.toString(), regularParameterMap.isEmpty());
}
@Test
public void shouldPopulateRegularParametersWithRegularParameters()
throws Exception {
Map<String, List<String>> regularParameters =
PortletContainerTestUtil.getRegularParameters(10);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(), regularParameters);
Map<String, FileItem[]> multipartParameterMap =
uploadServletRequest.getMultipartParameterMap();
Assert.assertNotNull(multipartParameterMap);
Assert.assertTrue(
multipartParameterMap.toString(),
multipartParameterMap.isEmpty());
Map<String, List<String>> regularParameterMap =
uploadServletRequest.getRegularParameterMap();
Assert.assertNotNull(regularParameterMap);
Assert.assertEquals(
regularParameterMap.toString(), 10, regularParameterMap.size());
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingContentType {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnFirstFileItemContentType() throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 1, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
FileItem[] fileItems = entry.getValue();
FileItem firstFileItem = fileItems[0];
Assert.assertEquals(
firstFileItem.getContentType(),
uploadServletRequest.getContentType(key));
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(uploadServletRequest.getContentType("name"));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingFile {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnAFile() throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 1, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
File file = uploadServletRequest.getFile(key);
Assert.assertNotNull(file);
Assert.assertTrue(file.exists());
file = uploadServletRequest.getFile(key, true);
Assert.assertNotNull(file);
Assert.assertTrue(file.exists());
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(uploadServletRequest.getFile("irrelevantName"));
Assert.assertNull(
uploadServletRequest.getFile("irrelevantName", true));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(uploadServletRequest.getFile("nonexistentFile"));
Assert.assertNull(
uploadServletRequest.getFile("nonexistentFile", true));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingFileAsStream {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnAStream() throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 1, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
InputStream inputStream = uploadServletRequest.getFileAsStream(
key);
Assert.assertNotNull(inputStream);
inputStream = uploadServletRequest.getFileAsStream(key, true);
Assert.assertNotNull(inputStream);
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFileAsStream("irrelevantName"));
Assert.assertNull(
uploadServletRequest.getFileAsStream("irrelevantName", true));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFileAsStream("nonexistentFile"));
Assert.assertNull(
uploadServletRequest.getFileAsStream("nonexistentFile", true));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingFileName {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnFirstFileNameFromFileParameters()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 1, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
String fileName = uploadServletRequest.getFileName(key);
FileItem[] fileItems = entry.getValue();
FileItem firstFileItem = fileItems[0];
Assert.assertEquals(firstFileItem.getFileName(), fileName);
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFileName("irrelevantName"));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFileName("nonexistentFile"));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingFileNames {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnAnArrayWithFileNamesFromFileParameters()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(10, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 10, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
String[] fileNames = uploadServletRequest.getFileNames(key);
FileItem[] fileItems = entry.getValue();
Assert.assertEquals(
Arrays.toString(fileNames), fileItems.length,
fileNames.length);
Assert.assertEquals(
Arrays.toString(fileNames), 2, fileNames.length);
for (int i = 0; i < fileNames.length; i++) {
Assert.assertEquals(
fileItems[i].getFileName(), fileNames[i]);
}
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFileNames("irrelevantName"));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFileNames("nonexistentFile"));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingFiles {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnArrayWithStoreLocationsFromFileParameters()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(10, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 10, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
File[] files = uploadServletRequest.getFiles(key);
FileItem[] fileItems = entry.getValue();
Assert.assertEquals(
Arrays.toString(files), fileItems.length, files.length);
Assert.assertEquals(Arrays.toString(files), 2, files.length);
for (int i = 0; i < files.length; i++) {
File storeLocation = fileItems[i].getStoreLocation();
Assert.assertEquals(
storeLocation.getAbsolutePath(),
files[i].getAbsolutePath());
}
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(uploadServletRequest.getFiles("irrelevantName"));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(uploadServletRequest.getFiles("nonexistentFile"));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingFilesAsStream {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnArrayWithStreamsFromFileParameters()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(10, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 10, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
InputStream[] inputStreams =
uploadServletRequest.getFilesAsStream(key);
FileItem[] fileItems = entry.getValue();
Assert.assertEquals(
Arrays.toString(inputStreams), fileItems.length,
inputStreams.length);
Assert.assertEquals(
Arrays.toString(inputStreams), 2, inputStreams.length);
for (int i = 0; i < inputStreams.length; i++) {
Assert.assertTrue(
IOUtils.contentEquals(
fileItems[i].getInputStream(), inputStreams[i]));
}
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFilesAsStream("irrelevantName"));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFilesAsStream("nonexistentFile"));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingFullFileName {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnFirstFileNameFromFileParameters()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 1, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
String fullFileName = uploadServletRequest.getFullFileName(key);
FileItem[] fileItems = entry.getValue();
FileItem firstFileItem = fileItems[0];
Assert.assertEquals(
firstFileItem.getFullFileName(), fullFileName);
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFullFileName("irrelevantName"));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.getFullFileName("nonexistentFile"));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingInputStream {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldNotReturnLiferayInputStream() throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest());
ServletInputStream inputStream =
uploadServletRequest.getInputStream();
Assert.assertFalse(inputStream instanceof LiferayInputStream);
uploadServletRequest = new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
inputStream = uploadServletRequest.getInputStream();
Assert.assertFalse(inputStream instanceof LiferayInputStream);
}
@Test
public void shouldReturnServletInputStreamAdapter() throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest());
ServletInputStream inputStream =
uploadServletRequest.getInputStream();
Assert.assertTrue(inputStream instanceof ServletInputStreamAdapter);
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingParameterNames {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldMergeRegularFileAndRequestParameters()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(10, _bytes);
Map<String, List<String>> regularParameters =
PortletContainerTestUtil.getRegularParameters(10);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
String parameter = RandomTestUtil.randomString();
MockHttpServletRequest mockHttpServletRequest =
(MockHttpServletRequest)liferayServletRequest.getRequest();
mockHttpServletRequest.addParameter(parameter, parameter);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, regularParameters);
Enumeration<String> parameterNames =
uploadServletRequest.getParameterNames();
List<String> parameterNamesList = Collections.list(parameterNames);
for (Map.Entry<String, List<String>> entry :
regularParameters.entrySet()) {
Assert.assertTrue(parameterNamesList.contains(entry.getKey()));
}
for (Map.Entry<String, FileItem[]> entry :
fileParameters.entrySet()) {
Assert.assertTrue(parameterNamesList.contains(entry.getKey()));
}
Assert.assertTrue(parameterNamesList.contains(parameter));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingParameterValues {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldMergeRegularAndRequestParameters() throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(10, _bytes);
Map<String, List<String>> regularParameters =
PortletContainerTestUtil.getRegularParameters(10);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
String parameter = RandomTestUtil.randomString();
MockHttpServletRequest mockHttpServletRequest =
(MockHttpServletRequest)liferayServletRequest.getRequest();
mockHttpServletRequest.addParameter(parameter, parameter);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, regularParameters);
for (Map.Entry<String, List<String>> entry :
regularParameters.entrySet()) {
String key = entry.getKey();
String[] parameterValues =
uploadServletRequest.getParameterValues(key);
List<String> parameterValuesList = ListUtil.fromArray(
parameterValues);
Assert.assertTrue(
parameterValuesList.containsAll(entry.getValue()));
}
String[] requestParameterValues =
uploadServletRequest.getParameterValues(parameter);
ArrayUtil.contains(requestParameterValues, parameter);
for (Map.Entry<String, FileItem[]> entry :
fileParameters.entrySet()) {
String key = entry.getKey();
String[] parameterValues =
uploadServletRequest.getParameterValues(key);
List<String> parameterValuesList = ListUtil.fromArray(
parameterValues);
Assert.assertFalse(parameterValuesList.contains(key));
}
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingSize {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnFirstSizeFromFileParameters() throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 1, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
Long size = uploadServletRequest.getSize(key);
FileItem[] fileItems = entry.getValue();
FileItem firstFileItem = fileItems[0];
Assert.assertEquals(firstFileItem.getSize(), size.longValue());
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(uploadServletRequest.getSize("irrelevantName"));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(uploadServletRequest.getSize("nonexistentFile"));
}
}
@RunWith(Arquillian.class)
public static final class WhenGettingTempDir {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldNotReturnPreferencesValueWhenModified()
throws IOException {
File tempDir = UploadServletRequestImpl.getTempDir();
try {
TemporaryFolder temporaryFolder = new TemporaryFolder();
temporaryFolder.create();
File newTempDir = temporaryFolder.getRoot();
UploadServletRequestImpl.setTempDir(newTempDir);
File currentTempDir = UploadServletRequestImpl.getTempDir();
Assert.assertEquals(temporaryFolder.getRoot(), currentTempDir);
}
finally {
UploadServletRequestImpl.setTempDir(tempDir);
}
}
@Test
public void shouldReturnPreferencesValue() {
File tempDir = UploadServletRequestImpl.getTempDir();
File expectedTempDir = new File(
PrefsPropsUtil.getString(
PropsKeys.UPLOAD_SERVLET_REQUEST_IMPL_TEMP_DIR,
SystemProperties.get(SystemProperties.TMP_DIR)));
Assert.assertEquals(expectedTempDir, tempDir);
}
}
@RunWith(Arquillian.class)
public static final class WhenIsFormField {
@ClassRule
@Rule
public static final TestRule aggregateTestRule =
new LiferayIntegrationTestRule();
@Before
public void setUp() throws Exception {
_setUp();
}
@Test
public void shouldReturnFirstSizeFromFileParameters() throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Map<String, FileItem[]> map =
uploadServletRequest.getMultipartParameterMap();
Assert.assertEquals(map.toString(), 1, map.size());
for (Map.Entry<String, FileItem[]> entry : map.entrySet()) {
String key = entry.getKey();
FileItem[] fileItems = entry.getValue();
FileItem firstFileItem = fileItems[0];
Assert.assertEquals(
firstFileItem.isFormField(),
uploadServletRequest.isFormField(key));
}
}
@Test
public void shouldReturnNullIfFileParametersAreEmpty()
throws Exception {
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
new HashMap<String, FileItem[]>(),
new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.isFormField("irrelevantName"));
}
@Test
public void shouldReturnNullIfNameIsNotAFileParameter()
throws Exception {
Map<String, FileItem[]> fileParameters =
PortletContainerTestUtil.getFileParameters(1, _bytes);
LiferayServletRequest liferayServletRequest =
PortletContainerTestUtil.getMultipartRequest(
_fileNameParameter, _bytes);
UploadServletRequestImpl uploadServletRequest =
new UploadServletRequestImpl(
(HttpServletRequest)liferayServletRequest.getRequest(),
fileParameters, new HashMap<String, List<String>>());
Assert.assertNull(
uploadServletRequest.isFormField("nonexistentFile"));
}
}
private static void _setUp() throws Exception {
_fileNameParameter = RandomTestUtil.randomString();
}
private static final byte[] _bytes =
"Enterprise. Open Source. For Life.".getBytes();
private static String _fileNameParameter;
}