/** * This program 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 3 of the License, or * (at your option) any later version. * * 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 General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * @author Gabriel Roldan (OpenGeo) 2010 * */ package org.geowebcache.diskquota; import static org.geowebcache.diskquota.ExpirationPolicy.LFU; import static org.geowebcache.diskquota.ExpirationPolicy.LRU; import static org.geowebcache.diskquota.storage.StorageUnit.B; import static org.geowebcache.diskquota.storage.StorageUnit.GiB; import static org.geowebcache.diskquota.storage.StorageUnit.MiB; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import javax.servlet.ServletContext; import junit.framework.TestCase; import org.easymock.classextension.EasyMock; import org.geowebcache.config.ConfigurationException; import org.geowebcache.diskquota.storage.LayerQuota; import org.geowebcache.diskquota.storage.Quota; import org.geowebcache.diskquota.storage.StorageUnit; import org.geowebcache.layer.TileLayer; import org.geowebcache.layer.TileLayerDispatcher; import org.geowebcache.storage.DefaultStorageFinder; import org.geowebcache.util.ApplicationContextProvider; import org.geowebcache.util.FileUtils; import org.springframework.web.context.WebApplicationContext; public class ConfigLoaderTest extends TestCase { private File cacheDir; DefaultStorageFinder storageFinder; ApplicationContextProvider contextProvider; TileLayerDispatcher tld; private ConfigLoader loader; @Override protected void setUp() throws Exception { cacheDir = new File("target" + File.separator + getClass().getSimpleName()); if (!cacheDir.getParentFile().exists()) { throw new IllegalStateException(cacheDir.getParentFile().getAbsolutePath() + " does not exist"); } FileUtils.rmFileCacheDir(cacheDir, null); cacheDir.mkdirs(); // copy configuration file to cache directory { InputStream in = getClass().getResourceAsStream("/geowebcache-diskquota.xml"); FileOutputStream out = new FileOutputStream(new File(cacheDir, "geowebcache-diskquota.xml")); int c; while ((c = in.read()) != -1) { out.write(c); } in.close(); out.close(); } storageFinder = EasyMock.createMock(DefaultStorageFinder.class); EasyMock.expect(storageFinder.getDefaultPath()).andReturn(cacheDir.getAbsolutePath()) .anyTimes(); EasyMock.replay(storageFinder); ServletContext mockServletCtx = EasyMock.createMock(ServletContext.class); String tmpPath = System.getProperty("java.io.tmpdir"); EasyMock.expect(mockServletCtx.getRealPath(EasyMock.eq(""))).andReturn(tmpPath).anyTimes(); EasyMock.replay(mockServletCtx); WebApplicationContext appContext = EasyMock.createMock(WebApplicationContext.class); EasyMock.expect(appContext.getServletContext()).andReturn(mockServletCtx).anyTimes(); EasyMock.replay(appContext); contextProvider = new ApplicationContextProvider(); contextProvider.setApplicationContext(appContext); tld = EasyMock.createMock(TileLayerDispatcher.class); TileLayer toppStates = createMockLayer("topp:states"); TileLayer raster = createMockLayer("raster test layer"); EasyMock.expect(tld.getTileLayer(EasyMock.eq("topp:states"))).andReturn(toppStates) .anyTimes(); EasyMock.expect(tld.getTileLayer(EasyMock.eq("raster test layer"))).andReturn(raster) .anyTimes(); List<TileLayer> tileLayers = new ArrayList<TileLayer>(); tileLayers.add(toppStates); tileLayers.add(raster); EasyMock.expect(tld.getLayerList()).andReturn(tileLayers).anyTimes(); EasyMock.replay(tld); loader = new ConfigLoader(storageFinder, contextProvider, tld); } @Override protected void tearDown() throws Exception { if (cacheDir != null) { FileUtils.rmFileCacheDir(cacheDir, null); } } private TileLayer createMockLayer(String name) { TileLayer layer = EasyMock.createMock(TileLayer.class); EasyMock.expect(layer.getName()).andReturn(name).anyTimes(); EasyMock.replay(layer); return layer; } public void testLoadConfig() throws ConfigurationException, IOException { DiskQuotaConfig config = loader.loadConfig(); assertNotNull(config); assertFalse(config.isEnabled()); assertEquals(4096, config.getDiskBlockSize().intValue()); assertEquals(10, config.getCacheCleanUpFrequency().intValue()); assertEquals(TimeUnit.SECONDS, config.getCacheCleanUpUnits()); assertEquals(3, config.getMaxConcurrentCleanUps().intValue()); assertEquals(LFU, config.getGlobalExpirationPolicyName()); assertNotNull(config.getGlobalExpirationPolicyName()); assertNotNull(config.getGlobalQuota()); assertEquals(GiB.convertTo(200, B).longValue(), config.getGlobalQuota().getBytes() .longValue()); assertNotNull(config.getLayerQuotas()); assertEquals(2, config.getLayerQuotas().size()); LayerQuota states = config.layerQuota("topp:states"); assertNotNull(states); assertEquals(LFU, states.getExpirationPolicyName()); assertEquals(MiB.convertTo(100, B).longValue(), states.getQuota().getBytes().longValue()); LayerQuota raster = config.layerQuota("raster test layer"); assertNotNull(raster); } public void testSaveConfig() throws ConfigurationException, IOException { DiskQuotaConfig config = new DiskQuotaConfig(); List<LayerQuota> quotas = new ArrayList<LayerQuota>(); LayerQuota lq = new LayerQuota("topp:states", LRU, new Quota(10, StorageUnit.MiB)); quotas.add(lq); config.addLayerQuota(lq); File configFile = new File(cacheDir, "geowebcache-diskquota.xml"); if (configFile.exists()) { configFile.delete(); } loader.saveConfig(config); assertTrue(configFile.exists()); // loader = new ConfigLoader(storageFinder, contextProvider, tld); // DiskQuotaConfig loadConfig = loader.loadConfig(); // assertNotNull(loadConfig); } public void testGetRootCacheDir() throws Exception { assertEquals(cacheDir.getAbsolutePath(), loader.getRootCacheDir().getAbsolutePath()); } }