package org.geoserver.gwc.web.layer;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.mock;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang.reflect.FieldUtils;
import org.geoserver.gwc.GWC;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.test.GeoServerTestSupport;
import org.geowebcache.config.ConfigurationException;
import org.geowebcache.diskquota.DiskQuotaConfig;
import org.geowebcache.diskquota.DiskQuotaMonitor;
import org.geowebcache.layer.TileLayer;
import org.junit.After;
import org.junit.Test;
public class CachedLayerProviderTest extends GeoServerTestSupport {
@After
public void testQuotaDisabledWithSystemVariable() throws IllegalAccessException {
DiskQuotaMonitor monitor = GeoServerExtensions.bean(DiskQuotaMonitor.class);
// the field is initialized once based on system variable, we use reflection
// to force it to a different value and set it back where it was
Field enabledField = FieldUtils.getField(DiskQuotaMonitor.class, "diskQuotaEnabled", true);
try {
FieldUtils.writeField(enabledField, monitor, false, true);
CachedLayerProvider provider = new CachedLayerProvider();
List<TileLayer> layers = provider.getItems();
for (TileLayer tileLayer : layers) {
// we are not returning the values from the quota subsystem, they are not up to date anyways
assertNull(CachedLayerProvider.QUOTA_USAGE.getPropertyValue(tileLayer));
}
} finally {
FieldUtils.writeField(enabledField, monitor, true, true);
}
}
@Test
public void testQuotaEnabled() throws ConfigurationException, IOException, InterruptedException {
GWC gwc = GWC.get();
DiskQuotaConfig config = gwc.getDiskQuotaConfig();
config.setEnabled(true);
gwc.saveDiskQuotaConfig(config, null);
CachedLayerProvider provider = new CachedLayerProvider();
List<TileLayer> layers = provider.getItems();
for (TileLayer tileLayer : layers) {
// we are returning the values from the quota subsystem
assertNotNull(CachedLayerProvider.QUOTA_USAGE.getPropertyValue(tileLayer));
}
}
@Test
public void testQuotaDisabled() throws ConfigurationException, IOException, InterruptedException {
GWC gwc = GWC.get();
DiskQuotaConfig config = gwc.getDiskQuotaConfig();
config.setEnabled(false);
gwc.saveDiskQuotaConfig(config, null);
CachedLayerProvider provider = new CachedLayerProvider();
List<TileLayer> layers = provider.getItems();
for (TileLayer tileLayer : layers) {
// we are not returning the values from the quota subsystem, they are not up to date anyways
assertNull(CachedLayerProvider.QUOTA_USAGE.getPropertyValue(tileLayer));
}
}
@Test
public void testAdvertised() {
GWC oldGWC = GWC.get();
GWC gwc = mock(GWC.class);
GWC.set(gwc);
// Adding a few Mocks for an Unadvertised Layer
TileLayer l = mock(TileLayer.class);
when(l.isAdvertised()).thenReturn(false);
// Calculating the size of the Layers with the unadvertised one
Set<String> tileLayerNames = gwc.getTileLayerNames();
tileLayerNames.add("testUnAdvertised");
// Real size of the Layer names Set
int gwcSize = tileLayerNames.size() - 1;
// Mocks for the GWC class
when(gwc.getTileLayerNames()).thenReturn(tileLayerNames);
when(gwc.getTileLayerByName("testUnAdvertised")).thenReturn(l);
// Calculate the number of TileLayers found
CachedLayerProvider provider = new CachedLayerProvider();
int providerSize = provider.getItems().size();
// Ensure that the two numbers are equal
assertEquals(gwcSize, providerSize);
// Set the old GWC
GWC.set(oldGWC);
}
}