Je n'ai aucune idée de ce qui se passe ici, mais cela semble avoir coïncidé avec la mise à jour du bureau Docker sur Mac vers la dernière version :
Gradle Test Executor 2 > org.hibernate.reactive.FilterTest > testFilterCollectionFetch FAILED
org.testcontainers.containers.ContainerLaunchException: Container startup failed
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:330)
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:311)
at org.hibernate.reactive.containers.PostgreSQLDatabase.getJdbcUrl(PostgreSQLDatabase.java:39)
at org.hibernate.reactive.containers.DatabaseConfiguration.getJdbcUrl(DatabaseConfiguration.java:78)
at org.hibernate.reactive.BaseReactiveTest.constructConfiguration(BaseReactiveTest.java:88)
at org.hibernate.reactive.FilterTest.constructConfiguration(FilterTest.java:26)
Caused by:
org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=postgres:13.0, imagePullPolicy=DefaultPullPolicy())
at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1279)
at org.testcontainers.containers.GenericContainer.logger(GenericContainer.java:613)
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:320)
... 5 more
Caused by:
java.lang.IllegalStateException: Can not connect to Ryuk at localhost:32768
at org.testcontainers.utility.ResourceReaper.start(ResourceReaper.java:176)
at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:168)
at org.testcontainers.LazyDockerClient.getDockerClient(LazyDockerClient.java:14)
at org.testcontainers.LazyDockerClient.listImagesCmd(LazyDockerClient.java:12)
at org.testcontainers.images.LocalImagesCache.maybeInitCache(LocalImagesCache.java:68)
at org.testcontainers.images.LocalImagesCache.get(LocalImagesCache.java:32)
at org.testcontainers.images.AbstractImagePullPolicy.shouldPull(AbstractImagePullPolicy.java:18)
at org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:59)
at org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:26)
at org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:20)
at org.testcontainers.utility.LazyFuture.get(LazyFuture.java:27)
at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1277)
... 7 more
java.lang.NullPointerException
at org.hibernate.reactive.BaseReactiveTest.after(BaseReactiveTest.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at io.vertx.ext.unit.junit.VertxUnitRunner.invokeTestMethod(VertxUnitRunner.java:95)
at io.vertx.ext.unit.junit.VertxUnitRunner.lambda$invokeExplosively$0(VertxUnitRunner.java:114)
at io.vertx.ext.unit.impl.TestContextImpl.run(TestContextImpl.java:90)
at io.vertx.ext.unit.junit.VertxUnitRunner.invokeExplosively(VertxUnitRunner.java:130)
at io.vertx.ext.unit.junit.VertxUnitRunner.access$000(VertxUnitRunner.java:39)
at io.vertx.ext.unit.junit.VertxUnitRunner$3.evaluate(VertxUnitRunner.java:217)
at io.vertx.ext.unit.junit.Timeout$1.evaluate(Timeout.java:45)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:748)
Des idées @Sanne , @DavideD ?
Qu'est-ce qu'un Ryuk et pourquoi devrait-il fonctionner sur localhost:32768 ?
Oh, attendez, je viens de trouver ceci : https://github.com/testcontainers/testcontainers-java/issues/3241
PosgreSQL a récemment publié la version 13, j'ai donc reconfiguré nos images de test pour utiliser l'image postgres:13.0
. On dirait que vous n'arrivez pas à le télécharger ?
Bizarre, ce n'est censé être pas différent de la récupération des versions précédentes.
PosgreSQL a récemment publié la version 13, j'ai donc reconfiguré nos images de test pour utiliser l'image
postgres:13.0
. On dirait que vous n'arrivez pas à le télécharger ?
Je pense - mais je ne suis pas sûr - que je l'avais déjà fait fonctionner sur Postgres 13 jusqu'à ce que je mette à jour Docker.
La première fois que j'entends parler de Ryuk
.. d'après les quelques références doc que j'ai trouvées, il semble qu'un serveur local facultatif soit censé démarrer ?
Il est responsable de la récupération des images au nom des Testcontainers - donc ne pas avoir de nouveau conteneur (comme postgresql 13) déclencherait cela.
Semble un bogue dans Testcontainers.
Vous pourrez peut-être le contourner en téléchargeant le conteneur une fois manuellement ?
essayer
docker run --rm -it --name HibernateTestingPGSQL \
-e POSTGRES_USER=hreact -e POSTGRES_PASSWORD=hreact -e POSTGRES_DB=hreact \
-p 5432:5432 postgres:13.0
Le passage à testcontainers 1.15.0-rc2 semble l'avoir corrigé pour moi.
Frais.
Alternativement : https://www.testcontainers.org/features/configuration/#disabling-ryuk
Alternativement : https://www.testcontainers.org/features/configuration/#disabling-ryuk
Ouais, ça a marché.
Existe-t-il un bon moyen de définir une variable d'environnement à partir du script gradle ?
Apparemment:
test {
environment "TESTCONTAINERS_RYUK_DISABLED", "true"
c'est vrai, ça devrait le faire.
BTW s'il vous plaît maintenez enfoncé pendant quelques minutes :) la libération est en cours d'exécution
Relâchement terminé.. Je vais faire les mises à jour Quarkus maintenant.
Relâchement terminé.. Je vais faire les mises à jour Quarkus maintenant.
Excellent!
Est-ce toujours un problème ?
Je crois que le bogue est toujours là, mais les seules personnes qui vont en faire l'expérience sont des personnes qui n'ont pas déjà la chose récupérée sur leur machine locale.
Je me demande donc si cela est dû à la nécessité de mettre à niveau la base de données de test lors de la migration de Postgres 12 vers 13 ?
Vous voyez, j'ai défini testcontainers.reuse.enable=true
, ce qui réutilise peut-être la base de données entre les tests ?
Je ne crois pas que nous ayons strictement besoin de cette mise à niveau vers PostgreSQL 13 ?
AFAIR lorsque je l'ai mis à niveau, je n'ai pas eu besoin d'apporter de modifications connexes, donc je m'attendrais à ce que tout fonctionne bien sur 12 également - à moins qu'une régression n'ait été incluse entre-temps, mais cela semble moins probable que d'avoir des problèmes avec docker/ conteneurs de test.
Essayez peut-être de rétablir la configuration à 12 et voyez?
Je vis à nouveau ça :-(
Vous voyez, j'ai défini
testcontainers.reuse.enable=true
, ce qui réutilise peut-être la base de données entre les tests ?
Je l'ai mis sur false et cela n'a pas résolu le problème.
environment "TESTCONTAINERS_RYUK_DISABLED", "true"
Cela l'a à nouveau corrigé.
@Sanne Pensez-vous que je devrais appliquer ce changement au script gradle?
Oui bien sûr pourquoi pas. Cela semble être une nouvelle fonctionnalité, et nous avons été heureux jusqu'à présent sans elle.
Il est responsable de la récupération des images au nom des Testcontainers - donc ne pas avoir de nouveau conteneur (comme postgresql 13) déclencherait cela.
Il est en fait responsable de l'arrêt des conteneurs après l'exécution des tests. Si vous tuez la JVM, les hooks d'arrêt ne seront pas exécutés et les conteneurs continueront à s'exécuter, créant des conteneurs suspendus.
La variable d'environnement est là pour les systèmes CI où Ryuk ne peut pas être utilisé (par exemple BitBucket Pipelines) mais ils garantissent le nettoyage eux-mêmes.
tl;dr : ne désactive pas Ryuk ;)
Si vous tuez la JVM, les hooks d'arrêt ne seront pas exécutés et les conteneurs continueront à s'exécuter, créant des conteneurs suspendus.
Eh bien, TBH, je cours toujours avec testcontainers.reuse.enable=true
, donc je suppose que c'est ce qui se passe de toute façon.
Et, dans l'ensemble, les conteneurs suspendus sont moins pires que mes tests qui ne fonctionnent tout simplement pas. :-)
Mais bien sûr, si cela est corrigé dans la version 1.15 (qui vient de sortir il y a deux jours, je pense), alors c'est génial, et nous allons simplement mettre à niveau à la place.
Merci d'avoir expliqué ça @bsideup !
Commentaire le plus utile
Le passage à testcontainers 1.15.0-rc2 semble l'avoir corrigé pour moi.