/** * 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.servlet.filters.aggregate; import com.liferay.portal.kernel.servlet.ServletContextUtil; import com.liferay.portal.kernel.test.CaptureHandler; import com.liferay.portal.kernel.test.JDKLoggerTestUtil; import com.liferay.portal.kernel.test.rule.CodeCoverageAssertor; import com.liferay.portal.kernel.util.FileUtil; import com.liferay.portal.kernel.util.StringPool; import com.liferay.portal.kernel.util.SystemProperties; import com.liferay.portal.util.FileImpl; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; import java.util.List; import java.util.logging.Level; import java.util.logging.LogRecord; import javax.servlet.ServletContext; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; import org.springframework.mock.web.MockServletContext; /** * @author Shuyang Zhou */ public class ServletPathsTest { @ClassRule public static final CodeCoverageAssertor codeCoverageAssertor = CodeCoverageAssertor.INSTANCE; @BeforeClass public static void setUpClass() { FileUtil fileUtil = new FileUtil(); fileUtil.setFile(new FileImpl()); FileUtil.deltree(_testDir); } @AfterClass public static void tearDownClass() { FileUtil.deltree(_testDir); } @Test public void testConstructor() { try { new ServletPaths(null, null); Assert.fail(); } catch (NullPointerException npe) { Assert.assertEquals("Servlet context is null", npe.getMessage()); } try { new ServletPaths(new MockServletContext(), null); Assert.fail(); } catch (IllegalArgumentException iae) { Assert.assertEquals("Resource path is null", iae.getMessage()); } ServletContext servletContext = _prepareServletContext( new MockServletContext()); ServletPaths servletPaths = new ServletPaths( servletContext, "/test1/test2/"); Assert.assertEquals("/test1/test2/", servletPaths.getResourcePath()); servletPaths = new ServletPaths(servletContext, "test1/"); Assert.assertEquals("test1/", servletPaths.getResourcePath()); } @Test public void testDown() { ServletContext servletContext = _prepareServletContext( new MockServletContext()); ServletPaths servletPaths1 = new ServletPaths(servletContext, "/test1"); Assert.assertSame(servletPaths1, servletPaths1.down(null)); Assert.assertSame(servletPaths1, servletPaths1.down(StringPool.SLASH)); ServletPaths servletPaths2 = servletPaths1.down("test2/"); Assert.assertEquals("/test1/test2", servletPaths2.getResourcePath()); ServletPaths servletPaths3 = servletPaths1.down("/test2"); Assert.assertEquals("/test1/test2", servletPaths3.getResourcePath()); ServletPaths servletPaths4 = new ServletPaths(servletContext, "test1/"); ServletPaths servletPaths5 = servletPaths4.down("test2"); Assert.assertEquals("test1/test2", servletPaths5.getResourcePath()); } @Test public void testGetContent() throws IOException { final File file1 = new File(_testDir, "test1"); final File file2 = new File(_testDir, "test2"); String testContent = "Test Content"; FileUtil.write(file2, testContent); ServletContext servletContext = new MockServletContext() { @Override public URL getResource(String path) throws MalformedURLException { if (path.contains(file1.getName())) { URI uri = file1.toURI(); return uri.toURL(); } if (path.contains(file2.getName())) { URI uri = file2.toURI(); return uri.toURL(); } return super.getResource(path); } }; servletContext = _prepareServletContext(servletContext); ServletPaths servletPaths = new ServletPaths(servletContext, "test"); Assert.assertNull(servletPaths.getContent()); try (CaptureHandler captureHandler = JDKLoggerTestUtil.configureJDKLogger( ServletPaths.class.getName(), Level.SEVERE)) { List<LogRecord> logRecords = captureHandler.getLogRecords(); servletPaths = new ServletPaths(servletContext, file1.getName()); Assert.assertNull(servletPaths.getContent()); Assert.assertEquals(logRecords.toString(), 1, logRecords.size()); LogRecord logRecord = logRecords.get(0); Throwable throwable = logRecord.getThrown(); Assert.assertSame( FileNotFoundException.class, throwable.getClass()); servletPaths = new ServletPaths(servletContext, file2.getName()); Assert.assertEquals(testContent, servletPaths.getContent()); } } @Test public void testGetParentPath() { try { ServletPaths.getParentPath(null); Assert.fail(); } catch (IllegalArgumentException iae) { Assert.assertEquals("Resource path is null", iae.getMessage()); } Assert.assertEquals( "test1", ServletPaths.getParentPath("test1/test2/")); Assert.assertEquals("test1", ServletPaths.getParentPath("test1/test2")); Assert.assertEquals("test1", ServletPaths.getParentPath("test1/")); Assert.assertEquals("test1", ServletPaths.getParentPath("test1")); } private ServletContext _prepareServletContext( ServletContext servletContext) { File webINFFile = new File(_testDir, ServletContextUtil.PATH_WEB_INF); servletContext.setAttribute( ServletContextUtil.URI_ATTRIBUTE, webINFFile.toURI()); return servletContext; } private static final File _testDir = new File( SystemProperties.get(SystemProperties.TMP_DIR), ServletPathsTest.class.getSimpleName()); }