Hibernate-reactive: tes berhenti bekerja di desktop Docker

Dibuat pada 4 Okt 2020  ·  23Komentar  ·  Sumber: hibernate/hibernate-reactive

Saya tidak tahu apa yang terjadi di sini, tetapi tampaknya bertepatan dengan saya memperbarui desktop Docker di Mac ke versi terbaru:

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)

Ada ide @Sanne , @DavideD ?

bug testing

Komentar yang paling membantu

Mengubah ke testcontainers 1.15.0-rc2 tampaknya telah memperbaikinya untuk saya.

Semua 23 komentar

Apa itu Ryuk dan mengapa harus dijalankan di localhost:32768?

Oh, tunggu, saya baru saja menemukan ini: https://github.com/testcontainers/testcontainers-Java/issues/3241

PosgreSQL baru-baru ini merilis versi 13, jadi saya mengonfigurasi ulang gambar pengujian kami untuk menggunakan gambar postgres:13.0 . Sepertinya Anda tidak dapat mengunduhnya?

Aneh, seharusnya tidak ada bedanya dengan mengambil versi sebelumnya.

PosgreSQL baru-baru ini merilis versi 13, jadi saya mengonfigurasi ulang gambar pengujian kami untuk menggunakan gambar postgres:13.0 . Sepertinya Anda tidak dapat mengunduhnya?

Saya pikir — tetapi saya tidak yakin — bahwa saya sudah membuatnya bekerja di Postgres 13 hingga saya memperbarui Docker.

Pertama kali saya mendengar tentang Ryuk .. dari sangat sedikit referensi dokumen yang saya temukan, sepertinya server lokal opsional harus dimulai?
Ini bertanggung jawab untuk mengambil gambar atas nama Testcontainers - jadi tidak memiliki wadah baru (seperti postgresql 13) akan memicu ini.

Tampaknya ada bug di Testcontainers.

Anda mungkin dapat mengatasinya dengan mengunduh wadah sekali secara manual?

mencoba

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

Mengubah ke testcontainers 1.15.0-rc2 tampaknya telah memperbaikinya untuk saya.

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

Ya, itu berhasil.

Apakah ada cara yang tepat untuk mengatur variabel lingkungan dari skrip gradle?

Tampaknya:

test {
    environment "TESTCONTAINERS_RYUK_DISABLED", "true"

benar, itu harus dilakukan.

BTW tolong tunggu beberapa menit :) rilis sedang berjalan

Rilis selesai.. Saya akan melakukan pembaruan Quarkus sekarang.

Rilis selesai.. Saya akan melakukan pembaruan Quarkus sekarang.

Bagus sekali!

Apakah ini masih menjadi masalah?

Saya percaya bug itu masih ada, tetapi satu-satunya orang yang akan mengalaminya adalah orang-orang yang belum mengambilnya ke mesin lokal mereka.

Jadi saya bertanya-tanya apakah ini disebabkan oleh kebutuhan untuk memutakhirkan database pengujian saat bermigrasi dari Postgres 12 ke 13?

Lihat, saya memiliki set testcontainers.reuse.enable=true , yang mungkin menggunakan kembali database di antara uji coba?

Saya tidak percaya kita benar-benar _membutuhkan_ upgrade ke PostgreSQL 13 ?

AFAIR ketika saya memutakhirkannya, saya tidak perlu membuat perubahan terkait apa pun, jadi saya berharap semuanya berfungsi dengan baik pada 12 juga - kecuali jika regresi disertakan untuk sementara tetapi sepertinya lebih kecil kemungkinannya daripada memiliki beberapa masalah dengan buruh pelabuhan/ wadah uji.

Mungkin coba kembalikan konfigurasi ke 12 dan lihat?

Saya mengalami ini lagi :-(

Lihat, saya memiliki set testcontainers.reuse.enable=true , yang mungkin menggunakan kembali database di antara uji coba?

Saya mengaturnya ke false, dan itu tidak memperbaiki masalah.

environment "TESTCONTAINERS_RYUK_DISABLED", "true"

Ini memperbaikinya lagi.

@Sanne Apakah menurut Anda saya harus mendorong perubahan ini ke skrip gradle?

ya, tentu mengapa tidak. Tampaknya ini adalah fitur baru, dan sejauh ini kami senang tanpanya.

Ini bertanggung jawab untuk mengambil gambar atas nama Testcontainers - jadi tidak memiliki wadah baru (seperti postgresql 13) akan memicu ini.

Ini sebenarnya bertanggung jawab untuk menghentikan kontainer setelah menjalankan tes. Jika Anda mematikan JVM, hook shutdown tidak akan dieksekusi dan container akan terus berjalan, membuat container yang menjuntai.
Variabel lingkungan ada untuk sistem CI di mana Ryuk tidak dapat digunakan (misalnya BitBucket Pipelines) tetapi mereka menjamin pembersihan itu sendiri.

tl; dr: jangan nonaktifkan Ryuk ;)

Jika Anda mematikan JVM, hook shutdown tidak akan dieksekusi dan container akan terus berjalan, membuat container yang menjuntai.

Yah, TBH, saya selalu menjalankan testcontainers.reuse.enable=true , jadi saya rasa itulah yang terjadi.

Dan, secara seimbang, wadah yang menggantung tidak lebih buruk daripada pengujian saya yang tidak berjalan. :-)

Tapi tentu, jika ini diperbaiki di 1,15 (yang baru saja keluar dua hari yang lalu, saya pikir) maka itu bagus, dan kami hanya akan memutakhirkan saja.

Terima kasih telah menjelaskan @bsideup itu !

Apakah halaman ini membantu?
0 / 5 - 0 peringkat