Working towards a bootstrap test to be added to generated code. NOT WORKING at 
the moment, and hope Paul can help to figure out what goes wrong in "npm run 
test".

Signed-off-by: niclas <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/0645fa49
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/0645fa49
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/0645fa49

Branch: refs/heads/yeoman-work
Commit: 0645fa4944da770db8e072ebef4fe43bc18c6aaa
Parents: ae4f1ad
Author: niclas <[email protected]>
Authored: Tue May 23 22:20:45 2017 +0800
Committer: niclas <[email protected]>
Committed: Tue May 23 22:20:45 2017 +0800

----------------------------------------------------------------------
 .../polygene/gradle/code/CodePlugin.groovy      |   8 +-
 .../dependencies/PolygeneExtension.groovy       |  12 --
 .../distributions/DistributionsPlugin.groovy    |   1 -
 .../gradle/structure/docker/DockerPlugin.groovy | 151 ++++++++++++++++
 .../internals/InternalDockerPlugin.groovy       | 151 ----------------
 .../structure/internals/InternalPlugin.groovy   |  33 ----
 .../gradle-plugins/polygene-docker.properties   |  18 ++
 .../polygene-internal-docker.properties         |  18 --
 .../gradle-plugins/polygene-internal.properties |  18 --
 .../layered/LayeredApplicationAssembler.java    |   7 +-
 core/testsupport/build.gradle                   |   3 +
 .../polygene/test/docker/DelayChecker.java      |  60 +++++++
 .../apache/polygene/test/docker/DockerRule.java | 156 ++++++++++++++++
 .../main/resources/docker/cassandra/Dockerfile  |  16 ++
 .../main/resources/docker/memcached/Dockerfile  |  16 ++
 .../src/main/resources/docker/mysql/Dockerfile  |  16 ++
 .../main/resources/docker/postgres/Dockerfile   |  17 ++
 .../resources/docker/postgres/init-test-db.sh   |  29 +++
 .../src/main/resources/docker/redis/Dockerfile  |  16 ++
 .../src/main/resources/docker/riak/Dockerfile   |  16 ++
 .../main/resources/docker/s3server/Dockerfile   |  20 +++
 extensions/cache-memcache/build.gradle          |   2 +-
 .../cache/memcache/MemcacheCachePoolTest.java   |   2 +-
 extensions/entitystore-cassandra/build.gradle   |   2 +-
 .../cassandra/CassandraEntityStoreTest.java     |   2 +-
 extensions/entitystore-jclouds/build.gradle     |   2 +-
 .../entitystore/jclouds/JCloudsS3Test.java      |   7 +-
 .../MongoDBEntityStoreConfiguration.java        |  92 ++++++++++
 .../mongodb/MongoEntityStoreConfiguration.java  |  92 ----------
 .../mongodb/MongoMapEntityStoreMixin.java       |   4 +-
 .../assembly/MongoDBEntityStoreAssembler.java   |   4 +-
 .../mongodb/EmbedMongoMapEntityStoreTest.java   |   6 +-
 .../mongodb/MongoMapEntityStoreTest.java        |   6 +-
 .../MongoMapEntityStoreWithCacheTest.java       |   4 +-
 extensions/entitystore-redis/build.gradle       |   2 +-
 .../redis/RedisMapEntityStoreTest.java          |   2 +-
 .../redis/RedisMapEntityStoreWithCacheTest.java |   2 +-
 extensions/entitystore-riak/build.gradle        |   2 +-
 .../riak/RiakMapEntityStoreTest.java            |   2 +-
 .../riak/RiakMapEntityStoreWithCacheTest.java   |   2 +-
 extensions/entitystore-sql/build.gradle         |   2 +-
 .../entitystore/sql/MySQLEntityStoreTest.java   |   2 +-
 .../sql/PostgreSQLEntityStoreTest.java          |   2 +-
 extensions/indexing-sql/build.gradle            |   2 +-
 .../postgresql/PostgreSQLComplexQueryTest.java  |   2 +-
 .../postgresql/PostgreSQLDBIntegrityTest.java   |   2 +-
 .../postgresql/PostgreSQLEntityFinderTest.java  |   2 +-
 .../sql/postgresql/PostgreSQLQueryTest.java     |   2 +-
 internals/testsupport-internal/build.gradle     |  32 ----
 .../src/main/docker/cassandra/Dockerfile        |  16 --
 .../src/main/docker/memcached/Dockerfile        |  16 --
 .../src/main/docker/mysql/Dockerfile            |  16 --
 .../src/main/docker/postgres/Dockerfile         |  17 --
 .../src/main/docker/postgres/init-test-db.sh    |  29 ---
 .../src/main/docker/redis/Dockerfile            |  16 --
 .../src/main/docker/riak/Dockerfile             |  16 --
 .../src/main/docker/s3server/Dockerfile         |  20 ---
 .../polygene/test/internal/DelayChecker.java    |  60 -------
 .../polygene/test/internal/DockerRule.java      | 156 ----------------
 .../apache/polygene/test/internal/package.html  |  25 ---
 settings.gradle                                 |   2 -
 tools/generator-polygene/app/index.js           |   2 +-
 .../ConfigModule/bootstrap.tmpl                 |   2 +
 .../templates/ConfigurationLayer/bootstrap.tmpl |   2 +-
 .../RestAPIApplication/Launcher.java.tmpl       |   2 +-
 .../app/templates/RestAPIApplication/app.js     |   2 +-
 .../RestAPIApplication/bootstrap-test.tmpl      | 176 ++++++++++++++++++-
 .../templates/RestAPIApplication/bootstrap.tmpl |   7 +-
 68 files changed, 854 insertions(+), 795 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
index eb605c9..1aa7b5a 100644
--- a/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/polygene/gradle/code/CodePlugin.groovy
@@ -22,11 +22,7 @@ import org.apache.polygene.gradle.BasePlugin
 import org.apache.polygene.gradle.TaskGroups
 import org.apache.polygene.gradle.dependencies.DependenciesDeclarationExtension
 import org.apache.polygene.gradle.dependencies.DependenciesPlugin
-import org.gradle.api.Action
-import org.gradle.api.JavaVersion
-import org.gradle.api.Plugin
-import org.gradle.api.Project
-import org.gradle.api.Task
+import org.gradle.api.*
 import org.gradle.api.plugins.JavaPluginConvention
 import org.gradle.api.plugins.osgi.OsgiManifest
 import org.gradle.api.tasks.bundling.AbstractArchiveTask
@@ -131,7 +127,7 @@ class CodePlugin implements Plugin<Project>
     // Configuration task to honor disabling Docker when unavailable
     project.tasks.create( 'configureDockerForTest', { Task task ->
       // TODO Untangle docker connectivity check & test task configuration
-      task.dependsOn ':internals:testsupport-internal:checkDockerConnectivity'
+        task.dependsOn ':core:testsupport:checkDockerConnectivity'
       testTasks.each { it.dependsOn task }
       task.inputs.property 'polygeneTestSupportDockerDisabled',
                            { project.findProperty( 
DOCKER_DISABLED_EXTRA_PROPERTY ) }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
index e08a4ab..435f278 100644
--- 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
+++ 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/dependencies/PolygeneExtension.groovy
@@ -26,13 +26,11 @@ class PolygeneExtension
 {
   private final Project project
   final Core core
-  final Internals internals
 
   PolygeneExtension( Project project )
   {
     this.project = project
     this.core = new Core()
-    this.internals = new Internals()
   }
 
   class Core
@@ -44,11 +42,6 @@ class PolygeneExtension
     Dependency testsupport = core( 'testsupport' )
   }
 
-  class Internals
-  {
-    Dependency testsupport = internal( 'testsupport-internal' )
-  }
-
   private Dependency core( String name )
   {
     return dependency( 'core', name )
@@ -69,11 +62,6 @@ class PolygeneExtension
     return dependency( 'tools', name )
   }
 
-  Dependency internal( String name )
-  {
-    return dependency( 'internals', name )
-  }
-
   private Dependency dependency( String group, String name )
   {
     project.dependencies.project( path: ":$group:$name" )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
index 1dfd88b..3f2f017 100644
--- 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
+++ 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/distributions/DistributionsPlugin.groovy
@@ -135,7 +135,6 @@ class DistributionsPlugin implements Plugin<Project>
       spec.include 'distributions/**'
       spec.include 'reports/**'
       spec.include 'release/**'
-      spec.include 'internals/**'
       spec.include 'manual/**'
       spec.include 'samples/**'
       spec.include 'tests/**'

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/docker/DockerPlugin.groovy
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/docker/DockerPlugin.groovy
 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/docker/DockerPlugin.groovy
new file mode 100644
index 0000000..1934568
--- /dev/null
+++ 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/docker/DockerPlugin.groovy
@@ -0,0 +1,151 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.polygene.gradle.structure.docker
+
+import com.bmuschko.gradle.docker.DockerExtension
+import com.bmuschko.gradle.docker.DockerRemoteApiPlugin
+import com.bmuschko.gradle.docker.tasks.DockerVersion
+import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
+import groovy.transform.CompileStatic
+import org.apache.polygene.gradle.BasePlugin
+import org.apache.polygene.gradle.code.CodePlugin
+import org.apache.polygene.gradle.code.PublishNaming
+import org.apache.polygene.gradle.dependencies.DependenciesDeclarationExtension
+import org.apache.polygene.gradle.dependencies.DependenciesPlugin
+import org.apache.tools.ant.filters.ReplaceTokens
+import org.gradle.api.Action
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.Task
+import org.gradle.api.file.CopySpec
+import org.gradle.api.logging.LogLevel
+
+@CompileStatic
+class DockerPlugin implements Plugin<Project>
+{
+  static class TaskNames
+  {
+    static final String CHECK_DOCKER_CONNECTIVITY = 'checkDockerConnectivity'
+  }
+
+  private final String dockerMachineName = System.getenv( 
'DOCKER_MACHINE_NAME' )
+  private final String dockerHost = System.getenv( 'DOCKER_HOST' )
+  private final String dockerCertPath = System.getenv( 'DOCKER_CERT_PATH' )
+
+  @Override
+  void apply( Project project )
+  {
+    project.plugins.apply BasePlugin
+    project.plugins.apply DependenciesPlugin
+    applyDockerPlugin( project )
+    applyDockerSwitch( project )
+    applyDockerBuildImage( project )
+  }
+
+  private void applyDockerPlugin( Project project )
+  {
+    project.plugins.apply DockerRemoteApiPlugin
+    def dockerExtension = project.extensions.getByType DockerExtension
+    // TLS support
+    if( dockerCertPath )
+    {
+      dockerExtension.certPath = new File( dockerCertPath )
+    }
+  }
+
+  private void applyDockerSwitch( Project project )
+  {
+    project.tasks.create( TaskNames.CHECK_DOCKER_CONNECTIVITY, DockerVersion, 
{ DockerVersion task ->
+      task.onError = { ex ->
+        // Disable Docker for this build
+        project.rootProject.extensions.extraProperties.set( 
CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
+        if( project.hasProperty( 'skipDocker' ) )
+        {
+            project.logger.lifecycle 'skipDocker property is set, all Docker 
tasks will be SKIPPED'
+        }
+        else if( project.logger.isEnabled( LogLevel.INFO ) )
+        {
+          project.logger.info 'Unable to connect to Docker, all Docker tasks 
will be SKIPPED', ex
+        }
+        else
+        {
+          project.logger.lifecycle "Unable to connect to Docker, all Docker 
tasks will be SKIPPED\n  ${ ( ( Exception ) ex ).message }"
+        }
+      }
+      task.onComplete = {
+        if( project.hasProperty( 'skipDocker' ) )
+        {
+          // Disable Docker for this build
+          project.rootProject.extensions.extraProperties.set( 
CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
+          project.logger.lifecycle 'skipDocker property is set, all Docker 
tasks will be SKIPPED'
+        }
+      }
+    } as Action<DockerVersion> )
+  }
+
+  private void applyDockerBuildImage( Project project )
+  {
+    def classesTask = project.tasks.getByName 'classes'
+      def dockers = project.file('src/main/resources/docker')
+    def dependencies = project.rootProject.extensions.getByType( 
DependenciesDeclarationExtension )
+    dockers.eachDir { File dockerDir ->
+      def dockerName = dockerDir.name
+      def buildDockerfileTaskName = "build${ dockerName.capitalize() 
}Dockerfile"
+      def buildImageTaskName = "build${ dockerName.capitalize() }DockerImage"
+      def tmpDir = project.file "${ project.buildDir }/tmp/docker/${ 
dockerName }"
+      tmpDir.mkdirs()
+      def buildDockerfileTask = project.tasks.create( buildDockerfileTaskName 
) { Task task ->
+        task.description = "Build $dockerName Dockerfile"
+        task.inputs.property 'dockerImagesVersions', 
dependencies.dockerImagesVersions
+        task.inputs.dir dockerDir
+        task.outputs.dir tmpDir
+        // Filter Dockerfile for image versions from dependencies declaration
+        task.doFirst {
+          project.copy { CopySpec spec ->
+            spec.from( dockerDir ) { CopySpec unfiltered ->
+              unfiltered.exclude 'Dockerfile'
+            }
+            spec.from( dockerDir ) { CopySpec filtered ->
+              filtered.include 'Dockerfile'
+              filtered.filter ReplaceTokens, tokens: 
dependencies.dockerImagesVersions
+            }
+            spec.into tmpDir
+          }
+        }
+      }
+      def buildImageTask = project.tasks.create( buildImageTaskName, 
DockerBuildImage, { DockerBuildImage task ->
+        task.description = "Build $dockerName Docker image"
+        task.inputDir = tmpDir
+        task.dockerFile = new File( tmpDir, 'Dockerfile' )
+          task.tag = "org.apache.polygene:${PublishNaming.publishedNameFor 
":testsupport:docker-$dockerName"}"
+      } as Action<DockerBuildImage> )
+      [ buildDockerfileTask, buildImageTask ].each { Task task ->
+        task.group = 'docker'
+        task.dependsOn TaskNames.CHECK_DOCKER_CONNECTIVITY
+        task.onlyIf { !project.rootProject.findProperty( 
CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY ) }
+        task.inputs.property 'dockerMachineName', dockerMachineName
+        task.inputs.property 'dockerHostEnv', dockerHost
+        task.inputs.property 'dockerCertPath', dockerCertPath
+      }
+      buildImageTask.dependsOn buildDockerfileTask
+      // Ensure that all Docker images are built alongside this project
+      // This is a bit of a stretch but works for now
+      classesTask.dependsOn buildImageTask
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
deleted file mode 100644
index d9dfa93..0000000
--- 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalDockerPlugin.groovy
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.polygene.gradle.structure.internals
-
-import com.bmuschko.gradle.docker.DockerExtension
-import com.bmuschko.gradle.docker.DockerRemoteApiPlugin
-import com.bmuschko.gradle.docker.tasks.DockerVersion
-import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
-import groovy.transform.CompileStatic
-import org.apache.polygene.gradle.BasePlugin
-import org.apache.polygene.gradle.code.CodePlugin
-import org.apache.polygene.gradle.code.PublishNaming
-import org.apache.polygene.gradle.dependencies.DependenciesDeclarationExtension
-import org.apache.polygene.gradle.dependencies.DependenciesPlugin
-import org.apache.tools.ant.filters.ReplaceTokens
-import org.gradle.api.Action
-import org.gradle.api.Plugin
-import org.gradle.api.Project
-import org.gradle.api.Task
-import org.gradle.api.file.CopySpec
-import org.gradle.api.logging.LogLevel
-
-@CompileStatic
-class InternalDockerPlugin implements Plugin<Project>
-{
-  static class TaskNames
-  {
-    static final String CHECK_DOCKER_CONNECTIVITY = 'checkDockerConnectivity'
-  }
-
-  private final String dockerMachineName = System.getenv( 
'DOCKER_MACHINE_NAME' )
-  private final String dockerHost = System.getenv( 'DOCKER_HOST' )
-  private final String dockerCertPath = System.getenv( 'DOCKER_CERT_PATH' )
-
-  @Override
-  void apply( Project project )
-  {
-    project.plugins.apply BasePlugin
-    project.plugins.apply DependenciesPlugin
-    applyDockerPlugin( project )
-    applyDockerSwitch( project )
-    applyDockerBuildImage( project )
-  }
-
-  private void applyDockerPlugin( Project project )
-  {
-    project.plugins.apply DockerRemoteApiPlugin
-    def dockerExtension = project.extensions.getByType DockerExtension
-    // TLS support
-    if( dockerCertPath )
-    {
-      dockerExtension.certPath = new File( dockerCertPath )
-    }
-  }
-
-  private void applyDockerSwitch( Project project )
-  {
-    project.tasks.create( TaskNames.CHECK_DOCKER_CONNECTIVITY, DockerVersion, 
{ DockerVersion task ->
-      task.onError = { ex ->
-        // Disable Docker for this build
-        project.rootProject.extensions.extraProperties.set( 
CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
-        if( project.hasProperty( 'skipDocker' ) )
-        {
-            project.logger.lifecycle 'skipDocker property is set, all Docker 
tasks will be SKIPPED'
-        }
-        else if( project.logger.isEnabled( LogLevel.INFO ) )
-        {
-          project.logger.info 'Unable to connect to Docker, all Docker tasks 
will be SKIPPED', ex
-        }
-        else
-        {
-          project.logger.lifecycle "Unable to connect to Docker, all Docker 
tasks will be SKIPPED\n  ${ ( ( Exception ) ex ).message }"
-        }
-      }
-      task.onComplete = {
-        if( project.hasProperty( 'skipDocker' ) )
-        {
-          // Disable Docker for this build
-          project.rootProject.extensions.extraProperties.set( 
CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY, true )
-          project.logger.lifecycle 'skipDocker property is set, all Docker 
tasks will be SKIPPED'
-        }
-      }
-    } as Action<DockerVersion> )
-  }
-
-  private void applyDockerBuildImage( Project project )
-  {
-    def classesTask = project.tasks.getByName 'classes'
-    def dockers = project.file( 'src/main/docker' )
-    def dependencies = project.rootProject.extensions.getByType( 
DependenciesDeclarationExtension )
-    dockers.eachDir { File dockerDir ->
-      def dockerName = dockerDir.name
-      def buildDockerfileTaskName = "build${ dockerName.capitalize() 
}Dockerfile"
-      def buildImageTaskName = "build${ dockerName.capitalize() }DockerImage"
-      def tmpDir = project.file "${ project.buildDir }/tmp/docker/${ 
dockerName }"
-      tmpDir.mkdirs()
-      def buildDockerfileTask = project.tasks.create( buildDockerfileTaskName 
) { Task task ->
-        task.description = "Build $dockerName Dockerfile"
-        task.inputs.property 'dockerImagesVersions', 
dependencies.dockerImagesVersions
-        task.inputs.dir dockerDir
-        task.outputs.dir tmpDir
-        // Filter Dockerfile for image versions from dependencies declaration
-        task.doFirst {
-          project.copy { CopySpec spec ->
-            spec.from( dockerDir ) { CopySpec unfiltered ->
-              unfiltered.exclude 'Dockerfile'
-            }
-            spec.from( dockerDir ) { CopySpec filtered ->
-              filtered.include 'Dockerfile'
-              filtered.filter ReplaceTokens, tokens: 
dependencies.dockerImagesVersions
-            }
-            spec.into tmpDir
-          }
-        }
-      }
-      def buildImageTask = project.tasks.create( buildImageTaskName, 
DockerBuildImage, { DockerBuildImage task ->
-        task.description = "Build $dockerName Docker image"
-        task.inputDir = tmpDir
-        task.dockerFile = new File( tmpDir, 'Dockerfile' )
-        task.tag = "org.apache.polygene:${ PublishNaming.publishedNameFor 
":internals:docker-$dockerName" }"
-      } as Action<DockerBuildImage> )
-      [ buildDockerfileTask, buildImageTask ].each { Task task ->
-        task.group = 'docker'
-        task.dependsOn TaskNames.CHECK_DOCKER_CONNECTIVITY
-        task.onlyIf { !project.rootProject.findProperty( 
CodePlugin.DOCKER_DISABLED_EXTRA_PROPERTY ) }
-        task.inputs.property 'dockerMachineName', dockerMachineName
-        task.inputs.property 'dockerHostEnv', dockerHost
-        task.inputs.property 'dockerCertPath', dockerCertPath
-      }
-      buildImageTask.dependsOn buildDockerfileTask
-      // Ensure that all Docker images are built alongside this project
-      // This is a bit of a stretch but works for now
-      classesTask.dependsOn buildImageTask
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalPlugin.groovy
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalPlugin.groovy
 
b/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalPlugin.groovy
deleted file mode 100644
index baa8842..0000000
--- 
a/buildSrc/src/main/groovy/org/apache/polygene/gradle/structure/internals/InternalPlugin.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.polygene.gradle.structure.internals
-
-import groovy.transform.CompileStatic
-import org.apache.polygene.gradle.code.CodePlugin
-import org.gradle.api.Plugin
-import org.gradle.api.Project
-
-@CompileStatic
-class InternalPlugin implements Plugin<Project>
-{
-  @Override
-  void apply( Project project )
-  {
-    project.plugins.apply CodePlugin
-  }
-}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-docker.properties
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-docker.properties
 
b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-docker.properties
new file mode 100644
index 0000000..dfe3d41
--- /dev/null
+++ 
b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-docker.properties
@@ -0,0 +1,18 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+implementation-class=org.apache.polygene.gradle.structure.docker.DockerPlugin

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal-docker.properties
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal-docker.properties
 
b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal-docker.properties
deleted file mode 100644
index 60290a5..0000000
--- 
a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal-docker.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-#  Licensed to the Apache Software Foundation (ASF) under one
-#  or more contributor license agreements.  See the NOTICE file
-#  distributed with this work for additional information
-#  regarding copyright ownership.  The ASF licenses this file
-#  to you under the Apache License, Version 2.0 (the
-#  "License"); you may not use this file except in compliance
-#  with the License.  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-implementation-class=org.apache.polygene.gradle.structure.internals.InternalDockerPlugin

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal.properties
----------------------------------------------------------------------
diff --git 
a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal.properties
 
b/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal.properties
deleted file mode 100644
index 2749ce9..0000000
--- 
a/buildSrc/src/main/resources/META-INF/gradle-plugins/polygene-internal.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-#  Licensed to the Apache Software Foundation (ASF) under one
-#  or more contributor license agreements.  See the NOTICE file
-#  distributed with this work for additional information
-#  regarding copyright ownership.  The ASF licenses this file
-#  to you under the Apache License, Version 2.0 (the
-#  "License"); you may not use this file except in compliance
-#  with the License.  You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-#
-implementation-class=org.apache.polygene.gradle.structure.internals.InternalPlugin

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredApplicationAssembler.java
----------------------------------------------------------------------
diff --git 
a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredApplicationAssembler.java
 
b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredApplicationAssembler.java
index d5edba0..a4e795f 100644
--- 
a/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredApplicationAssembler.java
+++ 
b/core/bootstrap/src/main/java/org/apache/polygene/bootstrap/layered/LayeredApplicationAssembler.java
@@ -134,11 +134,16 @@ public abstract class LayeredApplicationAssembler
         throws AssemblyException
     {
         assembly = applicationFactory.newApplicationAssembly();
+        assembleApplication();
+        return assembly;
+    }
+
+    protected void assembleApplication()
+    {
         assembly.setName( name );
         assembly.setVersion( version );
         assembly.setMode( mode );
         assembleLayers( assembly );
-        return assembly;
     }
 
     protected LayerAssembly createLayer( Class<? extends LayerAssembler> 
layerAssemblerClass )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/build.gradle
----------------------------------------------------------------------
diff --git a/core/testsupport/build.gradle b/core/testsupport/build.gradle
index adfa425..0a04b66 100644
--- a/core/testsupport/build.gradle
+++ b/core/testsupport/build.gradle
@@ -19,6 +19,7 @@
  */
 
 apply plugin: 'polygene-core'
+apply plugin: 'polygene-docker'
 
 jar { manifest { name = "Apache Polygene™ Core Test Support" } }
 
@@ -27,5 +28,7 @@ dependencies {
   api libraries.junit
   api libraries.hamcrest
 
+  implementation libraries.docker_junit
+
   testRuntimeOnly polygene.core.runtime
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
 
b/core/testsupport/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
new file mode 100644
index 0000000..36de1ea
--- /dev/null
+++ 
b/core/testsupport/src/main/java/org/apache/polygene/test/docker/DelayChecker.java
@@ -0,0 +1,60 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.polygene.test.docker;
+
+import pl.domzal.junit.docker.rule.wait.StartCondition;
+import pl.domzal.junit.docker.rule.wait.StartConditionCheck;
+
+class DelayChecker
+    implements StartCondition
+{
+
+    private final long millis;
+    private final long doneAt;
+
+    DelayChecker( long millis )
+    {
+        this.millis = millis;
+        this.doneAt = System.currentTimeMillis() + millis;
+    }
+
+    @Override
+    public StartConditionCheck build( pl.domzal.junit.docker.rule.DockerRule 
currentRule )
+    {
+        return new StartConditionCheck()
+        {
+
+            @Override
+            public boolean check()
+            {
+                return System.currentTimeMillis() > doneAt;
+            }
+
+            @Override
+            public String describe()
+            {
+                return String.format( "delay check %d ms", millis );
+            }
+
+            @Override
+            public void after()
+            {
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/java/org/apache/polygene/test/docker/DockerRule.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/apache/polygene/test/docker/DockerRule.java
 
b/core/testsupport/src/main/java/org/apache/polygene/test/docker/DockerRule.java
new file mode 100644
index 0000000..18fab0f
--- /dev/null
+++ 
b/core/testsupport/src/main/java/org/apache/polygene/test/docker/DockerRule.java
@@ -0,0 +1,156 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.polygene.test.docker;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+import pl.domzal.junit.docker.rule.DockerRuleBuilder;
+import pl.domzal.junit.docker.rule.WaitFor;
+import pl.domzal.junit.docker.rule.wait.LineListener;
+import pl.domzal.junit.docker.rule.wait.StartCondition;
+import pl.domzal.junit.docker.rule.wait.StartConditionCheck;
+
+import static java.util.stream.Collectors.joining;
+import static org.junit.Assume.assumeFalse;
+
+public class DockerRule
+    implements TestRule
+{
+    private final boolean dockerDisabled = Boolean.valueOf( 
System.getProperty( "DOCKER_DISABLED", "false" ) );
+    private final pl.domzal.junit.docker.rule.DockerRule dockerRule;
+
+    public DockerRule( String image, int... portsToWaitFor )
+    {
+        this( image, null, WaitFor.tcpPort( portsToWaitFor ) );
+    }
+
+    public DockerRule( String image, String... logMessageSequenceToWaitFor )
+    {
+        this( image, null, WaitFor.logMessageSequence( 
logMessageSequenceToWaitFor ) );
+    }
+
+    public DockerRule( String image, Map<String, String> environment, 
String... logMessageSequnceToWaitFor )
+    {
+        this( image, environment, WaitFor.logMessageSequence( 
logMessageSequnceToWaitFor ) );
+    }
+
+    public DockerRule( String image, Long delay, int... portsToWaitFor )
+    {
+        this( image, null, new DelayChecker( delay ), WaitFor.tcpPort( 
portsToWaitFor ), new DelayChecker( delay ) );
+    }
+
+    public DockerRule( String image, Long delay, String... 
logMessageSequenceToWaitFor )
+    {
+        this( image, null, WaitFor.logMessageSequence( 
logMessageSequenceToWaitFor ), new DelayChecker( delay ) );
+    }
+
+    public DockerRule( String image, Map<String, String> environment, Long 
delay, String... logMessageSequnceToWaitFor )
+    {
+        this( image, environment, WaitFor.logMessageSequence( 
logMessageSequnceToWaitFor ), new DelayChecker( delay ) );
+    }
+
+    public DockerRule( String image, Map<String, String> environment, 
StartCondition... waitFor )
+    {
+        if( environment == null )
+        {
+            environment = Collections.emptyMap();
+        }
+        if( dockerDisabled )
+        {
+            dockerRule = null;
+        }
+        else
+        {
+            DockerRuleBuilder builder = pl.domzal.junit.docker.rule.DockerRule
+                .builder()
+                .imageName( 
"org.apache.polygene:org.apache.polygene.internal.docker-" + image )
+                .publishAllPorts( true )
+                .waitForTimeout( 120 )
+                .waitFor( rule -> new AndChecker( rule, waitFor ) );
+            environment.forEach( builder::env );
+            dockerRule = builder.build();
+        }
+    }
+
+    @Override
+    public Statement apply( Statement base, Description description )
+    {
+        assumeFalse( dockerDisabled );
+        return dockerRule.apply( base, description );
+    }
+
+    public String getDockerHost()
+    {
+        return dockerRule.getDockerHost();
+    }
+
+    public int getExposedContainerPort( String containerPort )
+    {
+        return Integer.valueOf( dockerRule.getExposedContainerPort( 
containerPort ) );
+    }
+
+    public class AndChecker
+        implements StartConditionCheck, LineListener
+    {
+        private List<StartConditionCheck> allOf;
+
+        public AndChecker( pl.domzal.junit.docker.rule.DockerRule rule, 
StartCondition... allOf )
+        {
+            this.allOf = Arrays.stream( allOf ).map( cond -> cond.build( rule 
) ).collect( Collectors.toList() );
+        }
+
+        @Override
+        public boolean check()
+        {
+            return allOf.stream()
+                        .allMatch( StartConditionCheck::check );
+        }
+
+        @Override
+        public String describe()
+        {
+            return allOf.stream()
+                        .map( StartConditionCheck::describe )
+                        .collect( joining( ",", "and(", ")" ) );
+        }
+
+        @Override
+        public void after()
+        {
+            allOf.forEach( StartConditionCheck::after );
+        }
+
+        @Override
+        public void nextLine( String line )
+        {
+            allOf.forEach( listener ->
+                           {
+                               if( listener instanceof LineListener )
+                               {
+                                   ( (LineListener) listener ).nextLine( line 
);
+                               }
+                           } );
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/resources/docker/cassandra/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/cassandra/Dockerfile 
b/core/testsupport/src/main/resources/docker/cassandra/Dockerfile
new file mode 100644
index 0000000..11d22b4
--- /dev/null
+++ b/core/testsupport/src/main/resources/docker/cassandra/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @cassandra@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/resources/docker/memcached/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/memcached/Dockerfile 
b/core/testsupport/src/main/resources/docker/memcached/Dockerfile
new file mode 100644
index 0000000..0b1a4b2
--- /dev/null
+++ b/core/testsupport/src/main/resources/docker/memcached/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @memcached@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/resources/docker/mysql/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/mysql/Dockerfile 
b/core/testsupport/src/main/resources/docker/mysql/Dockerfile
new file mode 100644
index 0000000..967d45d
--- /dev/null
+++ b/core/testsupport/src/main/resources/docker/mysql/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @mariadb@
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/resources/docker/postgres/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/postgres/Dockerfile 
b/core/testsupport/src/main/resources/docker/postgres/Dockerfile
new file mode 100644
index 0000000..d3dad53
--- /dev/null
+++ b/core/testsupport/src/main/resources/docker/postgres/Dockerfile
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @postgres@
+COPY init-test-db.sh /docker-entrypoint-initdb.d/init-test-db.sh

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/resources/docker/postgres/init-test-db.sh
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/resources/docker/postgres/init-test-db.sh 
b/core/testsupport/src/main/resources/docker/postgres/init-test-db.sh
new file mode 100755
index 0000000..347d78d
--- /dev/null
+++ b/core/testsupport/src/main/resources/docker/postgres/init-test-db.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -e
+
+# Create test user and database
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
+    CREATE USER jdbc_test_login;
+    CREATE DATABASE jdbc_test_db;
+    GRANT ALL PRIVILEGES ON DATABASE jdbc_test_db TO jdbc_test_login;
+EOSQL
+
+# Enable ltree extension on test database
+psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -d jdbc_test_db <<-EOSQL
+    CREATE EXTENSION ltree;
+EOSQL

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/resources/docker/redis/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/redis/Dockerfile 
b/core/testsupport/src/main/resources/docker/redis/Dockerfile
new file mode 100644
index 0000000..d0e67fc
--- /dev/null
+++ b/core/testsupport/src/main/resources/docker/redis/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @redis@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/resources/docker/riak/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/riak/Dockerfile 
b/core/testsupport/src/main/resources/docker/riak/Dockerfile
new file mode 100644
index 0000000..776d7af
--- /dev/null
+++ b/core/testsupport/src/main/resources/docker/riak/Dockerfile
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @riak@

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/core/testsupport/src/main/resources/docker/s3server/Dockerfile
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/resources/docker/s3server/Dockerfile 
b/core/testsupport/src/main/resources/docker/s3server/Dockerfile
new file mode 100644
index 0000000..a4bff87
--- /dev/null
+++ b/core/testsupport/src/main/resources/docker/s3server/Dockerfile
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+FROM @s3server@
+
+# See https://github.com/scality/S3/blob/master/DOCKER.md
+ENV SCALITY_ACCESS_KEY_ID dummyIdentifier
+ENV SCALITY_SECRET_ACCESS_KEY dummyCredential

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/cache-memcache/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/cache-memcache/build.gradle 
b/extensions/cache-memcache/build.gradle
index 8aa67a7..97742bb 100644
--- a/extensions/cache-memcache/build.gradle
+++ b/extensions/cache-memcache/build.gradle
@@ -31,7 +31,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.internals.testsupport
+  testImplementation polygene.core.testsupport
 
   testRuntimeOnly libraries.logback
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/cache-memcache/src/test/java/org/apache/polygene/cache/memcache/MemcacheCachePoolTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/cache-memcache/src/test/java/org/apache/polygene/cache/memcache/MemcacheCachePoolTest.java
 
b/extensions/cache-memcache/src/test/java/org/apache/polygene/cache/memcache/MemcacheCachePoolTest.java
index 7843eb3..0b5b575 100644
--- 
a/extensions/cache-memcache/src/test/java/org/apache/polygene/cache/memcache/MemcacheCachePoolTest.java
+++ 
b/extensions/cache-memcache/src/test/java/org/apache/polygene/cache/memcache/MemcacheCachePoolTest.java
@@ -23,9 +23,9 @@ import org.apache.polygene.api.common.Visibility;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.cache.memcache.assembly.MemcacheAssembler;
-import org.apache.polygene.test.internal.DockerRule;
 import org.apache.polygene.test.EntityTestAssembler;
 import org.apache.polygene.test.cache.AbstractCachePoolTest;
+import org.apache.polygene.test.docker.DockerRule;
 import org.junit.ClassRule;
 
 /**

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-cassandra/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-cassandra/build.gradle 
b/extensions/entitystore-cassandra/build.gradle
index 343b9f9..06dbc40 100644
--- a/extensions/entitystore-cassandra/build.gradle
+++ b/extensions/entitystore-cassandra/build.gradle
@@ -34,7 +34,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.internals.testsupport
+  testImplementation polygene.core.testsupport
 
   testRuntimeOnly libraries.logback
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-cassandra/src/test/java/org/apache/polygene/entitystore/cassandra/CassandraEntityStoreTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-cassandra/src/test/java/org/apache/polygene/entitystore/cassandra/CassandraEntityStoreTest.java
 
b/extensions/entitystore-cassandra/src/test/java/org/apache/polygene/entitystore/cassandra/CassandraEntityStoreTest.java
index ca5b946..3431081 100644
--- 
a/extensions/entitystore-cassandra/src/test/java/org/apache/polygene/entitystore/cassandra/CassandraEntityStoreTest.java
+++ 
b/extensions/entitystore-cassandra/src/test/java/org/apache/polygene/entitystore/cassandra/CassandraEntityStoreTest.java
@@ -24,9 +24,9 @@ import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import 
org.apache.polygene.entitystore.cassandra.assembly.CassandraEntityStoreAssembler;
 import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.entity.AbstractEntityStoreTest;
 import org.apache.polygene.test.entity.CanRemoveAll;
-import org.apache.polygene.test.internal.DockerRule;
 import org.junit.ClassRule;
 
 /**

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-jclouds/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-jclouds/build.gradle 
b/extensions/entitystore-jclouds/build.gradle
index 8db7d5c..35120b2 100644
--- a/extensions/entitystore-jclouds/build.gradle
+++ b/extensions/entitystore-jclouds/build.gradle
@@ -36,7 +36,7 @@ dependencies {
   runtimeOnly polygene.core.runtime
   runtimeOnly libraries.jaxb_api
 
-  testImplementation polygene.internals.testsupport
+  testImplementation polygene.core.testsupport
   testImplementation libraries.jclouds_filesystem
 
   testRuntimeOnly libraries.logback

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-jclouds/src/test/java/org/apache/polygene/entitystore/jclouds/JCloudsS3Test.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-jclouds/src/test/java/org/apache/polygene/entitystore/jclouds/JCloudsS3Test.java
 
b/extensions/entitystore-jclouds/src/test/java/org/apache/polygene/entitystore/jclouds/JCloudsS3Test.java
index 720b072..ac64f7f 100644
--- 
a/extensions/entitystore-jclouds/src/test/java/org/apache/polygene/entitystore/jclouds/JCloudsS3Test.java
+++ 
b/extensions/entitystore-jclouds/src/test/java/org/apache/polygene/entitystore/jclouds/JCloudsS3Test.java
@@ -23,8 +23,8 @@ import org.apache.polygene.api.common.Visibility;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import 
org.apache.polygene.entitystore.jclouds.assembly.JCloudsEntityStoreAssembler;
 import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.entity.AbstractEntityStoreTest;
-import org.apache.polygene.test.internal.DockerRule;
 import org.junit.ClassRule;
 
 public class JCloudsS3Test extends AbstractEntityStoreTest
@@ -39,8 +39,9 @@ public class JCloudsS3Test extends AbstractEntityStoreTest
         ModuleAssembly config = module.layer().module( "config" );
         new EntityTestAssembler().assemble( config );
         new JCloudsEntityStoreAssembler().withConfig( config, Visibility.layer 
).assemble( module );
-        JCloudsMapEntityStoreConfiguration defaults = config.forMixin( 
JCloudsMapEntityStoreConfiguration.class )
-                                                            .declareDefaults();
+        JCloudsMapEntityStoreConfiguration defaults =
+            config.forMixin( JCloudsMapEntityStoreConfiguration.class 
).declareDefaults();
+
         String host = DOCKER.getDockerHost();
         int port = DOCKER.getExposedContainerPort( "8000/tcp" );
         defaults.provider().set( "s3" );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoDBEntityStoreConfiguration.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoDBEntityStoreConfiguration.java
 
b/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoDBEntityStoreConfiguration.java
new file mode 100644
index 0000000..2e8146e
--- /dev/null
+++ 
b/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoDBEntityStoreConfiguration.java
@@ -0,0 +1,92 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *
+ */
+package org.apache.polygene.entitystore.mongodb;
+
+import java.util.List;
+import org.apache.polygene.api.common.Optional;
+import org.apache.polygene.api.common.UseDefaults;
+import org.apache.polygene.api.property.Property;
+
+// START SNIPPET: config
+public interface MongoDBEntityStoreConfiguration
+{
+
+    @Optional
+    Property<String> hostname();
+
+    @Optional
+    Property<Integer> port();
+
+    @UseDefaults
+    Property<List<String>> nodes();
+
+    @UseDefaults
+    Property<String> username();
+
+    @UseDefaults
+    Property<String> password();
+
+    @Optional
+    Property<String> database();
+
+    @Optional
+    Property<String> collection();
+
+    @UseDefaults
+    Property<WriteConcern> writeConcern();
+
+    enum WriteConcern
+    {
+        /**
+         *  Write operations that use this write concern will wait for 
acknowledgement,
+         *  using the default write concern configured on the server.
+         *  This is the default value.
+         */
+        ACKNOWLEDGED,
+        /**
+         * Write operations that use this write concern will wait for 
acknowledgement from a single member.
+         */
+        W1,
+        /**
+         * Write operations that use this write concern will wait for 
acknowledgement from two members.
+         */
+        W2,
+        /**
+         * Write operations that use this write concern will wait for 
acknowledgement from three members.
+         */
+        W3,
+        /**
+         * Write operations that use this write concern will return as soon as 
the message is written to the socket.
+         * Exceptions are raised for network issues, but not server errors.
+         */
+        UNACKNOWLEDGED,
+        /**
+         * Write operations wait for the server to group commit to the journal 
file on disk.
+         */
+        JOURNALED,
+        /**
+         * Exceptions are raised for network issues, and server errors;
+         * waits on a majority of servers for the write operation.
+         */
+        MAJORITY
+
+    }
+}
+// END SNIPPET: config
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoEntityStoreConfiguration.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoEntityStoreConfiguration.java
 
b/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoEntityStoreConfiguration.java
deleted file mode 100644
index 75c95ac..0000000
--- 
a/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoEntityStoreConfiguration.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *       http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- *
- */
-package org.apache.polygene.entitystore.mongodb;
-
-import java.util.List;
-import org.apache.polygene.api.common.Optional;
-import org.apache.polygene.api.common.UseDefaults;
-import org.apache.polygene.api.property.Property;
-
-// START SNIPPET: config
-public interface MongoEntityStoreConfiguration
-{
-
-    @Optional
-    Property<String> hostname();
-
-    @Optional
-    Property<Integer> port();
-
-    @UseDefaults
-    Property<List<String>> nodes();
-
-    @UseDefaults
-    Property<String> username();
-
-    @UseDefaults
-    Property<String> password();
-
-    @Optional
-    Property<String> database();
-
-    @Optional
-    Property<String> collection();
-
-    @UseDefaults
-    Property<WriteConcern> writeConcern();
-
-    enum WriteConcern
-    {
-        /**
-         *  Write operations that use this write concern will wait for 
acknowledgement,
-         *  using the default write concern configured on the server.
-         *  This is the default value.
-         */
-        ACKNOWLEDGED,
-        /**
-         * Write operations that use this write concern will wait for 
acknowledgement from a single member.
-         */
-        W1,
-        /**
-         * Write operations that use this write concern will wait for 
acknowledgement from two members.
-         */
-        W2,
-        /**
-         * Write operations that use this write concern will wait for 
acknowledgement from three members.
-         */
-        W3,
-        /**
-         * Write operations that use this write concern will return as soon as 
the message is written to the socket.
-         * Exceptions are raised for network issues, but not server errors.
-         */
-        UNACKNOWLEDGED,
-        /**
-         * Write operations wait for the server to group commit to the journal 
file on disk.
-         */
-        JOURNALED,
-        /**
-         * Exceptions are raised for network issues, and server errors;
-         * waits on a majority of servers for the write operation.
-         */
-        MAJORITY
-
-    }
-}
-// END SNIPPET: config
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreMixin.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreMixin.java
 
b/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreMixin.java
index 3766b82..e4433c1 100644
--- 
a/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreMixin.java
+++ 
b/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreMixin.java
@@ -66,7 +66,7 @@ public class MongoMapEntityStoreMixin
     public static final String IDENTITY_COLUMN = "_id";
     public static final String STATE_COLUMN = "state";
     @This
-    private Configuration<MongoEntityStoreConfiguration> configuration;
+    private Configuration<MongoDBEntityStoreConfiguration> configuration;
     private List<ServerAddress> serverAddresses;
     private String databaseName;
     private String collectionName;
@@ -107,7 +107,7 @@ public class MongoMapEntityStoreMixin
         throws UnknownHostException
     {
         configuration.refresh();
-        MongoEntityStoreConfiguration config = configuration.get();
+        MongoDBEntityStoreConfiguration config = configuration.get();
 
         // Combine hostname, port and nodes configuration properties
         // If no configuration, use 127.0.0.1:27017

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/assembly/MongoDBEntityStoreAssembler.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/assembly/MongoDBEntityStoreAssembler.java
 
b/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/assembly/MongoDBEntityStoreAssembler.java
index a270305..acc5360 100644
--- 
a/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/assembly/MongoDBEntityStoreAssembler.java
+++ 
b/extensions/entitystore-mongodb/src/main/java/org/apache/polygene/entitystore/mongodb/assembly/MongoDBEntityStoreAssembler.java
@@ -23,7 +23,7 @@ import org.apache.polygene.bootstrap.Assemblers;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.bootstrap.ServiceDeclaration;
-import org.apache.polygene.entitystore.mongodb.MongoEntityStoreConfiguration;
+import org.apache.polygene.entitystore.mongodb.MongoDBEntityStoreConfiguration;
 import org.apache.polygene.entitystore.mongodb.MongoMapEntityStoreService;
 
 public class MongoDBEntityStoreAssembler
@@ -40,7 +40,7 @@ public class MongoDBEntityStoreAssembler
         }
         if( hasConfig() )
         {
-            configModule().entities( MongoEntityStoreConfiguration.class 
).visibleIn( configVisibility() );
+            configModule().entities( MongoDBEntityStoreConfiguration.class 
).visibleIn( configVisibility() );
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
 
b/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
index 5a65389..b8e8842 100644
--- 
a/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
+++ 
b/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/EmbedMongoMapEntityStoreTest.java
@@ -78,9 +78,9 @@ public class EmbedMongoMapEntityStoreTest extends 
AbstractEntityStoreTest
 
         new MongoDBEntityStoreAssembler().withConfig( config, Visibility.layer 
).assemble( module );
 
-        MongoEntityStoreConfiguration mongoConfig = config.forMixin( 
MongoEntityStoreConfiguration.class )
-                                                          .declareDefaults();
-        mongoConfig.writeConcern().set( 
MongoEntityStoreConfiguration.WriteConcern.MAJORITY );
+        MongoDBEntityStoreConfiguration mongoConfig = config.forMixin( 
MongoDBEntityStoreConfiguration.class )
+                                                            .declareDefaults();
+        mongoConfig.writeConcern().set( 
MongoDBEntityStoreConfiguration.WriteConcern.MAJORITY );
         mongoConfig.database().set( "polygene-test" );
         mongoConfig.collection().set( testName.getMethodName() );
         mongoConfig.nodes().set( Collections.singletonList( "localhost:" + 
port ) );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreTest.java
 
b/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreTest.java
index 9c48fe5..2a902ef 100644
--- 
a/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreTest.java
+++ 
b/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreTest.java
@@ -37,7 +37,7 @@ import static 
org.apache.polygene.test.util.Assume.assumeConnectivity;
 public class MongoMapEntityStoreTest extends AbstractEntityStoreTest
 {
     @BeforeClass
-    public static void beforeRedisMapEntityStoreTests()
+    public static void beforeMongoMapEntityStoreTests()
     {
         assumeConnectivity( "localhost", 27017 );
     }
@@ -57,8 +57,8 @@ public class MongoMapEntityStoreTest extends 
AbstractEntityStoreTest
         new MongoDBEntityStoreAssembler().withConfig( config, Visibility.layer 
).assemble( module );
         // END SNIPPET: assembly
 
-        MongoEntityStoreConfiguration mongoConfig = config.forMixin( 
MongoEntityStoreConfiguration.class ).declareDefaults();
-        mongoConfig.writeConcern().set( 
MongoEntityStoreConfiguration.WriteConcern.MAJORITY );
+        MongoDBEntityStoreConfiguration mongoConfig = config.forMixin( 
MongoDBEntityStoreConfiguration.class ).declareDefaults();
+        mongoConfig.writeConcern().set( 
MongoDBEntityStoreConfiguration.WriteConcern.MAJORITY );
         mongoConfig.database().set( "polygene:test" );
         mongoConfig.collection().set( "polygene:test:entities" );
         // START SNIPPET: assembly

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
 
b/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
index cad95ea..fcd02f0 100644
--- 
a/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
+++ 
b/extensions/entitystore-mongodb/src/test/java/org/apache/polygene/entitystore/mongodb/MongoMapEntityStoreWithCacheTest.java
@@ -54,8 +54,8 @@ public class MongoMapEntityStoreWithCacheTest
 
         new MongoDBEntityStoreAssembler().withConfig( config, Visibility.layer 
).assemble( module );
 
-        MongoEntityStoreConfiguration mongoConfig = config.forMixin( 
MongoEntityStoreConfiguration.class ).declareDefaults();
-        mongoConfig.writeConcern().set( 
MongoEntityStoreConfiguration.WriteConcern.MAJORITY );
+        MongoDBEntityStoreConfiguration mongoConfig = config.forMixin( 
MongoDBEntityStoreConfiguration.class ).declareDefaults();
+        mongoConfig.writeConcern().set( 
MongoDBEntityStoreConfiguration.WriteConcern.MAJORITY );
         mongoConfig.database().set( "polygene:test" );
         mongoConfig.collection().set( "polygene:test:entities" );
     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-redis/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-redis/build.gradle 
b/extensions/entitystore-redis/build.gradle
index da29e7d..6526ede 100644
--- a/extensions/entitystore-redis/build.gradle
+++ b/extensions/entitystore-redis/build.gradle
@@ -32,7 +32,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.internals.testsupport
+  testImplementation polygene.core.testsupport
 
   testRuntimeOnly libraries.logback
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreTest.java
 
b/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreTest.java
index e654afc..345e73a 100644
--- 
a/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreTest.java
+++ 
b/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreTest.java
@@ -24,8 +24,8 @@ import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import 
org.apache.polygene.entitystore.redis.assembly.RedisEntityStoreAssembler;
 import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.entity.AbstractEntityStoreTest;
-import org.apache.polygene.test.internal.DockerRule;
 import org.junit.ClassRule;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisPool;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreWithCacheTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreWithCacheTest.java
 
b/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreWithCacheTest.java
index 1dba76a..c34ff9f 100644
--- 
a/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreWithCacheTest.java
+++ 
b/extensions/entitystore-redis/src/test/java/org/apache/polygene/entitystore/redis/RedisMapEntityStoreWithCacheTest.java
@@ -25,7 +25,7 @@ import org.apache.polygene.bootstrap.ModuleAssembly;
 import 
org.apache.polygene.entitystore.redis.assembly.RedisEntityStoreAssembler;
 import org.apache.polygene.test.EntityTestAssembler;
 import org.apache.polygene.test.cache.AbstractEntityStoreWithCacheTest;
-import org.apache.polygene.test.internal.DockerRule;
+import org.apache.polygene.test.docker.DockerRule;
 import org.junit.ClassRule;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisPool;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-riak/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-riak/build.gradle 
b/extensions/entitystore-riak/build.gradle
index 98200ac..287c4da 100644
--- a/extensions/entitystore-riak/build.gradle
+++ b/extensions/entitystore-riak/build.gradle
@@ -33,7 +33,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.internals.testsupport
+  testImplementation polygene.core.testsupport
   testImplementation libraries.awaitility
 
   testRuntimeOnly libraries.logback

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreTest.java
 
b/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreTest.java
index c43d846..d359adc 100644
--- 
a/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreTest.java
+++ 
b/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreTest.java
@@ -22,8 +22,8 @@ import org.apache.polygene.api.common.Visibility;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.entitystore.riak.assembly.RiakEntityStoreAssembler;
 import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.entity.AbstractEntityStoreTest;
-import org.apache.polygene.test.internal.DockerRule;
 import org.junit.ClassRule;
 
 public class RiakMapEntityStoreTest extends AbstractEntityStoreTest

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreWithCacheTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreWithCacheTest.java
 
b/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreWithCacheTest.java
index ac4f3ec..87476e3 100644
--- 
a/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreWithCacheTest.java
+++ 
b/extensions/entitystore-riak/src/test/java/org/apache/polygene/entitystore/riak/RiakMapEntityStoreWithCacheTest.java
@@ -26,7 +26,7 @@ import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.entitystore.riak.assembly.RiakEntityStoreAssembler;
 import org.apache.polygene.test.EntityTestAssembler;
 import org.apache.polygene.test.cache.AbstractEntityStoreWithCacheTest;
-import org.apache.polygene.test.internal.DockerRule;
+import org.apache.polygene.test.docker.DockerRule;
 import org.junit.ClassRule;
 
 public class RiakMapEntityStoreWithCacheTest extends 
AbstractEntityStoreWithCacheTest

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-sql/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/entitystore-sql/build.gradle 
b/extensions/entitystore-sql/build.gradle
index 223e85b..694c478 100644
--- a/extensions/entitystore-sql/build.gradle
+++ b/extensions/entitystore-sql/build.gradle
@@ -33,7 +33,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.internals.testsupport
+  testImplementation polygene.core.testsupport
   testImplementation polygene.library( 'sql-dbcp' )
   testImplementation libraries.docker_junit
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java
 
b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java
index c82bd61..ae1dbe3 100644
--- 
a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java
+++ 
b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/MySQLEntityStoreTest.java
@@ -33,8 +33,8 @@ import 
org.apache.polygene.library.sql.assembly.DataSourceAssembler;
 import org.apache.polygene.library.sql.datasource.DataSourceConfiguration;
 import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler;
 import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.entity.AbstractEntityStoreTest;
-import org.apache.polygene.test.internal.DockerRule;
 import org.junit.ClassRule;
 
 import static 
org.apache.polygene.entitystore.sql.assembly.MySQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java
 
b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java
index 1da7b58..4bd7ab9 100644
--- 
a/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java
+++ 
b/extensions/entitystore-sql/src/test/java/org/apache/polygene/entitystore/sql/PostgreSQLEntityStoreTest.java
@@ -33,8 +33,8 @@ import 
org.apache.polygene.library.sql.common.SQLConfiguration;
 import org.apache.polygene.library.sql.datasource.DataSourceConfiguration;
 import org.apache.polygene.library.sql.dbcp.DBCPDataSourceServiceAssembler;
 import org.apache.polygene.test.EntityTestAssembler;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.entity.AbstractEntityStoreTest;
-import org.apache.polygene.test.internal.DockerRule;
 import org.junit.ClassRule;
 
 import static 
org.apache.polygene.entitystore.sql.assembly.PostgreSQLEntityStoreAssembler.DEFAULT_ENTITYSTORE_IDENTITY;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/indexing-sql/build.gradle
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/build.gradle 
b/extensions/indexing-sql/build.gradle
index 5d6f71e..faac8e8 100644
--- a/extensions/indexing-sql/build.gradle
+++ b/extensions/indexing-sql/build.gradle
@@ -33,7 +33,7 @@ dependencies {
 
   runtimeOnly polygene.core.runtime
 
-  testImplementation polygene.internals.testsupport
+  testImplementation polygene.core.testsupport
   testImplementation polygene.library( 'sql-dbcp' )
 
   testRuntimeOnly libraries.logback

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLComplexQueryTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLComplexQueryTest.java
 
b/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLComplexQueryTest.java
index da9e217..d9ad732 100644
--- 
a/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLComplexQueryTest.java
+++ 
b/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLComplexQueryTest.java
@@ -21,7 +21,7 @@ package org.apache.polygene.index.sql.postgresql;
 
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.internal.DockerRule;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.indexing.AbstractComplexQueryTest;
 import org.junit.ClassRule;
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLDBIntegrityTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLDBIntegrityTest.java
 
b/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLDBIntegrityTest.java
index 58869a6..887d2d1 100644
--- 
a/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLDBIntegrityTest.java
+++ 
b/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLDBIntegrityTest.java
@@ -36,7 +36,7 @@ import org.apache.polygene.library.sql.common.SQLUtil;
 import org.apache.polygene.library.sql.generator.vendor.PostgreSQLVendor;
 import org.apache.polygene.library.sql.generator.vendor.SQLVendorProvider;
 import org.apache.polygene.test.AbstractPolygeneTest;
-import org.apache.polygene.test.internal.DockerRule;
+import org.apache.polygene.test.docker.DockerRule;
 import org.junit.Assert;
 import org.junit.ClassRule;
 import org.junit.Test;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLEntityFinderTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLEntityFinderTest.java
 
b/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLEntityFinderTest.java
index e909827..ca96386 100644
--- 
a/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLEntityFinderTest.java
+++ 
b/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLEntityFinderTest.java
@@ -21,8 +21,8 @@ package org.apache.polygene.index.sql.postgresql;
 
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.indexing.AbstractEntityFinderTest;
-import org.apache.polygene.test.internal.DockerRule;
 import org.junit.ClassRule;
 
 public class PostgreSQLEntityFinderTest

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/0645fa49/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLQueryTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLQueryTest.java
 
b/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLQueryTest.java
index 2d4dde5..d919be4 100644
--- 
a/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLQueryTest.java
+++ 
b/extensions/indexing-sql/src/test/java/org/apache/polygene/index/sql/postgresql/PostgreSQLQueryTest.java
@@ -21,7 +21,7 @@ package org.apache.polygene.index.sql.postgresql;
 
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
-import org.apache.polygene.test.internal.DockerRule;
+import org.apache.polygene.test.docker.DockerRule;
 import org.apache.polygene.test.indexing.AbstractQueryTest;
 import org.junit.ClassRule;
 import org.junit.Ignore;

Reply via email to