Author: steve.ebersole(a)jboss.com
Date: 2010-06-24 14:44:42 -0400 (Thu, 24 Jun 2010)
New Revision: 19822
Added:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixConvention.java
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixPlugin.java
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNode.java
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNodeProvider.java
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixTestingPlugin.java
Removed:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IntegrationTestPlugin.java
Modified:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IvyResolutionHelper.java
Log:
split processing of matrix databases and creating of matrix testing objects into separate
plugins
Added:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixConvention.java
===================================================================
---
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixConvention.java
(rev 0)
+++
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixConvention.java 2010-06-24
18:44:42 UTC (rev 19822)
@@ -0,0 +1,47 @@
+package org.hibernate.gradle.testing.database;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import groovy.lang.Closure;
+import org.gradle.util.ConfigureUtil;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class DatabaseMatrixConvention {
+ private final DatabaseMatrixPlugin plugin;
+ private final Configuration configuration = new Configuration();
+
+ public DatabaseMatrixConvention(DatabaseMatrixPlugin plugin) {
+ this.plugin = plugin;
+ }
+
+ /**
+ * Allows the user access to define where we should look for database configs
+ *
+ * @param closure The configuration closure
+ */
+ public void databases(Closure closure) {
+ ConfigureUtil.configure( closure, configuration );
+ for ( Object baseDir : configuration.baseDirectories ) {
+ plugin.applyDatabaseDirectories( baseDir );
+ }
+ }
+
+ private static class Configuration {
+ List<Object> baseDirectories = new ArrayList<Object>();
+
+ public void baseDir(Object directory) {
+ baseDirectories.add( directory );
+ }
+
+ public void baseDirs(Object... directories) {
+ this.baseDirectories.addAll( Arrays.asList( directories ) );
+ }
+ }
+}
Added:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixPlugin.java
===================================================================
---
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixPlugin.java
(rev 0)
+++
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/database/DatabaseMatrixPlugin.java 2010-06-24
18:44:42 UTC (rev 19822)
@@ -0,0 +1,128 @@
+package org.hibernate.gradle.testing.database;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gradle.api.Plugin;
+import org.gradle.api.Project;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.file.FileCollection;
+import org.gradle.api.internal.artifacts.dependencies.DefaultSelfResolvingDependency;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.hibernate.gradle.testing.matrix.MatrixNode;
+import org.hibernate.gradle.testing.matrix.MatrixNodeProvider;
+import org.hibernate.gradle.util.IvyResolutionHelper;
+import org.hibernate.gradle.util.Jdk;
+import org.hibernate.gradle.util.ResolutionException;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public class DatabaseMatrixPlugin implements Plugin<Project>, MatrixNodeProvider {
+ private static final Logger log = LoggerFactory.getLogger( DatabaseMatrixPlugin.class
);
+
+ private Project project;
+ private IvyResolutionHelper ivyResolutionHelper;
+ private List<MatrixNode> matrixNodes = new ArrayList<MatrixNode>();
+
+ public void apply(Project project) {
+ this.project = project;
+ this.ivyResolutionHelper = new IvyResolutionHelper( project );
+
+ project.getConvention().getPlugins().put( "databases", new
DatabaseMatrixConvention( this ) );
+ }
+
+
+ /*package*/ void applyDatabaseDirectories(Object databasesBaseDirObject) {
+ final File databasesBaseDir = project.file( databasesBaseDirObject );
+ for ( File entry : databasesBaseDir.listFiles() ) {
+ if ( entry.isDirectory() ) {
+ applyPossibleDatabaseDirectory( entry );
+ }
+ }
+ }
+
+ private void applyPossibleDatabaseDirectory(final File databaseDir) {
+ final String databaseName = databaseDir.getName();
+ log.debug( "Checking potential database directory : {}", databaseName );
+
+ final Configuration configuration = prepareJdbcDependencies( databaseDir );
+ if ( configuration == null ) {
+ return;
+ }
+ configuration.setVisible( true );
+ configuration.setDescription( "The [" + databaseName + "] JDBC
dependency configuration" );
+
+ final File resourcesDir = new File( databaseDir, "resources" );
+ if ( resourcesDir.isDirectory() && resourcesDir.exists() ) {
+ configuration.addDependency(
+ new DefaultSelfResolvingDependency( project.files( resourcesDir ) )
+ );
+ }
+
+ matrixNodes.add(
+ new MatrixNode() {
+ public String getName() {
+ return databaseName;
+ }
+
+ public Configuration getTestingRuntimeConfiguration() {
+ return configuration;
+ }
+
+ public Jdk getTestingRuntimeJdk() {
+ return null;
+ }
+ }
+ );
+ }
+
+ private Configuration prepareJdbcDependencies(File databaseDir) {
+ final String databaseName = databaseDir.getName();
+
+ final File ivyXml = new File( databaseDir, "ivy.xml" );
+ if ( ivyXml.exists() && ivyXml.isFile() ) {
+ try {
+ return ivyResolutionHelper.resolve( ivyXml, databaseName );
+ }
+ catch ( ResolutionException e ) {
+ log.info( "Skipping database '{}' due to problems resolving
dependencies", databaseDir.getName() );
+ }
+ }
+
+ final File jdbcDir = new File( databaseDir, "jdbc" );
+ if ( jdbcDir.exists() && jdbcDir.isDirectory() ) {
+ File[] jdbcDirFiles = jdbcDir.listFiles();
+ if ( jdbcDirFiles == null || jdbcDirFiles.length == 0 ) {
+ log.warn( "Found 'jdbc' directory, but no entries" );
+ }
+ else {
+ return createSelfContainedConfiguration( jdbcDir, databaseName );
+ }
+ }
+
+ log.info(
+ "Skipping directory from database processing [{}]; could not locate
'ivy.xml' nor 'jdbc' directory",
+ databaseDir.getAbsolutePath()
+ );
+
+ return null;
+ }
+
+ private Configuration createSelfContainedConfiguration(File directory, String
configurationName) {
+ DefaultSelfResolvingDependency dependency =
+ new DefaultSelfResolvingDependency( project.files( (File[]) directory.listFiles() )
);
+ Configuration configuration = ivyResolutionHelper.getOrCreateConfiguration(
configurationName );
+ configuration.addDependency( dependency );
+ return configuration;
+ }
+
+ public List<MatrixNode> getMatrixNodes() {
+ return matrixNodes;
+ }
+}
Added:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNode.java
===================================================================
---
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNode.java
(rev 0)
+++
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNode.java 2010-06-24
18:44:42 UTC (rev 19822)
@@ -0,0 +1,25 @@
+package org.hibernate.gradle.testing.matrix;
+
+import java.io.File;
+
+import org.gradle.api.artifacts.Configuration;
+
+import org.hibernate.gradle.util.Jdk;
+
+/**
+ * Describes the various pieces of information being contributed to the matrix by a given
node.
+ *
+ * @author Steve Ebersole
+ */
+public interface MatrixNode {
+ /**
+ * Get the name of this node.
+ *
+ * @return The node.
+ */
+ public String getName();
+
+ public Configuration getTestingRuntimeConfiguration();
+
+ public Jdk getTestingRuntimeJdk();
+}
Added:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNodeProvider.java
===================================================================
---
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNodeProvider.java
(rev 0)
+++
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixNodeProvider.java 2010-06-24
18:44:42 UTC (rev 19822)
@@ -0,0 +1,12 @@
+package org.hibernate.gradle.testing.matrix;
+
+import java.util.List;
+
+/**
+ * TODO : javadoc
+ *
+ * @author Steve Ebersole
+ */
+public interface MatrixNodeProvider {
+ public List<MatrixNode> getMatrixNodes();
+}
Added:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixTestingPlugin.java
===================================================================
---
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixTestingPlugin.java
(rev 0)
+++
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/testing/matrix/MatrixTestingPlugin.java 2010-06-24
18:44:42 UTC (rev 19822)
@@ -0,0 +1,163 @@
+package org.hibernate.gradle.testing.matrix;
+
+import java.io.File;
+import java.util.List;
+
+import org.gradle.api.Plugin;
+import org.gradle.api.Project;
+import org.gradle.api.Task;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.file.FileCollection;
+import org.gradle.api.plugins.JavaPluginConvention;
+import org.gradle.api.tasks.SourceSet;
+import org.gradle.api.tasks.SourceSetContainer;
+import org.gradle.api.tasks.testing.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.gradle.api.plugins.JavaPlugin.COMPILE_CONFIGURATION_NAME;
+import static org.gradle.api.plugins.JavaPlugin.RUNTIME_CONFIGURATION_NAME;
+import static org.gradle.api.plugins.JavaPlugin.TEST_TASK_NAME;
+
+/**
+ * TODO : 1) add a base configuration of common attribute across all matrix node tasks
(convention)
+ * TODO: 2) somehow allow applying just a single database to a project (non matrix
testing).
+ *
+ * @author Steve Ebersole
+ */
+public class MatrixTestingPlugin implements Plugin<Project> {
+ private static final Logger log = LoggerFactory.getLogger( MatrixTestingPlugin.class );
+
+ public static final String MATRIX_COMPILE_CONFIG_NAME = "matrixCompile";
+ public static final String MATRIX_RUNTIME_CONFIG_NAME = "matrixRuntime";
+ public static final String MATRIX_TASK_NAME = "matrix";
+ public static final String MATRIX_SOURCE_SET_NAME = "matrix";
+
+ private Project project;
+
+ private Configuration matrixCompileConfig;
+ private Configuration matrixRuntimeConfig;
+
+ private Task matrixTask;
+
+ private SourceSet matrixSourceSet;
+
+ public void apply(Project project) {
+ this.project = project;
+
+ matrixCompileConfig = prepareCompileConfiguration();
+ matrixRuntimeConfig = prepareRuntimeConfiguration();
+
+ matrixSourceSet = prepareSourceSet();
+
+ // create a "grouping task" for all the matrix nodes
+ matrixTask = project.getTasks().add( MATRIX_TASK_NAME );
+
+ generateNodes();
+ }
+
+ private Configuration prepareCompileConfiguration() {
+ return project.getConfigurations().add( MATRIX_COMPILE_CONFIG_NAME )
+ .setVisible( true )
+ .setTransitive( false )
+ .setDescription( "Dependencies used to compile the matrix tests" )
+ .extendsFrom( project.getConfigurations().getByName( COMPILE_CONFIGURATION_NAME ) );
+ }
+
+ private Configuration prepareRuntimeConfiguration() {
+ return project.getConfigurations().add( MATRIX_RUNTIME_CONFIG_NAME )
+ .setVisible( true )
+ .setTransitive( true )
+ .setDescription( "Dependencies (baseline) used to run the matrix tests" )
+ .extendsFrom( matrixCompileConfig )
+ .extendsFrom( project.getConfigurations().getByName( RUNTIME_CONFIGURATION_NAME ) );
+ }
+
+ private SourceSet prepareSourceSet() {
+ final SourceSetContainer sourceSets = project.getConvention().getPlugin(
JavaPluginConvention.class ).getSourceSets();
+ SourceSet sourceSet = sourceSets.findByName( MATRIX_SOURCE_SET_NAME );
+ if ( sourceSet == null ) {
+ sourceSet = sourceSets.add( MATRIX_SOURCE_SET_NAME );
+ }
+
+ final SourceSet mainSourceSet = sourceSets.getByName( SourceSet.MAIN_SOURCE_SET_NAME
);
+ sourceSet.setCompileClasspath( mainSourceSet.getClasses().plus( matrixCompileConfig )
);
+ sourceSet.setRuntimeClasspath( mainSourceSet.getClasses().plus( sourceSet.getClasses()
).plus( matrixRuntimeConfig ) );
+
+ final SourceSet unitTestSourceSet = sourceSets.getByName(
SourceSet.TEST_SOURCE_SET_NAME );
+ sourceSet.setClassesDir( unitTestSourceSet.getClassesDir() );
+
+ return sourceSet;
+ }
+
+ private void generateNodes() {
+ // For now we just hard code this to locate the databases processed by
+ // org.hibernate.gradle.testing.database.DatabaseMatrixPlugin. But long term would be
much better to
+ // abstract this idea via the MatrixNode/MatrixNodeProvider interfaces; this would
allow the jvm variance
+ // needed for jdbc3/jdbc4 testing for example. Not to mention its much more generally
applicable
+ //
+ // Also the notion that the plugin as a MatrixNodeProducer might not be appropriate.
probably a split there
+ // is in order too (config producer and jvm producer and somehow they get wired into a
matrix).
+ //
+ // but again this is just a start.
+ List<MatrixNode> matrixNodes = locateMatrixNodes();
+
+ for ( MatrixNode node : matrixNodes ) {
+ Task nodeTask = prepareNodeTask( node );
+ matrixTask.dependsOn( nodeTask );
+ }
+ }
+
+ private List<MatrixNode> locateMatrixNodes() {
+ Project project = this.project;
+ do {
+ for ( Plugin plugin : project.getPlugins() ) {
+ if ( MatrixNodeProvider.class.isInstance( plugin ) ) {
+ return ( (MatrixNodeProvider) plugin ).getMatrixNodes();
+ }
+ }
+ project = project.getParent();
+ } while ( project != null );
+
+ return null;
+ }
+
+
+ private static final String[] INTG_TEST_INCLUDES = new String[] {
+ "**/org/hibernate/test/**",
+ "**/org/hibernate/ejb/test/**"
+ };
+
+ private Task prepareNodeTask(MatrixNode node) {
+ final Test nodeTask = project.getTasks().add( MATRIX_TASK_NAME + '_' +
node.getName(), Test.class );
+ nodeTask.setDescription( "Runs the matrix against " + node.getName() );
+
+ FileCollection classpath = node.getTestingRuntimeConfiguration()
+ .plus( matrixRuntimeConfig )
+ .plus( matrixSourceSet.getRuntimeClasspath() );
+ nodeTask.setClasspath( classpath );
+ nodeTask.setTestClassesDir( matrixSourceSet.getClassesDir() );
+ nodeTask.getTestSrcDirs().addAll( matrixSourceSet.getJava().getSrcDirs() );
+
+ final File baseOutputDirectory = new File( new File( project.getBuildDir(),
"matrix" ), node.getName() );
+ nodeTask.setWorkingDir( baseOutputDirectory );
+ nodeTask.setTestReportDir( new File( baseOutputDirectory, "reports" ) );
+ nodeTask.setTestResultsDir( new File( baseOutputDirectory, "results" ) );
+
+ // todo : to make this more general purpose we would need to expose the Test options
via a convention object.
+ // for now we just set the Hibernate specific needs...
+ nodeTask.include( INTG_TEST_INCLUDES );
+
+ final Test unitTestTask = (Test) project.getTasks().findByName( TEST_TASK_NAME );
+ if ( unitTestTask != null ) {
+ nodeTask.dependsOn( unitTestTask );
+ unitTestTask.exclude( INTG_TEST_INCLUDES );
+ }
+ nodeTask.dependsOn( project.getTasks().getByName( matrixSourceSet.getClassesTaskName()
) );
+
+ nodeTask.jvmArgs( "-Xms512m", "-Xmx1024m",
"-XX:MaxPermSize=128m" );
+ nodeTask.getSystemProperties().put( "hibernate.test.validatefailureexpected",
"true" );
+
+ return nodeTask;
+ }
+}
Deleted:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IntegrationTestPlugin.java
===================================================================
---
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IntegrationTestPlugin.java 2010-06-24
18:37:40 UTC (rev 19821)
+++
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IntegrationTestPlugin.java 2010-06-24
18:44:42 UTC (rev 19822)
@@ -1,215 +0,0 @@
-package org.hibernate.gradle.util;
-
-import java.io.File;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.gradle.api.Plugin;
-import org.gradle.api.Project;
-import org.gradle.api.Task;
-import org.gradle.api.artifacts.Configuration;
-import org.gradle.api.file.FileCollection;
-import org.gradle.api.internal.artifacts.dependencies.DefaultSelfResolvingDependency;
-import org.gradle.api.plugins.JavaPluginConvention;
-import org.gradle.api.tasks.SourceSet;
-import org.gradle.api.tasks.SourceSetContainer;
-import org.gradle.api.tasks.testing.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import static org.gradle.api.plugins.JavaPlugin.COMPILE_CONFIGURATION_NAME;
-import static org.gradle.api.plugins.JavaPlugin.RUNTIME_CONFIGURATION_NAME;
-import static org.gradle.api.plugins.JavaPlugin.TEST_TASK_NAME;
-
-
-/**
- * TODO : would be nice to allow singular configuration of common attributes across all
the intgTest_X tasks
- * As it is each would need to be configured individually
- *
- * @author Steve Ebersole
- */
-public class IntegrationTestPlugin implements Plugin<Project> {
- private static final Logger log = LoggerFactory.getLogger( IntegrationTestPlugin.class
);
-
- public static final String INTG_TEST_TASK_NAME = "intgTest";
- public static final String INTG_TEST_SOURCE_SET_NAME = "intgTest";
- public static final String INTG_TEST_COMPILE_CONFIG_NAME = "intgTestCompile";
- public static final String INTG_TEST_RUNTIME_CONFIG_NAME = "intgTestRuntime";
-
- private Project project;
- private IvyResolutionHelper ivyResolutionHelper;
- private Set<File> databaseDirs = new HashSet<File>();
-
- private Configuration intgTestCompileConfig;
- private Configuration intgTestRuntimeConfig;
- private SourceSet intgTestSourceSet;
- private Task intgTestGroupTask;
-
- public void apply(Project project) {
- this.project = project;
- this.ivyResolutionHelper = new IvyResolutionHelper( project );
- this.databaseDirs = new HashSet<File>();
- applyDatabaseDirectories( new File( project.getRootProject().getProjectDir(),
"databases" ) );
-
- intgTestCompileConfig = prepareCompileConfiguration();
- intgTestRuntimeConfig = prepareRuntimeConfiguration();
-
- intgTestSourceSet = prepareSourceSet();
-
- // create a "grouping task" for all the integration tests in *this* project
- intgTestGroupTask = project.getTasks().add( INTG_TEST_TASK_NAME );
-
-// todo : handle "extra" / "local" database directories; requires
convention object and delayed task generation
-//
-// project.getGradle().addBuildListener(
-// new BuildAdapter() {
-// @Override
-// public void projectsEvaluated(Gradle gradle) {
-// finishUp();
-// }
-// }
-// );
-// for now we just use the defaults and finish up immediately
- finishUp();
- }
-
- private SourceSet prepareSourceSet() {
- final SourceSetContainer sourceSets = project.getConvention().getPlugin(
JavaPluginConvention.class ).getSourceSets();
- SourceSet sourceSet = sourceSets.findByName( INTG_TEST_SOURCE_SET_NAME );
- if ( sourceSet == null ) {
- sourceSet = sourceSets.add( INTG_TEST_SOURCE_SET_NAME );
- }
-// sourceSet.setCompileClasspath( intgTestCompileConfig );
-// // this one is not totally accurate as it is missing the specific jdbc drivers.
-// sourceSet.setRuntimeClasspath( intgTestSourceSet.getClasses().plus(
intgTestRuntimeConfig ) );
-
- final SourceSet mainSourceSet = sourceSets.getByName( SourceSet.MAIN_SOURCE_SET_NAME
);
- sourceSet.setCompileClasspath( mainSourceSet.getClasses().plus( intgTestCompileConfig )
);
- sourceSet.setRuntimeClasspath( mainSourceSet.getClasses().plus( sourceSet.getClasses()
).plus( intgTestRuntimeConfig ) );
-
- final SourceSet unitTestSourceSet = sourceSets.getByName(
SourceSet.TEST_SOURCE_SET_NAME );
- sourceSet.setClassesDir( unitTestSourceSet.getClassesDir() );
-
- return sourceSet;
- }
-
- private Configuration prepareCompileConfiguration() {
- return project.getConfigurations().add( INTG_TEST_COMPILE_CONFIG_NAME )
- .setVisible( true )
- .setTransitive( false )
- .setDescription( "Libraries/dependencies used to compile the integration
tests" )
- .extendsFrom( project.getConfigurations().getByName( COMPILE_CONFIGURATION_NAME ) );
- }
-
- private Configuration prepareRuntimeConfiguration() {
- return project.getConfigurations().add( INTG_TEST_RUNTIME_CONFIG_NAME )
- .setVisible( true )
- .setTransitive( true )
- .setDescription( "Libraries/dependencies used to run the integration tests"
)
- .extendsFrom( intgTestCompileConfig )
- .extendsFrom( project.getConfigurations().getByName( RUNTIME_CONFIGURATION_NAME ) );
- }
-
- private void applyDatabaseDirectories(File databasesBaseDir) {
- File[] files = databasesBaseDir.listFiles();
- for ( File file : files ) {
- log.debug( "Checking potential database directory : {}", file.getName() );
- if ( !file.isDirectory() ) {
- continue;
- }
- // look for a file named 'ivy.xml' or a directory named 'jdbc'
(expected to contain driver-related jars)
- File ivyXml = new File( file, "ivy.xml" );
- if ( ivyXml.exists() && ivyXml.isFile() ) {
- databaseDirs.add( file );
- continue;
- }
- File jdbcDir = new File( file, "jdbc" );
- if ( jdbcDir.exists() && jdbcDir.isDirectory() ) {
- // it better have entries also...
- File[] jdbcDirFiles = jdbcDir.listFiles();
- if ( jdbcDirFiles == null || jdbcDirFiles.length == 0 ) {
- log.warn( "Found 'jdbc' directory, but no entries" );
- }
- databaseDirs.add( file );
- continue;
- }
- log.info( "Skipping database directory [{}] as no 'ivy.xml' file nor
'jdbc' directory could be found", file.getName() );
- }
- }
-
- private void finishUp() {
- for ( File databaseDir : databaseDirs ) {
- processDatabase( databaseDir );
- }
- }
-
- private void processDatabase(File databaseDir) {
- try {
- Configuration configuration = prepareJdbcDependencies( databaseDir );
- configuration.extendsFrom( intgTestRuntimeConfig );
- Task intgTestTask = prepareTestTask( databaseDir, configuration );
- intgTestGroupTask.dependsOn( intgTestTask );
- }
- catch ( ResolutionException e ) {
- log.info( "Skipping database '{}' due to problems resolving
dependencies", databaseDir.getName() );
- }
- }
-
- private Configuration prepareJdbcDependencies(File databaseDir) {
- final String databaseName = databaseDir.getName();
- log.debug( "Starting processing of '{}' database", databaseName );
- final File ivyXml = new File( databaseDir, "ivy.xml" );
- if ( ivyXml.exists() && ivyXml.isFile() ) {
- return ivyResolutionHelper.resolve( ivyXml, databaseName );
- }
- else {
- return createSelfContainedConfiguration( new File( databaseDir, "jdbc" ),
databaseName );
- }
- }
-
- private Configuration createSelfContainedConfiguration(File directory, String
configurationName) {
- DefaultSelfResolvingDependency dependency = new DefaultSelfResolvingDependency(
- project.files( (File[]) directory.listFiles() )
- );
- Configuration configuration = ivyResolutionHelper.getOrCreateConfiguration(
configurationName );
- configuration.addDependency( dependency );
- return configuration;
- }
-
- private static final String INTG_TEST_INCLUDES = "**/org/hibernate/test/**";
-
- private Task prepareTestTask(File databaseDir, Configuration configuration) {
- final String databaseName = databaseDir.getName();
- final Test intgTestTask = project.getTasks().add( String.format(
"intgTest_%s", databaseName ), Test.class );
- intgTestTask.setDescription( "Runs the integration tests for " + databaseName
);
-
- final FileCollection classpath = project.files( new File( databaseDir,
"resources" ) )
- .plus( intgTestSourceSet.getRuntimeClasspath() )
- .plus( configuration );
- intgTestTask.setClasspath( classpath );
- intgTestTask.setTestClassesDir( intgTestSourceSet.getClassesDir() );
- intgTestTask.getTestSrcDirs().addAll( intgTestSourceSet.getJava().getSrcDirs() );
-
- final File baseOutputDirectory = new File( new File( project.getBuildDir(),
"intgTest" ), databaseName );
- intgTestTask.setWorkingDir( baseOutputDirectory );
- intgTestTask.setTestReportDir( new File( baseOutputDirectory, "reports" ) );
- intgTestTask.setTestResultsDir( new File( baseOutputDirectory, "results" )
);
-
- // todo : to make this more general purpose we would need to expose the Test options
via a convention object.
- // for now we just set the Hibernate specific needs...
- intgTestTask.include( INTG_TEST_INCLUDES );
-
- final Test unitTestTask = (Test) project.getTasks().findByName( TEST_TASK_NAME );
- if ( unitTestTask != null ) {
- intgTestTask.dependsOn( unitTestTask );
- unitTestTask.exclude( INTG_TEST_INCLUDES );
- }
- intgTestTask.dependsOn( project.getTasks().getByName(
intgTestSourceSet.getClassesTaskName() ) );
-
- intgTestTask.setMaxHeapSize( "1024m" );
- intgTestTask.getSystemProperties().put(
"hibernate.test.validatefailureexpected", "true" );
-
- return intgTestTask;
- }
-
-}
Modified:
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IvyResolutionHelper.java
===================================================================
---
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IvyResolutionHelper.java 2010-06-24
18:37:40 UTC (rev 19821)
+++
core/branches/gradle2/buildSrc/src/main/java/org/hibernate/gradle/util/IvyResolutionHelper.java 2010-06-24
18:44:42 UTC (rev 19822)
@@ -86,9 +86,6 @@
Configuration configuration = project.getConfigurations().findByName( configurationName
);
if ( configuration == null ) {
configuration = project.getConfigurations().add( configurationName );
- configuration.setVisible( true );
- configuration.setDescription( "The [" + configurationName + "]
integration test dependency configuration" );
- configuration.extendsFrom( project.getConfigurations().getByName(
TEST_RUNTIME_CONFIGURATION_NAME ) );
}
return configuration;
}