Gang, I finally found time to take a stab at fixing Docker based integration testing on Linux.
It should now work out of the box on Linux, given that a Docker service is running locally and that your user has the correct permissions. Docker based integration testing is now disabled if unable to contact a Docker service. No need to set DOCKER_HOST. Niclas, could you confirm it works for you? Cheers /Paul Paul Merlin a écrit : > Thanks for your feedback Niclas! > > Using the unix:///path/to/docker.sock URL on Linux should do. > I'll do another round on that later this week. > > Cheers > > > Niclas Hedhman a écrit : >> DOCKER_* may not be the best way to determine if Docker is present. I am on >> a Debian system, and no env variable named DOCKER* is set by default, yet >> docker is operational. IIUIC, these variables are needed for Docker Swarm >> and other specialized setup where one is not running the container on the >> same system as issuing the `docker` command. >> >> That said, running >> ./gradlew :ext:entity-redis:test >> >> without changing my defaults gives me some errors; >> >> :extensions:entitystore-redis:test >> >> org.apache.polygene.entitystore.redis.RedisMapEntityStoreWithCacheTest > >> classMethod FAILED >> java.lang.ExceptionInInitializerError >> Caused by: java.lang.IllegalStateException at >> RedisMapEntityStoreWithCacheTest.java:38 >> Caused by: com.spotify.docker.client.exceptions.DockerException >> at RedisMapEntityStoreWithCacheTest.java:38 >> Caused by: java.util.concurrent.ExecutionException at >> RedisMapEntityStoreWithCacheTest.java:38 >> Caused by: javax.ws.rs.ProcessingException >> Caused by: >> org.apache.http.conn.HttpHostConnectException >> Caused by: java.net.ConnectException >> >> org.apache.polygene.entitystore.redis.RedisMapEntityStoreTest > classMethod >> FAILED >> java.lang.ExceptionInInitializerError >> Caused by: java.lang.IllegalStateException at >> RedisMapEntityStoreTest.java:38 >> Caused by: com.spotify.docker.client.exceptions.DockerException >> at RedisMapEntityStoreTest.java:38 >> Caused by: java.util.concurrent.ExecutionException at >> RedisMapEntityStoreTest.java:38 >> Caused by: javax.ws.rs.ProcessingException >> Caused by: >> org.apache.http.conn.HttpHostConnectException >> Caused by: java.net.ConnectException >> >> 2 tests completed, 2 failed >> >> >> And the underlying exception is; >> >> Caused by: org.apache.http.conn.HttpHostConnectException: Connect to >> localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: >> Connection refused (Connection refused) >> >> >> Which I presume is due to the gradle-docker-plugin going on the network >> protocol instead of the command-line interface. The default docker >> interface on Linux seems to be Unix sockets, which most Java apps tend to >> ignore and not support. >> >> 1059 ? Ssl 0:02 docker-containerd -l >> unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim >> docker-containerd-shim --metrics-interval=0 --start-timeout 2m --state-dir >> /var/run/docker/libcontainerd/containerd --runtime docker-runc >> >> >> Hope that helps. I am sending you login separately to a clean/unused server >> in Germany, in case you want to run experiments on it. >> >> Cheers >> >> On Sun, Jan 15, 2017 at 8:08 PM, Paul Merlin <[email protected]> wrote: >> >>> Could anybody confirm it works for them? >>> >>> Paul Merlin a écrit : >>>> Gang, >>>> >>>> I pushed changes to the build system and tests to automate integration >>>> testing. >>>> >>>> It uses docker to build the necessary images and run docker containers >>>> as a JUnit rule. >>>> All this is done only if the DOCKER_HOST environment variable is set, >>>> otherwise it's skipped. >>>> >>>> On linux with docker installed it should work out of the box given you >>>> have DOCKER_HOST and DOCKER_CERT_PATH set. >>>> >>>> On mac you need to: >>>> - docker-machine create someFancyNameYouChoose >>>> - eval $(docker-machine env someFancyNameYouChoose) >>>> >>>> On windows, see https://docs.docker.com/machine/reference/env/ >>>> >>>> With that done, when you now run e.g: >>>> >>>> ./gradlew :ext:entity-redis:test >>>> >>>> it will build the docker images and run Redis in a container around >>>> the EntityStore tests. >>>> >>>> The same goes for these extensions: >>>> >>>> - Memcached Cache >>>> - SQL EntityStore using both MySQL and PostgreSQL >>>> - SQL Index/Query using PostgreSQL >>>> - Riak EntityStore >>>> >>>> All the others extensions are tested using embedded solutions, >>>> including MongoDB. >>>> >>>> Docker images are built by the :internals:testsupport-internal >>>> project, you'll find the Dockerfiles there. >>>> >>>> Thanks to this I was able to fix a bug I introduced in the Riak ES in >>>> recent changes. >>>> The only thing actually broken is SQL Index/Query, see >>>> https://issues.apache.org/jira/browse/POLYGENE-222 >>>> >>>> For now these test do not run on CI. >>>> builds.apache.org supports docker so we should be able to do that too >>>> at some point. >>>> In the meantime some of us should run the *whole* test suite from time >>>> to time. >>>> At least now it should be damn easy to do! >>>> >>>> Before calling this automation done I'd like to get someone to confirm >>>> it 'works for them'. >>>> I only tested on a mac. >>>> >>>> Cheers >>>> >>>> /Paul >>>> >
