This is an automated email from the git hooks/post-receive script. New commit to branch feature/7463 in repository observe. See http://git.codelutin.com/observe.git commit 417aef2f1cd8d2cc2c52012df89a83692c4f304b Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Sep 6 22:21:33 2015 +0200 Amélioration des tests sur le service DataSourceService pour bien attendre que la base est fermé --- .../ObserveDataSourceConfigurationTopiaH2.java | 15 ++++++--- .../services/service/DataSourceServiceTopia.java | 14 +++----- .../service/DataSourceServiceTopiaTest.java | 39 +++++++++++++++------- 3 files changed, 41 insertions(+), 27 deletions(-) diff --git a/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationTopiaH2.java b/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationTopiaH2.java index fa22cd5..881f201 100644 --- a/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationTopiaH2.java +++ b/observe-services-configuration-topia/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceConfigurationTopiaH2.java @@ -34,10 +34,13 @@ public class ObserveDataSourceConfigurationTopiaH2 extends ObserveDataSourceConf return false; } -// @Override -// public boolean datasourceExists() { -// return new File(directory, dbName + ".h2.db").exists(); -// } + public File getDatabaseFile() { + return new File(directory, dbName + ".h2.db"); + } + + public File getLockFile() { + return new File(directory, dbName + ".lock.db"); + } public String getDbName() { return dbName; @@ -61,19 +64,21 @@ public class ObserveDataSourceConfigurationTopiaH2 extends ObserveDataSourceConf if (!(o instanceof ObserveDataSourceConfigurationTopiaH2)) return false; ObserveDataSourceConfigurationTopiaH2 that = (ObserveDataSourceConfigurationTopiaH2) o; return Objects.equals(directory, that.directory) && + Objects.equals(dbName, that.dbName) && Objects.equals(username, that.username) && Objects.equals(password, that.password); } @Override public int hashCode() { - return Objects.hash(directory, username, password); + return Objects.hash(directory, dbName, username, password); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("directory", directory) + .add("dbName", dbName) .add("username", username) .add("password", "***") .toString(); 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 0b3f44a..753c21d 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 @@ -22,8 +22,6 @@ import org.nuiton.topia.persistence.jdbc.JdbcHelper; import java.io.File; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; import static org.nuiton.i18n.I18n.l; @@ -48,11 +46,9 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS ObserveDataSourceConfigurationTopiaH2 h2DataSourceConfiguration = (ObserveDataSourceConfigurationTopiaH2) dataSourceConfigurationTopiaSupport; // On vérifie que le fichier de la base existe - Path databasePath = h2DataSourceConfiguration.getDirectory() - .toPath() - .resolve(h2DataSourceConfiguration.getDbName() + ".h2.db"); + File databaseFile = h2DataSourceConfiguration.getDatabaseFile(); - if (!Files.exists(databasePath)) { + if (!databaseFile.exists()) { String message = l(getApplicationLocale(), "observe.services.topia.error.h2.database.notFound"); throw new DatabaseNotFoundException(message, dataSourceConfiguration); @@ -60,10 +56,8 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } // On vérifier que la base n'est pas déjà en cours d'utilisation - Path databaseLockPath = h2DataSourceConfiguration.getDirectory() - .toPath() - .resolve(h2DataSourceConfiguration.getDbName() + ".lock.db"); - if (Files.exists(databaseLockPath)) { + File databaseLockFile = h2DataSourceConfiguration.getLockFile(); + if (databaseLockFile.exists()) { String message = l(getApplicationLocale(), "observe.services.topia.error.h2.database.locked"); throw new DatabaseConnexionNotAuthorizedException(message, dataSourceConfiguration); 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 ddefd91..9604405 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 @@ -11,13 +11,15 @@ import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.referential.GearDto; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; +import java.io.File; import java.io.IOException; /** @@ -27,6 +29,9 @@ import java.io.IOException; */ public class DataSourceServiceTopiaTest { + /** Logger. */ + private static final Log log = LogFactory.getLog(DataSourceServiceTopiaTest.class); + @ClassRule public static final ApplicationContextResource applicationContextResource = new ApplicationContextResource(); @@ -52,8 +57,6 @@ public class DataSourceServiceTopiaTest { } - //FIXME A revoir avec la cinématique d'ouverture de base, pour le moment on ignore - @Ignore @Test(expected = DatabaseNotFoundException.class) public void testOpenNotExistingDatabase() throws IOException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { @@ -86,10 +89,7 @@ public class DataSourceServiceTopiaTest { Assert.assertTrue(true); } - service.close(); - - //FIXME Il faut attendre jusqu'à ce que le lock soit supprimé - Thread.sleep(1000); + closeDatabase(dataSourceConfiguration); service.canConnect(dataSourceConfiguration); @@ -118,28 +118,43 @@ public class DataSourceServiceTopiaTest { Assert.assertTrue(true); } - service.close(); - - //FIXME Il faut attendre jusqu'à ce que le lock soit supprimé - Thread.sleep(1000); + closeDatabase(dataSourceConfiguration); service.canConnect(dataSourceConfiguration); } @Test - public void testOpen() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { + public void testOpen() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException, InterruptedException { ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration = dataSourceResource.getDataSourceConfiguration(); DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true); service.create(dataSourceConfiguration, dataSourceCreateConfiguration); + // Une fois la base crée, on est déjà connecté dessus, la base est lockée + // On la ferme + closeDatabase(dataSourceConfiguration); + + service.open(dataSourceConfiguration); applicationContextResource.assertSchemaCreated(dataSourceResource.getTopiaApplicationContext()); } + protected void closeDatabase(ObserveDataSourceConfigurationTopiaH2 dataSourceConfiguration) throws InterruptedException { + + service.close(); + + File lockFile = dataSourceConfiguration.getLockFile(); + while (lockFile.exists()) { + if (log.isInfoEnabled()) { + log.info("Database lock " + lockFile + " still exist... Wait "); + } + Thread.sleep(100); + } + } + @Test public void testCreateEmptyDataSource() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.