/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.data.test;
import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.*;
import static org.geoserver.security.SecurityUtils.toBytes;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.TreeSet;
import java.util.UUID;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.namespace.QName;
import org.apache.commons.io.FileUtils;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
import org.easymock.IArgumentMatcher;
import org.easymock.internal.LastControl;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogBuilder;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.Keyword;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.MetadataMap;
import org.geoserver.catalog.NamespaceInfo;
import org.geoserver.catalog.ProjectionPolicy;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.catalog.ResourcePool;
import org.geoserver.catalog.StoreInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.catalog.Styles;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.catalog.event.CatalogListener;
import org.geoserver.catalog.impl.CatalogFactoryImpl;
import org.geoserver.catalog.impl.CatalogImpl;
import org.geoserver.platform.GeoServerResourceLoader;
import org.geoserver.security.GeoServerAuthenticationProvider;
import org.geoserver.security.GeoServerRoleStore;
import org.geoserver.security.GeoServerSecurityFilterChain;
import org.geoserver.security.GeoServerSecurityManager;
import org.geoserver.security.GeoServerUserGroupStore;
import org.geoserver.security.KeyStoreProvider;
import org.geoserver.security.KeyStoreProviderImpl;
import org.geoserver.security.MasterPasswordProvider;
import org.geoserver.security.config.PasswordPolicyConfig;
import org.geoserver.security.config.SecurityAuthProviderConfig;
import org.geoserver.security.config.SecurityFilterConfig;
import org.geoserver.security.config.SecurityUserGroupServiceConfig;
import org.geoserver.security.impl.GeoServerRole;
import org.geoserver.security.impl.GeoServerUser;
import org.geoserver.security.impl.GeoServerUserGroup;
import org.geoserver.security.password.GeoServerDigestPasswordEncoder;
import org.geoserver.security.password.GeoServerEmptyPasswordEncoder;
import org.geoserver.security.password.GeoServerPBEPasswordEncoder;
import org.geoserver.security.password.GeoServerPasswordEncoder;
import org.geoserver.security.password.GeoServerPlainTextPasswordEncoder;
import org.geoserver.security.password.PasswordEncodingType;
import org.geoserver.security.password.PasswordValidator;
import org.geoserver.security.validation.PasswordValidatorImpl;
import org.geoserver.security.xml.XMLRoleService;
import org.geoserver.security.xml.XMLUserGroupService;
import org.geoserver.test.GeoServerMockTestSupport;
import org.geoserver.test.GeoServerSystemTestSupport;
import org.geoserver.util.IOUtils;
import org.geotools.coverage.grid.io.GridCoverage2DReader;
import org.geotools.coverage.grid.io.AbstractGridFormat;
import org.geotools.coverage.grid.io.GridFormatFinder;
import org.geotools.data.DataAccess;
import org.geotools.data.DataStore;
import org.geotools.data.DataUtilities;
import org.geotools.data.FeatureSource;
import org.geotools.data.property.PropertyDataStore;
import org.geotools.data.property.PropertyDataStoreFactory;
import org.geotools.feature.NameImpl;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.util.Version;
import org.opengis.feature.type.FeatureType;
import org.springframework.context.ApplicationContext;
/**
* Test setup uses for GeoServer mock tests.
* <p>
* This is the default test setup used by {@link GeoServerMockTestSupport}. During setup this
* class creates a catalog whose contents contain all the layers defined by {@link CiteTestData}
* </p>
* <p>
* Customizing the setup, adding layers, etc... is done from
* {@link GeoServerSystemTestSupport#setUpTestData}.
* </p>
* @author Justin Deoliveira, OpenGeo
*
*/
public class MockTestData extends CiteTestData {
File data;
Catalog catalog;
GeoServerSecurityManager secMgr;
MockCreator mockCreator;
boolean includeRaster;
public MockTestData() throws IOException {
// setup the root
data = IOUtils.createRandomDirectory("./target", "mock", "data");
data.delete();
data.mkdir();
mockCreator = new MockCreator();
}
public void setMockCreator(MockCreator mockCreator) {
this.mockCreator = mockCreator;
}
public boolean isInludeRaster() {
return includeRaster;
}
public void setIncludeRaster(boolean includeRaster) {
this.includeRaster = includeRaster;
}
public Catalog getCatalog() {
if (catalog == null) {
try {
catalog = mockCreator.createCatalog(this);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return catalog;
}
public GeoServerSecurityManager getSecurityManager() {
if (secMgr == null) {
try {
secMgr = mockCreator.createSecurityManager(this);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return secMgr;
}
@Override
public void setUp() throws Exception {
}
@Override
public void tearDown() throws Exception {
FileUtils.deleteDirectory(data);
}
@Override
public File getDataDirectoryRoot() {
return data;
}
@Override
public boolean isTestDataAvailable() {
return true;
}
}