This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 1c83610ba4d97661c002ca6b49971ee030317d4f Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Aug 23 04:15:54 2015 +0200 L'import d'une base fonctionne, mais pas encore la création d'une base vide (le mapping hibernate n'est pas correcte) (See #7464) --- .../observe/ObserveTopiaApplicationContext.java | 33 ++++++++ .../dto/DataSourceCreateConfigurationDto.java | 31 ++++---- observe-services-topia/pom.xml | 6 ++ .../services/ObserveServiceFactoryTopia.java | 2 +- .../ObserveTopiaApplicationContextFactory.java | 89 +++++++++++----------- .../services/service/DataSourceServiceTopia.java | 14 +++- .../service/ApplicationContextResource.java | 8 +- .../services/service/DataSourceResource.java | 88 +++++++++++++-------- .../service/DataSourceServiceTopiaTest.java | 24 +++++- .../main/java/fr/ird/observe/test/TestHelper.java | 20 ++++- 10 files changed, 214 insertions(+), 101 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java index 7c66d03..b135233 100644 --- a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java +++ b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java @@ -1,11 +1,20 @@ package fr.ird.observe; import fr.ird.observe.entities.migration.ObserveMigrationEngine; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hibernate.HibernateException; +import org.hibernate.cfg.Configuration; +import org.hibernate.tool.hbm2ddl.SchemaExport; import org.nuiton.topia.persistence.TopiaConfiguration; +import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.replication.TopiaReplicationService; public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicationContext { + /** Logger. */ + private static final Log log = LogFactory.getLog(ObserveTopiaApplicationContext.class); + public static final String MIGRATION_SERVICE_NAME = "migration"; public static final String REPLICATION_SERVICE_NAME = "replication"; @@ -14,6 +23,8 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat public static final String AUTO_MIGRATE = "auto.migrate"; + private static final String CREATE_SCHEMA_SCRIPT = "CREATE SCHEMA OBSERVE_COMMON; CREATE SCHEMA OBSERVE_LONGLINE; CREATE SCHEMA OBSERVE_SEINE;"; + //FIXME Voir comment remplir ça (probablement pour les tests ?) protected boolean autoMigrate; @@ -50,4 +61,26 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat return getServices(TopiaReplicationService.class).get(REPLICATION_SERVICE_NAME); } + @Override + public void createSchema() { + try { + boolean showSchema = false; + if (log.isDebugEnabled()) { + showSchema = true; + } + topiaFiresSupport.firePreCreateSchema(this); + try (ObserveTopiaPersistenceContext topiaPersistenceContext = newPersistenceContext()) { + + topiaPersistenceContext.getSqlSupport().executeSql(CREATE_SCHEMA_SCRIPT); + } + + Configuration hibernateConfiguration = getHibernateProvider().getHibernateConfiguration(); + new SchemaExport(hibernateConfiguration).execute(showSchema, true, false, true); + topiaFiresSupport.firePostCreateSchema(this); + } catch (HibernateException eee) { + throw new TopiaException( + String.format("Could not create schema for reason: %s", + eee.getMessage()), eee); + } + } } diff --git a/observe-services-model/src/main/java/fr/ird/observe/services/dto/DataSourceCreateConfigurationDto.java b/observe-services-model/src/main/java/fr/ird/observe/services/dto/DataSourceCreateConfigurationDto.java index 6c1580c..e57672d 100644 --- a/observe-services-model/src/main/java/fr/ird/observe/services/dto/DataSourceCreateConfigurationDto.java +++ b/observe-services-model/src/main/java/fr/ird/observe/services/dto/DataSourceCreateConfigurationDto.java @@ -1,6 +1,5 @@ package fr.ird.observe.services.dto; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; @@ -16,66 +15,66 @@ public class DataSourceCreateConfigurationDto extends AbstractObserveDto { /** * Le contenu de la base à importer (Optionel). */ - protected Optional<byte[]> optionalImportDatabase; + protected byte[] optionalImportDatabase; /** * Une configuration de la dataSource à utiliser pour importer le référentiel (Optionel). */ - protected Optional<ObserveDataSourceConfiguration> optionalImportReferentialDataSourceConfiguration; + protected ObserveDataSourceConfiguration optionalImportReferentialDataSourceConfiguration; /** * Une configuration de la dataSource à utiliser pour importer des données (Optionel). */ - protected Optional<ObserveDataSourceConfiguration> optionalImportDataDataSourceConfiguration; + protected ObserveDataSourceConfiguration optionalImportDataDataSourceConfiguration; /** * Les données à importer (ids des marées) (Optionel). */ - protected Optional<String[]> optionalImportDataIds; + protected String[] optionalImportDataIds; public boolean isImportDatabase() { - return optionalImportDatabase.isPresent(); + return optionalImportDatabase != null; } public boolean isImportReferential() { - return optionalImportReferentialDataSourceConfiguration.isPresent(); + return optionalImportReferentialDataSourceConfiguration != null; } public boolean isImportData() { - return optionalImportDataDataSourceConfiguration.isPresent(); + return optionalImportDataDataSourceConfiguration != null; } public byte[] getImportDatabase() { - return optionalImportDatabase.get(); + return optionalImportDatabase; } public ObserveDataSourceConfiguration getImportReferentialDataSourceConfiguration() { - return optionalImportReferentialDataSourceConfiguration.get(); + return optionalImportReferentialDataSourceConfiguration; } public ObserveDataSourceConfiguration getImportDataDataSourceConfiguration() { - return optionalImportDataDataSourceConfiguration.get(); + return optionalImportDataDataSourceConfiguration; } public String[] getImportDataIds() { - return optionalImportDataIds.get(); + return optionalImportDataIds; } public void setImportDatabase(byte... importDatabase) { Preconditions.checkNotNull(importDatabase, "'importDatabase' can't be null."); - this.optionalImportDatabase = Optional.of(importDatabase); + this.optionalImportDatabase = importDatabase; } public void setImportReferentialDataSourceConfiguration(ObserveDataSourceConfiguration importReferentialDataSourceConfiguration) { Preconditions.checkNotNull(importReferentialDataSourceConfiguration, "'importReferentialDataSourceConfiguration' can't be null."); - this.optionalImportReferentialDataSourceConfiguration = Optional.of(importReferentialDataSourceConfiguration); + this.optionalImportReferentialDataSourceConfiguration = importReferentialDataSourceConfiguration; } public void setImportDataConfiguration(ObserveDataSourceConfiguration importDataDataSourceConfiguration, String... importDataIds) { Preconditions.checkNotNull(importDataDataSourceConfiguration, "'importDataDataSourceConfiguration' can't be null."); Preconditions.checkNotNull(importDataIds, "'importDataIds' can't be null."); - this.optionalImportDataDataSourceConfiguration = Optional.of(importDataDataSourceConfiguration); - this.optionalImportDataIds = Optional.of(importDataIds); + this.optionalImportDataDataSourceConfiguration = importDataDataSourceConfiguration; + this.optionalImportDataIds = importDataIds; } } diff --git a/observe-services-topia/pom.xml b/observe-services-topia/pom.xml index a067f30..d2c914f 100644 --- a/observe-services-topia/pom.xml +++ b/observe-services-topia/pom.xml @@ -43,6 +43,12 @@ <artifactId>observe-entities</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>observe-test-data</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> <!-- commons dependencies --> diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java index ccf5e1b..72f138c 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceFactoryTopia.java @@ -69,7 +69,7 @@ public class ObserveServiceFactoryTopia extends ObserveServiceFactorySupport imp serviceContext.setDataSourceConfiguration(dataSourceConfiguration); serviceContext.setServiceFactory(this); - ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); + ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration, true); serviceContext.setTopiaApplicationContext(topiaApplicationContext); return serviceContext; diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java index 7b5c316..e5df980 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveTopiaApplicationContextFactory.java @@ -2,9 +2,6 @@ package fr.ird.observe.services; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableMap; import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaIdFactory; @@ -24,8 +21,8 @@ import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; import org.nuiton.topia.replication.TopiaReplicationServiceImpl; import java.io.File; -import java.util.Collections; -import java.util.concurrent.ExecutionException; +import java.util.HashMap; +import java.util.Map; /** * Created on 23/08/15. @@ -76,83 +73,74 @@ public class ObserveTopiaApplicationContextFactory { protected static final JdbcConfigurationBuilder JDBC_CONFIGURATION_BUILDER = new JdbcConfigurationBuilder(); - protected static final LoadingCache<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext> TOPIA_APPLICATION_CONTEXT_CACHE = CacheBuilder - .newBuilder() - .build(new CacheLoader<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext>() { + protected static final Map<ObserveDataSourceConfigurationTopiaSupport, ObserveTopiaApplicationContext> TOPIA_APPLICATION_CONTEXT_CACHE = new HashMap<>(); - @Override - public ObserveTopiaApplicationContext load(ObserveDataSourceConfigurationTopiaSupport key) throws Exception { + public static ObserveTopiaApplicationContext getTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, boolean initSchema) { - ObserveTopiaApplicationContext dataSource = createTopiaApplicationContext(key); - return dataSource; - - } - }); - - public static ObserveTopiaApplicationContext getTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { - - try { - ObserveTopiaApplicationContext topiaApplicationContext = TOPIA_APPLICATION_CONTEXT_CACHE.get(dataSourceConfiguration); - return topiaApplicationContext; - } catch (ExecutionException e) { - //FIXME Avoir une vraie execption - throw new RuntimeException("Could not get dataSource for configuration: " + dataSourceConfiguration, e); + Optional<ObserveTopiaApplicationContext> optionalTopiaApplicationContext = getTopiaApplicationContextIfPresent(dataSourceConfiguration); + ObserveTopiaApplicationContext topiaApplicationContext; + if (optionalTopiaApplicationContext.isPresent()) { + topiaApplicationContext = optionalTopiaApplicationContext.get(); + } else { + topiaApplicationContext = createTopiaApplicationContext(dataSourceConfiguration, initSchema); } + return topiaApplicationContext; } public static Optional<ObserveTopiaApplicationContext> getTopiaApplicationContextIfPresent(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration) { - ObserveTopiaApplicationContext topiaApplicationContext = TOPIA_APPLICATION_CONTEXT_CACHE.getIfPresent(dataSourceConfiguration); + ObserveTopiaApplicationContext topiaApplicationContext = TOPIA_APPLICATION_CONTEXT_CACHE.get(dataSourceConfiguration); return Optional.fromNullable(topiaApplicationContext); } public static void close() { - for (TopiaApplicationContext dataSource : TOPIA_APPLICATION_CONTEXT_CACHE.asMap().values()) { + for (TopiaApplicationContext topiaApplicationContext : TOPIA_APPLICATION_CONTEXT_CACHE.values()) { - if (!dataSource.isClosed()) { + if (!topiaApplicationContext.isClosed()) { try { - dataSource.close(); + topiaApplicationContext.close(); } catch (Exception e) { if (log.isErrorEnabled()) { - log.error("Could not close data source: " + dataSource, e); + log.error("Could not close topiaApplicationContext: " + topiaApplicationContext, e); } } } } - TOPIA_APPLICATION_CONTEXT_CACHE.invalidateAll(); + TOPIA_APPLICATION_CONTEXT_CACHE.clear(); } - protected static ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport configuration) { + protected static ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaSupport configuration, boolean initSchema) { ObserveTopiaApplicationContext topiaApplicationContext = null; if (configuration instanceof ObserveDataSourceConfigurationTopiaH2) { topiaApplicationContext = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaH2) configuration); } else if (configuration instanceof ObserveDataSourceConfigurationTopiaPG) { - topiaApplicationContext = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaPG) configuration); + topiaApplicationContext = createTopiaApplicationContext((ObserveDataSourceConfigurationTopiaPG) configuration, initSchema); } Preconditions.checkState(topiaApplicationContext != null, "Did not find how to create ObserveTopiaApplicationContext from: " + configuration); return topiaApplicationContext; } - protected static TopiaConfiguration createTopiaConfiguration(ObserveDataSourceConfigurationTopiaPG configuration) { + protected static TopiaConfiguration createTopiaConfiguration(ObserveDataSourceConfigurationTopiaPG configuration, boolean initSchema) { JdbcConfiguration jdbcConfiguration = createJdbcConfiguration(configuration, configuration.getJdbcUrl()); BeanTopiaConfiguration topiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration); topiaConfiguration.setTopiaIdFactoryClass(ObserveTopiaIdFactory.class); - topiaConfiguration.setInitSchema(false); + topiaConfiguration.setInitSchema(initSchema); topiaConfiguration.setValidateSchema(false); - ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, PGDataSourceMigration.class.getName()); +// ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, PGDataSourceMigration.class.getName()); + ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveMigrationEngine.MIGRATION_CALLBACK, PGDataSourceMigration.class.getName()); topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); - topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class, Collections.<String, String>emptyMap()); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class); return topiaConfiguration; } @@ -172,9 +160,19 @@ public class ObserveTopiaApplicationContextFactory { topiaConfiguration.setInitSchema(false); topiaConfiguration.setValidateSchema(false); - ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, H2DataSourceMigration.class.getName()); + if (log.isInfoEnabled()) { + log.info("jdbcUrl: " + jdbcUrl); + } + +// ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME + '.' + ObserveMigrationEngine.MIGRATION_CALLBACK, H2DataSourceMigration.class.getName()); + ImmutableMap<String, String> migrationServiceConfiguration = ImmutableMap.of( + ObserveMigrationEngine.MIGRATION_CALLBACK, H2DataSourceMigration.class.getName(), + ObserveMigrationEngine.MIGRATION_SHOW_PROGRESSION, String.valueOf(configuration.isShowMigrationProgression()), + ObserveMigrationEngine.MIGRATION_SHOW_SQL, String.valueOf(configuration.isShowMigrationSql()), + ObserveTopiaApplicationContext.AUTO_MIGRATE, String.valueOf(false) + ); topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); - topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class, Collections.<String, String>emptyMap()); + topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class); return topiaConfiguration; } @@ -185,15 +183,15 @@ public class ObserveTopiaApplicationContextFactory { String.valueOf(configuration.getPassword())); } - protected static ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaPG configuration) { + protected static ObserveTopiaApplicationContext createTopiaApplicationContext(ObserveDataSourceConfigurationTopiaPG configuration, boolean initSchema) { - TopiaConfiguration topiaConfiguration = createTopiaConfiguration(configuration); + TopiaConfiguration topiaConfiguration = createTopiaConfiguration(configuration, initSchema); if (log.isInfoEnabled()) { log.info("PG Topia configuration: " + topiaConfiguration); } - ObserveTopiaApplicationContext topiaApplicationContext = new MyObserveTopiaApplicationContext(topiaConfiguration); + ObserveTopiaApplicationContext topiaApplicationContext = new MyObserveTopiaApplicationContext(topiaConfiguration, configuration); return topiaApplicationContext; } @@ -205,15 +203,18 @@ public class ObserveTopiaApplicationContextFactory { if (log.isInfoEnabled()) { log.info("H2 Topia configuration: " + topiaConfiguration); } - ObserveTopiaApplicationContext topiaApplicationContext = new MyObserveTopiaApplicationContext(topiaConfiguration); + ObserveTopiaApplicationContext topiaApplicationContext = new MyObserveTopiaApplicationContext(topiaConfiguration, configuration); return topiaApplicationContext; } protected static class MyObserveTopiaApplicationContext extends ObserveTopiaApplicationContext { - public MyObserveTopiaApplicationContext(TopiaConfiguration topiaConfiguration) { + private final ObserveDataSourceConfigurationTopiaSupport observeDataSourceConfiguration; + + public MyObserveTopiaApplicationContext(TopiaConfiguration topiaConfiguration, ObserveDataSourceConfigurationTopiaSupport observeDataSourceConfiguration) { super(topiaConfiguration); + this.observeDataSourceConfiguration = observeDataSourceConfiguration; } @Override @@ -222,7 +223,7 @@ public class ObserveTopiaApplicationContextFactory { super.close(); } finally { // remove from cache - TOPIA_APPLICATION_CONTEXT_CACHE.invalidate(getConfiguration()); + TOPIA_APPLICATION_CONTEXT_CACHE.remove(observeDataSourceConfiguration); } } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java index b8bc87a..d2b6943 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -7,6 +7,8 @@ import fr.ird.observe.services.ObserveTopiaApplicationContextFactory; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaSupport; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.jdbc.JdbcH2Helper; import java.io.BufferedInputStream; @@ -24,6 +26,9 @@ import java.nio.file.Path; */ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataSourceService { + /** Logger. */ + private static final Log log = LogFactory.getLog(DataSourceServiceTopia.class); + @Override public boolean exist() { @@ -34,8 +39,10 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS @Override public void create(DataSourceCreateConfigurationDto dataSourceCreateConfiguration) throws IOException { + boolean initSchema = !dataSourceCreateConfiguration.isImportDatabase(); + ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); - ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); + ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration, initSchema); JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(topiaApplicationContext.getConfiguration()); @@ -85,7 +92,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS public void open() { ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); - ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); + ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration, true); } @@ -120,6 +127,9 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS Path sqlScript = new File(temporaryDirectory, "script.sql").toPath(); + if (log.isInfoEnabled()) { + log.info("script: " + sqlScript); + } try (InputStream inputSream = new BufferedInputStream(new ByteArrayInputStream(content))) { Files.copy(inputSream, sqlScript); } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java index f6b3ae5..e994be4 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/ApplicationContextResource.java @@ -3,6 +3,7 @@ package fr.ird.observe.services.service; import fr.ird.observe.services.ObserveServiceApplicationContext; import fr.ird.observe.services.ObserveServiceFactoryTopiaTaiste; import fr.ird.observe.services.dto.constants.ReferentialLocale; +import fr.ird.observe.test.TestHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.rules.TestRule; @@ -33,7 +34,7 @@ public class ApplicationContextResource implements TestRule { } public String getScriptPath(String classifier) { - return getBackupScript(databaseVersion, classifier); + return TestHelper.getBackupScript(databaseVersion, classifier); } public ObserveServiceApplicationContext getServiceApplicationContext() { @@ -67,11 +68,12 @@ public class ApplicationContextResource implements TestRule { log.debug("Starts " + testClass.getName()); } //TODO A revoir -// TestHelper.initTest(testClass); + TestHelper.initTest(testClass); + // TestHelper.createApplicationContext(); // TestHelper.setConfig(IObserveConfig.DB_VERSION, databaseVersion.toString()); // -// ObserveServiceTopia.init(); + ObserveServiceTopia.init(); serviceApplicationContext.setReferentialLocale(ReferentialLocale.FR); serviceApplicationContext.setMainServiceFactory(serviceFactory); diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java index 90a4597..d894a98 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceResource.java @@ -1,9 +1,13 @@ package fr.ird.observe.services.service; +import com.google.common.base.Preconditions; +import com.google.common.io.ByteStreams; +import com.google.common.io.Resources; import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaPersistenceContext; import fr.ird.observe.services.ObserveTopiaApplicationContextFactory; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; +import fr.ird.observe.test.TestHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Assert; @@ -11,7 +15,12 @@ import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.LinkedHashMap; import java.util.Map; @@ -33,6 +42,8 @@ public class DataSourceResource implements TestRule { protected ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration; + private File testDirectory; + public DataSourceResource(ApplicationContextResource applicationContextResource, String dbPath) { this.applicationContextResource = applicationContextResource; this.dbPath = dbPath; @@ -42,9 +53,23 @@ public class DataSourceResource implements TestRule { return dataSourceConfiguration; } + public byte[] getDatabaseToImportContent() throws IOException { + + URL url = getClass().getResource(dbPath); + Preconditions.checkNotNull(dbPath, "Could not find database at: " + dbPath); + try (InputStream inputStream = Resources.asByteSource(url).openStream()) { + byte[] dumpContent = ByteStreams.toByteArray(inputStream); + return dumpContent; + } + } + + public File getTestDirectory() { + return testDirectory; + } + public ObserveTopiaPersistenceContext newTransaction(String name) { - ObserveTopiaApplicationContext dataSource = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); + ObserveTopiaApplicationContext dataSource = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration, true); ObserveTopiaPersistenceContext persistenceContext = dataSource.newPersistenceContext(); transactions.put(name, persistenceContext); return persistenceContext; @@ -74,36 +99,33 @@ public class DataSourceResource implements TestRule { log.debug("Starts " + testClass.getName() + "::" + methodName); } - URL dbUrl = getClass().getResource(dbPath); - - Assert.assertNotNull("could not find resource : " + dbPath, dbUrl); - -// File localDbFile = TestHelper.newLocalDB(methodName); - - ObserveTopiaApplicationContext dataSource = ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); - -// -// H2DataSource dataSource = DBTestHelper.createAndOpenFromDump( -// localDbFile, -// dbUrl, -// false, -// false, -// true, -// true, -// true); -// -// H2DataSourceConfig dataSourceConfig = dataSource.getConfig(); -// -// dataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); -// dataSourceConfiguration.setLabel(dataSourceConfig.getLabel()); -// dataSourceConfiguration.setUsername(dataSourceConfig.getLogin()); -// dataSourceConfiguration.setPassword(dataSourceConfig.getPassword()); -// dataSourceConfiguration.setDirectory(dataSourceConfig.getStorageDirectory()); -// dataSourceConfiguration.setCanMigrate(dataSourceConfig.isCanMigrate()); -// dataSourceConfiguration.setShowMigrationProgression(dataSourceConfig.isShowMigrationProgression()); -// dataSourceConfiguration.setShowMigrationSql(dataSourceConfig.isShowMigrationSql()); -// -// dataSource.doClose(false); + testDirectory = TestHelper.newFile(methodName); + Path temporaryDirectoryRoot = new File(testDirectory, "tmp").toPath(); + Files.createDirectories(temporaryDirectoryRoot); + applicationContextResource.getServiceApplicationContext().setTemporaryDirectoryRoot(temporaryDirectoryRoot); + + Assert.assertNotNull("could not find resource : " + dbPath, getClass().getResource(dbPath)); + + dataSourceConfiguration = createDataSourceConfigurationH2(testClass, methodName); + ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration, true); + + } + + private ObserveDataSourceConfigurationTopiaH2 createDataSourceConfigurationH2(Class<?> testClass, String methodName) { + + ObserveDataSourceConfigurationTopiaH2 configurationTopiaH2 = new ObserveDataSourceConfigurationTopiaH2(); + + File localDbFile = new File(testDirectory, "localdb"); + + if (log.isInfoEnabled()) { + log.info("db directory: "+localDbFile); + } + configurationTopiaH2.setLabel(testClass.getSimpleName() + "#" + methodName); + configurationTopiaH2.setUsername(TestHelper.TEST_H2_LOGIN); + configurationTopiaH2.setPassword(TestHelper.TEST_H2_PASSWORD); + configurationTopiaH2.setDirectory(localDbFile); + configurationTopiaH2.setDbName("localdb"); + return configurationTopiaH2; } @@ -119,7 +141,7 @@ public class DataSourceResource implements TestRule { } - private ObserveTopiaApplicationContext getTopiaApplicationContext() { - return ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration); + public ObserveTopiaApplicationContext getTopiaApplicationContext() { + return ObserveTopiaApplicationContextFactory.getTopiaApplicationContext(dataSourceConfiguration, true); } } diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceServiceTopiaTest.java index fdfdb25..7216bea 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceServiceTopiaTest.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceServiceTopiaTest.java @@ -4,6 +4,7 @@ import fr.ird.observe.entities.migration.H2DataSourceMigration; import fr.ird.observe.services.ObserveServiceApplicationContext; import fr.ird.observe.services.ObserveServiceFactoryTopia; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; +import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Before; @@ -11,6 +12,8 @@ import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; +import java.io.IOException; + /** * Created on 23/08/15. * @@ -43,8 +46,27 @@ public class DataSourceServiceTopiaTest { } @Test - public void testCreateDataSource() { + public void testOpen() throws IOException { + service.open(); + } + + @Test + public void testCreateEmptyDataSource() throws IOException { + + DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); + service.create(dataSourceCreateConfiguration); + + } + + @Test + public void testCreateDataSourceFromImportDatabase() throws IOException { + + byte[] dumpContent = dataSourceResource.getDatabaseToImportContent(); + + DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); + dataSourceCreateConfiguration.setImportDatabase(dumpContent); + service.create(dataSourceCreateConfiguration); } } \ No newline at end of file diff --git a/observe-test-data/src/main/java/fr/ird/observe/test/TestHelper.java b/observe-test-data/src/main/java/fr/ird/observe/test/TestHelper.java index dd0cfbf..73267bd 100644 --- a/observe-test-data/src/main/java/fr/ird/observe/test/TestHelper.java +++ b/observe-test-data/src/main/java/fr/ird/observe/test/TestHelper.java @@ -23,6 +23,7 @@ package fr.ird.observe.test; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.util.version.Version; import java.io.File; import java.util.Date; @@ -35,7 +36,9 @@ public abstract class TestHelper { /** Logger */ private static final Log log = LogFactory.getLog(TestHelper.class); - static private final String TEST_BASEDIR_PATTERN = "target%1$ssurefire-workdir%1$s%2$td_%2$tm_%2$tY%1$s%2$tH_%2$tM_%2$tS"; + protected static final String BACKUP_SCRIPT_PATTERN = "/db/%1$s/%2$s.sql.gz"; + + private static final String TEST_BASEDIR_PATTERN = "target%1$ssurefire-workdir%1$s%2$td_%2$tm_%2$tY%1$s%2$tH_%2$tM_%2$tS"; public static final String TEST_H2_LOGIN = "sa"; @@ -208,6 +211,10 @@ public abstract class TestHelper { return new File(TEST_BASEDIR, "localDB_" + name); } + public static File newFile(String name) { + return new File(TEST_BASEDIR, name); + } + public static File getBasedir() { return basedir; } @@ -243,4 +250,15 @@ public abstract class TestHelper { // securityModel.setRole(TEST_REMOTE_REFERENTIEL_LOGIN, SecurityModel.Role.referentiel, false); // return securityModel; // } + + public static String getBackupScript(Version version, String loadScript) { + + String result = String.format(BACKUP_SCRIPT_PATTERN, version.toString(), loadScript); + if (log.isInfoEnabled()) { + log.info(result); + } + return result; + + } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.