Java tutorial
/* * ==================================================================== * Copyright (c) 2005-2012 sventon project. All rights reserved. * * This software is licensed as described in the file LICENSE, which * you should have received as part of this distribution. The terms * are also available at http://www.sventon.org. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */ package org.sventon.web.ctrl.template; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; import org.springframework.mail.javamail.ConfigurableMimeFileTypeMap; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletContext; import org.springframework.web.servlet.ModelAndView; import org.sventon.SVNConnection; import org.sventon.TestUtils; import org.sventon.appl.Application; import org.sventon.appl.ConfigDirectory; import org.sventon.appl.RepositoryConfiguration; import org.sventon.cache.CacheException; import org.sventon.cache.ObjectCacheManager; import org.sventon.cache.objectcache.DefaultObjectCache; import org.sventon.cache.objectcache.ObjectCache; import org.sventon.model.RepositoryName; import org.sventon.service.RepositoryService; import org.sventon.util.ImageScaler; import org.sventon.util.WebUtils; import org.sventon.web.command.BaseCommand; import java.awt.image.BufferedImage; import java.io.OutputStream; import static org.junit.Assert.*; import static org.mockito.Mockito.mock; public class GetFileControllerTest { private final MockServletContext mockServletContext = new MockServletContext(); private Application application; private ConfigDirectory configDirectory; private RepositoryConfiguration repositoryConfiguration; private RepositoryName repositoryName; private MockHttpServletRequest request; private MockHttpServletResponse response; @Before public void setUp() throws Exception { request = new MockHttpServletRequest(); response = new MockHttpServletResponse(); mockServletContext.setContextPath("sventon-test"); repositoryName = new RepositoryName("test"); configDirectory = TestUtils.getTestConfigDirectory(); configDirectory.setCreateDirectories(false); configDirectory.setServletContext(mockServletContext); application = new Application(configDirectory); application.setConfigured(true); repositoryConfiguration = new RepositoryConfiguration(repositoryName.toString()); application.addConfiguration(repositoryConfiguration); } @Test public void testSvnHandleGetImageAsInline() throws Exception { final BaseCommand command = new BaseCommand(); command.setName(repositoryName); command.setPath("/testimage.gif"); final GetFileController ctrl = new GetFileController(); ctrl.setApplication(application); ctrl.setRepositoryService(mock(RepositoryService.class)); final ConfigurableMimeFileTypeMap mftm = new ConfigurableMimeFileTypeMap(); mftm.afterPropertiesSet(); ctrl.setMimeFileTypeMap(mftm); final ModelAndView modelAndView; request.addParameter(GetFileController.DISPLAY_REQUEST_PARAMETER, GetFileController.CONTENT_DISPOSITION_INLINE); final MockHttpServletResponse res = new MockHttpServletResponse(); modelAndView = ctrl.svnHandle(null, command, 100, null, request, res, null); assertNull(modelAndView); assertEquals("image/gif", res.getContentType()); assertTrue(((String) res.getHeader(WebUtils.CONTENT_DISPOSITION_HEADER)).startsWith("inline")); } @Test public void testSvnHandleGetFileAsAttachment() throws Exception { final BaseCommand command = new BaseCommand(); command.setName(repositoryName); command.setPath("/testimage.gif"); final GetFileController ctrl = new GetFileController(); ctrl.setApplication(application); ctrl.setRepositoryService(mock(RepositoryService.class)); request.addParameter(GetFileController.DISPLAY_REQUEST_PARAMETER, (String) null); final MockHttpServletResponse mockResponse = new MockHttpServletResponse(); final ModelAndView modelAndView = ctrl.svnHandle(null, command, 100, null, request, mockResponse, null); assertNull(modelAndView); assertEquals(WebUtils.APPLICATION_OCTET_STREAM, mockResponse.getContentType()); assertTrue(((String) mockResponse.getHeader(WebUtils.CONTENT_DISPOSITION_HEADER)).startsWith("attachment")); } @Test public void testCacheNotUsed() throws Exception { final RepositoryService repositoryServiceMock = EasyMock.createMock(RepositoryService.class); final GetFileController ctrl = new GetFileController(); repositoryConfiguration.setCacheUsed(false); final ImageScaler imageScaler = new ImageScaler() { @Override public BufferedImage getThumbnail(BufferedImage image, int maxSize) { return new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); } }; final ConfigurableMimeFileTypeMap mftm = new ConfigurableMimeFileTypeMap(); mftm.afterPropertiesSet(); ctrl.setApplication(application); ctrl.setRepositoryService(repositoryServiceMock); ctrl.setMimeFileTypeMap(mftm); ctrl.setImageScaler(imageScaler); ctrl.setImageFormatName("jpg"); final BaseCommand command = new BaseCommand(); command.setName(repositoryName); command.setPath("/test/target.jpg"); request.addParameter(GetFileController.DISPLAY_REQUEST_PARAMETER, GetFileController.DISPLAY_TYPE_THUMBNAIL); repositoryServiceMock.getFileContents((SVNConnection) EasyMock.isNull(), EasyMock.matches(command.getPath()), EasyMock.eq(-1L), (OutputStream) EasyMock.anyObject()); assertEquals(0, response.getContentAsByteArray().length); EasyMock.replay(repositoryServiceMock); ctrl.svnHandle(null, command, 100, null, request, response, null); EasyMock.verify(repositoryServiceMock); assertTrue(((String) response.getHeader(WebUtils.CONTENT_DISPOSITION_HEADER)).contains("target.jpg")); assertEquals(622, response.getContentAsByteArray().length); } @Test public void testCacheUsed() throws Exception { final RepositoryService repositoryServiceMock = EasyMock.createMock(RepositoryService.class); final ObjectCacheManager objectCacheManager = new ObjectCacheManager(configDirectory, 0, false, false, 0, 0, false, 0) { @Override protected ObjectCache createCache(RepositoryName cacheName) throws CacheException { return new DefaultObjectCache(cacheName.toString(), null, 1000, false, false, 0, 0, false, 0); } }; objectCacheManager.register(repositoryName); final GetFileController ctrl = new GetFileController(); repositoryConfiguration.setCacheUsed(true); final ImageScaler imageScaler = new ImageScaler() { @Override public BufferedImage getThumbnail(BufferedImage image, int maxSize) { return new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); } }; final ConfigurableMimeFileTypeMap mftm = new ConfigurableMimeFileTypeMap(); mftm.afterPropertiesSet(); ctrl.setApplication(application); ctrl.setRepositoryService(repositoryServiceMock); ctrl.setMimeFileTypeMap(mftm); ctrl.setImageScaler(imageScaler); ctrl.setImageFormatName("png"); ctrl.setObjectCacheManager(objectCacheManager); final BaseCommand command = new BaseCommand(); command.setName(repositoryName); command.setPath("/test/target.png"); request.addParameter(GetFileController.DISPLAY_REQUEST_PARAMETER, GetFileController.DISPLAY_TYPE_THUMBNAIL); repositoryServiceMock.getFileContents((SVNConnection) EasyMock.isNull(), EasyMock.matches(command.getPath()), EasyMock.eq(-1L), (OutputStream) EasyMock.anyObject()); assertEquals(0, response.getContentAsByteArray().length); EasyMock.replay(repositoryServiceMock); ctrl.svnHandle(null, command, 100, null, request, response, null); EasyMock.verify(repositoryServiceMock); assertTrue(((String) response.getHeader(WebUtils.CONTENT_DISPOSITION_HEADER)).contains("target.png")); assertEquals(68, response.getContentAsByteArray().length); EasyMock.reset(repositoryServiceMock); // Thumbnail is now cached - verify that it's used EasyMock.replay(repositoryServiceMock); ctrl.svnHandle(null, command, 100, null, request, response, null); EasyMock.verify(repositoryServiceMock); } @Test public void testSvnHandleGetFile() throws Exception { final BaseCommand command = new BaseCommand(); command.setName(repositoryName); command.setPath("/testfile.txt"); final GetFileController ctrl = new GetFileController(); ctrl.setApplication(application); ctrl.setRepositoryService(mock(RepositoryService.class)); final ConfigurableMimeFileTypeMap mftm = new ConfigurableMimeFileTypeMap(); mftm.afterPropertiesSet(); ctrl.setMimeFileTypeMap(mftm); final ModelAndView modelAndView; final MockHttpServletResponse res = new MockHttpServletResponse(); ctrl.setServletContext(mockServletContext); modelAndView = ctrl.svnHandle(null, command, 100, null, request, res, null); assertNull(modelAndView); assertEquals("text/plain", res.getContentType()); assertTrue(((String) res.getHeader(WebUtils.CONTENT_DISPOSITION_HEADER)).startsWith("attachment")); } }