/* (c) 2016 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.security.impl;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.easymock.EasyMock.replay;
import java.util.ArrayList;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogFactory;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.PublishedInfo;
import org.geoserver.security.SecureCatalogImpl;
import org.geoserver.security.decorators.SecuredLayerGroupInfo;
import org.geoserver.security.decorators.SecuredLayerInfo;
import org.geoserver.test.GeoServerSystemTestSupport;
import org.junit.Test;
/**
*
* @author Niels Charlier
*
*/
public class SecuredLayerGroupTest extends GeoServerSystemTestSupport {
@Test
public void testCreateNewLayerGroup() throws Exception {
//create mocks
final LayerGroupInfo lg = createNiceMock(LayerGroupInfo.class);
final CatalogFactory factory = createNiceMock(CatalogFactory.class);
final Catalog catalog = createNiceMock(Catalog.class);
expect(catalog.getFactory()).andReturn(factory);
replay(catalog);
expect(factory.createLayerGroup()).andReturn(lg);
replay(factory);
//tests
final Catalog secureCatalog = new SecureCatalogImpl(catalog);
final LayerGroupInfo layerGroup = secureCatalog.getFactory().createLayerGroup();
assertTrue(layerGroup instanceof SecuredLayerGroupInfo);
assertTrue(((SecuredLayerGroupInfo) layerGroup).unwrap(LayerGroupInfo.class) == lg);
}
@Test
public void testGetLayerGroup() throws Exception {
//create mocks
final LayerGroupInfo lg = createNiceMock(LayerGroupInfo.class);
expect(lg.getWorkspace()).andReturn(null);
final ArrayList<PublishedInfo> layers = new ArrayList<PublishedInfo>();
expect(lg.getLayers()).andReturn(layers);
replay(lg);
final Catalog catalog = createNiceMock(Catalog.class);
expect(catalog.getLayerGroup("lg")).andReturn(lg);
replay(catalog);
//tests
final Catalog secureCatalog = new SecureCatalogImpl(catalog);
final LayerGroupInfo layerGroup = secureCatalog.getLayerGroup("lg");
assertTrue(layerGroup instanceof SecuredLayerGroupInfo);
assertTrue(((SecuredLayerGroupInfo) layerGroup).unwrap(LayerGroupInfo.class) == lg);
}
@Test
public void testLayerGroupSynchronised() throws Exception {
//create mocks
final LayerInfo layer1 = createNiceMock(LayerInfo.class);
final LayerInfo layer2 = createNiceMock(LayerInfo.class);
final LayerGroupInfo lg = createNiceMock(LayerGroupInfo.class);
final ArrayList<PublishedInfo> layers = new ArrayList<PublishedInfo>();
expect(lg.getLayers()).andReturn(layers).anyTimes();
lg.setRootLayer(layer1);
expectLastCall();
replay(lg);
//tests
final ArrayList<PublishedInfo> securedLayers = new ArrayList<PublishedInfo>();
final SecuredLayerGroupInfo securedLg = new SecuredLayerGroupInfo(
lg, null, securedLayers, new ArrayList<>());
securedLg.getLayers().add(new SecuredLayerInfo(layer1, null));
securedLg.getLayers().add(new SecuredLayerInfo(layer2, null));
assertEquals(2, securedLg.getLayers().size());
assertEquals(2, layers.size());
assertTrue(layers.get(0) == layer1);
assertTrue(layers.get(1) == layer2);
securedLg.getLayers().remove(1);
assertEquals(1, securedLg.getLayers().size());
assertEquals(1, layers.size());
securedLg.setRootLayer(new SecuredLayerInfo(layer2, null));
//expect is test enough
}
}