polygene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Merlin <paulmer...@apache.org>
Subject Re: Docker based integration testing
Date Sat, 25 Feb 2017 14:33:36 GMT
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 <paulmerlin@apache.org> 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
>>>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message