Hibernate-reactive: Tests funktionieren auf dem Docker-Desktop nicht mehr

Erstellt am 4. Okt. 2020  ·  23Kommentare  ·  Quelle: hibernate/hibernate-reactive

Ich habe keine Ahnung, was hier vor sich geht, aber es scheint mit der Aktualisierung des Docker-Desktops auf dem Mac auf die neueste Version zusammengefallen zu sein:

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)

Irgendwelche Ideen @Sanne , @DavideD ?

bug testing

Hilfreichster Kommentar

Der Wechsel zu testcontainers 1.15.0-rc2 scheint es für mich behoben zu haben.

Alle 23 Kommentare

Was ist ein Ryuk und warum sollte er unter localhost:32768 laufen

PosgreSQL hat vor kurzem Version 13 veröffentlicht, daher habe ich unsere Testimages neu konfiguriert, um das Image postgres:13.0 . Klingt so, als ob Sie es nicht herunterladen können?

Seltsam, es ist angeblich nicht anders als die vorherigen Versionen zu holen.

PosgreSQL hat vor kurzem Version 13 veröffentlicht, daher habe ich unsere Testimages neu konfiguriert, um das Image postgres:13.0 . Klingt so, als ob Sie es nicht herunterladen können?

Ich denke – aber ich bin mir nicht sicher – dass ich es bereits auf Postgres 13 hatte, bis ich Docker aktualisierte.

Das erste Mal, wenn ich von Ryuk höre.
Es ist für das Abrufen von Bildern im Auftrag von Testcontainern verantwortlich - daher würde dies auslösen, wenn kein neuer Container (wie postgresql 13) vorhanden ist.

Scheint ein Fehler in Testcontainern zu sein.

Sie können es möglicherweise umgehen, indem Sie den Container einmal manuell herunterladen?

Versuchen

docker run --rm -it --name HibernateTestingPGSQL \
    -e POSTGRES_USER=hreact -e POSTGRES_PASSWORD=hreact -e POSTGRES_DB=hreact \
    -p 5432:5432 postgres:13.0

Der Wechsel zu testcontainers 1.15.0-rc2 scheint es für mich behoben zu haben.

Alternativ: https://www.testcontainers.org/features/configuration/#disabling -ryuk

Ja, das hat funktioniert.

Gibt es eine richtige Möglichkeit, eine Umgebungsvariable aus dem Gradle-Skript zu setzen?

Anscheinend:

test {
    environment "TESTCONTAINERS_RYUK_DISABLED", "true"

stimmt, das sollte reichen.

Übrigens, bitte drücke noch ein paar Minuten :) Release läuft

Release erledigt.. Ich mache jetzt die Quarkus-Updates.

Release erledigt.. Ich mache jetzt die Quarkus-Updates.

Exzellent!

Ist das immer noch ein Thema?

Ich glaube, der Fehler ist immer noch da, aber die einzigen Leute, die ihn erleben werden, sind Leute, die das Ding noch nicht auf ihren lokalen Computer geholt haben.

Ich frage mich also, ob dies durch die Notwendigkeit verursacht wurde, die Testdatenbank bei der Migration von Postgres 12 auf 13 zu aktualisieren?

Sehen Sie, ich habe testcontainers.reuse.enable=true gesetzt, was vielleicht die Datenbank zwischen Testläufen wiederverwendet?

Ich glaube nicht, dass wir dieses Upgrade auf PostgreSQL 13 unbedingt _brauchen_ ?

AFAIR als ich es aktualisiert habe, musste ich keine entsprechenden Änderungen vornehmen, daher würde ich erwarten, dass auch auf 12 alles gut funktioniert - es sei denn, es wurde zwischenzeitlich eine Regression aufgenommen, aber das scheint weniger wahrscheinlich zu sein, als Probleme mit Docker/ Testcontainer.

Vielleicht versuchen Sie, die Konfiguration auf 12 zurückzusetzen und zu sehen?

Ich erlebe das wieder :-(

Sehen Sie, ich habe testcontainers.reuse.enable=true gesetzt, was vielleicht die Datenbank zwischen Testläufen wiederverwendet?

Ich habe es auf false gesetzt und es hat das Problem nicht behoben.

environment "TESTCONTAINERS_RYUK_DISABLED", "true"

Dies hat es wieder behoben.

@Sanne Denkst du, ich sollte diese Änderung auf das Gradle-Skript übertragen?

Ja sicher warum nicht. Es scheint ein neues Feature zu sein, und wir waren bisher ohne es glücklich.

Es ist für das Abrufen von Bildern im Auftrag von Testcontainern verantwortlich - daher würde dies auslösen, wenn kein neuer Container (wie postgresql 13) vorhanden ist.

Es ist eigentlich dafür verantwortlich, die Container nach dem Ausführen der Tests zu beenden. Wenn Sie die JVM beenden, werden die Shutdown-Hooks nicht ausgeführt und die Container laufen weiter und erzeugen baumelnde Container.
Die Umgebungsvariable gibt es für CI-Systeme, bei denen Ryuk nicht verwendet werden kann (zB BitBucket Pipelines), aber sie garantieren die Bereinigung selbst.

tl; dr: Ryuk nicht deaktivieren ;)

Wenn Sie die JVM beenden, werden die Shutdown-Hooks nicht ausgeführt und die Container laufen weiter und erzeugen baumelnde Container.

Nun, TBH, ich laufe immer mit testcontainers.reuse.enable=true , also denke ich, dass das sowieso passiert.

Und unter dem Strich sind baumelnde Container weniger schlimm als meine Tests, die einfach nicht laufen. :-)

Aber sicher, wenn dies in 1.15 behoben ist (das erst vor zwei Tagen herauskam, denke ich), dann ist das großartig, und wir werden stattdessen einfach aktualisieren.

Danke für die Erklärung, dass @bsideup !

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen