This is an automated email from the git hooks/post-receive script. New commit to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit e0a945a07da0851b45eb473527f6dfbb222cb01e Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Feb 23 19:12:42 2015 +0100 improve test API --- .../tutti/persistence/test/CleanResourcesRule.java | 84 ++++++++++++++++++++++ .../tutti/persistence/test/DatabaseResource.java | 57 +++++++++------ .../tutti/persistence/test/TuttiRunListener.java | 31 ++++++++ .../tutti/persistence/test/TuttiTestSupport.java | 27 +++++++ .../ifremer/tutti/service/ServiceDbResource.java | 10 +-- 5 files changed, 179 insertions(+), 30 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/CleanResourcesRule.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/CleanResourcesRule.java new file mode 100644 index 0000000..1f5abd6 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/CleanResourcesRule.java @@ -0,0 +1,84 @@ +package fr.ifremer.tutti.persistence.test; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runner.notification.Failure; +import org.junit.runners.model.Statement; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created on 2/23/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class CleanResourcesRule implements TestRule { + + /** Logger. */ + private static final Log log = LogFactory.getLog(CleanResourcesRule.class); + + private static final Map<Description, DatabaseResource> RESSOURCES_BY_DESCRIPTIONS = new HashMap<>(); + + public static void registerDescription(Description description, DatabaseResource databaseResource) { + RESSOURCES_BY_DESCRIPTIONS.put(description, databaseResource); + } + + public static void cleanResources(Description description) { + + if (log.isInfoEnabled()) { + log.info("Try to clean resources for test: " + description); + } + + Failure failure = TuttiRunListener.getFailureForDescription(description); + + DatabaseResource databaseResource = RESSOURCES_BY_DESCRIPTIONS.get(description); + + if (failure == null) { + + if (log.isInfoEnabled()) { + log.info("Clean resources (no failure found) for test: " + description); + } + databaseResource.cleanResources(description); + + } else { + + if (log.isWarnEnabled()) { + log.warn("Keep resources ((found failure) for test: " + description); + } + + } + + } + + @Override + public Statement apply(final Statement base, final Description description) { + + return new Statement() { + @Override + public void evaluate() throws Throwable { + try { + base.evaluate(); + } finally { + after(description); + } + } + }; + } + + protected void after(Description description) { + + cleanResources(description); + + for (Description childDescription : description.getChildren()) { + + cleanResources(childDescription); + + } + + } + +} diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java index 4b447b5..1b5ee80 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseResource.java @@ -40,7 +40,6 @@ import org.apache.commons.logging.LogFactory; import org.junit.Assume; import org.junit.rules.TestRule; import org.junit.runner.Description; -import org.junit.runner.notification.Failure; import org.junit.runners.model.Statement; import org.nuiton.config.ApplicationConfig; import org.nuiton.converter.ConverterUtil; @@ -127,6 +126,7 @@ public class DatabaseResource implements TestRule { this.beanFactoryReferenceLocation = beanFactoryReferenceLocation; this.beanRefFactoryReferenceId = beanRefFactoryReferenceId; this.writeDb = writeDb; + this.destroyResources = true; } public TuttiConfiguration getConfig() { @@ -214,7 +214,7 @@ public class DatabaseResource implements TestRule { protected void before(Description description) throws Throwable { - TuttiRunListener.beforeClass(description); + TuttiTestSupport.registerDescriptionAndResource(description, this); testClass = description.getTestClass(); @@ -230,7 +230,8 @@ public class DatabaseResource implements TestRule { fixtures = new DatabaseFixtures(); - resourceDirectory = FileUtil.getTestSpecificDirectory(testClass, "", null, BUILD_TIMESTAMP); + resourceDirectory = FileUtil.getTestSpecificDirectory(testClass, "", description.getMethodName(), BUILD_TIMESTAMP); + addToDestroy(resourceDirectory); ConverterUtil.deregister(); ConverterUtil.initConverters(); @@ -289,7 +290,7 @@ public class DatabaseResource implements TestRule { copyDb(config.getDbDirectory(), false, null); } - toDetroy.add(config.getDbAttachmentDirectory()); + addToDestroy(config.getDbAttachmentDirectory()); // load db config File dbConfig = new File(config.getDbDirectory(), config.getDbName() + ".properties"); @@ -348,7 +349,7 @@ public class DatabaseResource implements TestRule { } Assume.assumeTrue(false); } - toDetroy.add(target); + addToDestroy(target); FileUtils.copyDirectory(db, target); if (p != null) { Jdbcs.fillConnectionProperties( @@ -373,18 +374,13 @@ public class DatabaseResource implements TestRule { } - protected void after(Description description) throws IOException { - if (log.isInfoEnabled()) { - log.info("After test " + testClass); - } + public void cleanResources(Description description) { - closeSpring(); - TuttiConfiguration.setInstance(null); - - Set<Failure> failures = TuttiRunListener.getFailuresForClass( - description.getClassName()); + if (log.isDebugEnabled()) { + log.debug("Clean resources for test: " + description); + } - if (destroyResources && failures.isEmpty()) { + if (destroyResources) { // can destroy directories for (File file : toDetroy) { @@ -402,15 +398,30 @@ public class DatabaseResource implements TestRule { } } } else { - if (!destroyResources) { - if (log.isWarnEnabled()) { - log.warn("Won't destroy directories (destroyResources flag was false)."); - } - } else { - if (log.isWarnEnabled()) { - log.warn("Won't destroy directories cause of failures in test."); - } + + if (log.isWarnEnabled()) { + log.warn("Won't destroy directories (destroyResources flag was false)."); } + + } + + toDetroy.clear(); + + } + + protected void after(Description description) { + if (log.isInfoEnabled()) { + log.info("After test " + description); + } + + closeSpring(); + TuttiConfiguration.setInstance(null); + + if (description.getMethodName() == null) { + + // rule used on a class + CleanResourcesRule.cleanResources(description); + } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/TuttiRunListener.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/TuttiRunListener.java index 38851a1..1b200de 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/TuttiRunListener.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/TuttiRunListener.java @@ -30,6 +30,7 @@ import org.junit.runner.notification.Failure; import org.junit.runner.notification.RunListener; import java.util.Iterator; +import java.util.Objects; import java.util.Set; /** @@ -62,6 +63,25 @@ public final class TuttiRunListener extends RunListener { } } + public static synchronized void register(Description description) { + + if (log.isInfoEnabled()) { + log.info("Start to listen test " + description); + } + + Iterator<Failure> iterator = failures.iterator(); + String className = description.getClassName(); + String methodName = description.getMethodName(); + while (iterator.hasNext()) { + Failure failure = iterator.next(); + if (Objects.equals(className, failure.getDescription().getClassName()) + && Objects.equals(methodName, failure.getDescription().getMethodName())) { + iterator.remove(); + } + } + + } + public static synchronized Set<Failure> getFailuresForClass(String className) { Set<Failure> result = Sets.newHashSet(); for (Failure failure : failures) { @@ -72,6 +92,17 @@ public final class TuttiRunListener extends RunListener { return result; } + public static synchronized Failure getFailureForDescription(Description description) { + Failure result = null; + for (Failure failure : failures) { + if (description.equals(failure.getDescription())) { + result = failure; + break; + } + } + return result; + } + @Override public void testFailure(Failure failure) throws Exception { if (log.isDebugEnabled()) { diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/TuttiTestSupport.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/TuttiTestSupport.java new file mode 100644 index 0000000..b2c0d92 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/TuttiTestSupport.java @@ -0,0 +1,27 @@ +package fr.ifremer.tutti.persistence.test; + +import org.junit.ClassRule; +import org.junit.runner.Description; +import org.junit.runner.RunWith; + +/** + * Created on 2/23/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +@RunWith(TuttiRunner.class) +public class TuttiTestSupport { + + @ClassRule + public static final CleanResourcesRule cleanResources = new CleanResourcesRule(); + + public static void registerDescriptionAndResource(Description description, DatabaseResource databaseResource) { + + CleanResourcesRule.registerDescription(description, databaseResource); + + TuttiRunListener.register(description); + + } + +} diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/ServiceDbResource.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/ServiceDbResource.java index 5bf4c3b..e2e0d5f 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/ServiceDbResource.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/ServiceDbResource.java @@ -206,12 +206,7 @@ public class ServiceDbResource extends DatabaseResource { public void loadInternalProtocolFile() throws IOException { - loadInternalProtocolFile(null,"tuttiProtocol"); - -// File protocolFile = FileUtil.getFileFromPaths(new File("src"), "test", "data", getDbName(), "protocol.tuttiProtocol"); -// -// getConfig().getApplicationConfig().setOption(TuttiConfigurationOption.DB_PROTOCOL_DIRECTORY.getKey(), protocolFile.getParentFile().getAbsolutePath()); -// serviceContext.getDataContext().setProtocolId("protocol"); + loadInternalProtocolFile(null, "tuttiProtocol"); } @@ -244,13 +239,14 @@ public class ServiceDbResource extends DatabaseResource { @Override protected void before(Description description) throws Throwable { + super.before(description); -// serviceContext = createServiceContext(loader, getConfig()); serviceContext = createServiceContext(getConfig()); I18n.init(null, Locale.FRANCE); serviceContext.getConfig().setCsvSeparator(';'); + } @Override -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.