Java tutorial
/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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. * * Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved. */ package org.pentaho.test.platform.web; import org.apache.commons.lang3.mutable.MutableInt; import org.junit.Before; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.pentaho.platform.engine.core.system.PentahoSystem; import org.pentaho.platform.engine.core.system.boot.PlatformInitializationException; import org.pentaho.platform.web.servlet.GetImage; import org.pentaho.test.platform.engine.core.MicroPlatform; import org.pentaho.test.platform.utils.TestResourceLocation; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; /** * Tests for <code>org.pentaho.platform.web.servlet.GetImage</code>. * * @author mlowery */ @SuppressWarnings("nls") public class GetImageIT { private static final String TEST_MIME_TYPE = "test-mime-type"; private static final String RESOURCE_PARAM = "image"; private MicroPlatform mp = new MicroPlatform(TestResourceLocation.TEST_RESOURCES + "/web-servlet-solution"); private HttpServletRequest request; private HttpServletResponse response; private GetImage servlet; @Before public void setUp() throws PlatformInitializationException, ServletException { request = mock(HttpServletRequest.class); when(request.getMethod()).thenReturn("GET"); response = mock(HttpServletResponse.class); servlet = spy(new GetImage()); final ServletConfig servletConfig = mock(ServletConfig.class); final ServletContext servletContext = mock(ServletContext.class); when(servletContext.getMimeType(anyString())).thenReturn(TEST_MIME_TYPE); when(servletConfig.getServletContext()).thenReturn(servletContext); servlet.init(servletConfig); mp.start(); } @Test public void testGetImage() throws ServletException, IOException { final String resource = "picture.png"; when(request.getParameter(RESOURCE_PARAM)).thenReturn(resource); final ServletOutputStream outputStream = mock(ServletOutputStream.class); final MutableInt fileLength = new MutableInt(0); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { fileLength.add((Integer) invocation.getArguments()[2]); return null; } }).when(outputStream).write(any(byte[].class), anyInt(), anyInt()); when(response.getOutputStream()).thenReturn(outputStream); servlet.service(request, response); verify(response).setContentType(eq(TEST_MIME_TYPE)); final int expected = new Long( new File(PentahoSystem.getApplicationContext().getSolutionPath("system/tmp/" + resource)).length()) .intValue(); assertEquals(expected, fileLength.intValue()); verify(response).setContentLength(eq(expected)); } @Test public void testParentPath() throws ServletException, IOException { when(request.getParameter(RESOURCE_PARAM)).thenReturn("../picture.png"); servlet.service(request, response); verify(response).setStatus(HttpServletResponse.SC_NOT_FOUND); verify(servlet).error(matches(".*ERROR_0002.*")); } @Test public void testParameterEmpty() throws ServletException, IOException { when(request.getParameter(RESOURCE_PARAM)).thenReturn(null); servlet.service(request, response); verify(response).setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE); verify(servlet).error(matches(".*ERROR_0001.*")); } @Test public void testFileNotExist() throws ServletException, IOException { when(request.getParameter(RESOURCE_PARAM)).thenReturn("not_exist.png"); servlet.service(request, response); verify(response).setStatus(HttpServletResponse.SC_NOT_FOUND); verify(servlet).error(matches(".*ERROR_0002.*")); } }