org.geowebcache.diskquota.ConfigLoaderTest.java Source code

Java tutorial

Introduction

Here is the source code for org.geowebcache.diskquota.ConfigLoaderTest.java

Source

/**
 * 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());
    }

}