Hibernate-reactive: перестали работать тесты на рабочем столе Docker

Созданный на 4 окт. 2020  ·  23Комментарии  ·  Источник: hibernate/hibernate-reactive

Понятия не имею, что здесь происходит, но, похоже, это совпало с тем, что я обновлял рабочий стол Docker на Mac до последней версии:

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)

Есть идеи @Sanne , @DavideD ?

bug testing

Самый полезный комментарий

Переход на testcontainers 1.15.0-rc2, похоже, исправил это для меня.

Все 23 Комментарий

Что такое Ryuk и почему он должен работать на localhost: 32768?

Ой, подождите, я только что нашел это: https://github.com/testcontainers/testcontainers-java/issues/3241

PosgreSQL недавно выпустил версию 13, поэтому я перенастроил наши тестовые изображения, чтобы использовать изображение postgres:13.0 . Похоже, вы не можете его скачать?

Странно, это якобы ничем не отличается от получения предыдущих версий.

PosgreSQL недавно выпустил версию 13, поэтому я перенастроил наши тестовые изображения, чтобы использовать изображение postgres:13.0 . Похоже, вы не можете его скачать?

Я думаю - но не уверен, - что он уже работал над Postgres 13, пока я не обновил Docker.

Первый раз, когда я слышу о Ryuk .. из очень немногих ссылок на документы, которые я нашел, кажется, что дополнительный локальный сервер должен запускаться?
Он отвечает за получение изображений от имени Testcontainers, поэтому отсутствие нового контейнера (например, postgresql 13) может вызвать это.

Кажется, ошибка в Testcontainers.

Возможно, вы сможете обойти это, загрузив контейнер один раз вручную?

пытаться

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

Переход на testcontainers 1.15.0-rc2, похоже, исправил это для меня.

Прохладный.
В качестве альтернативы: https://www.testcontainers.org/features/configuration/#dispting -ryuk

В качестве альтернативы: https://www.testcontainers.org/features/configuration/#dispting -ryuk

Да, это сработало.

Есть ли правильный способ установить переменную среды из скрипта gradle?

Видимо:

test {
    environment "TESTCONTAINERS_RYUK_DISABLED", "true"

верно, это должно сработать.

Кстати, пожалуйста, подождите несколько минут :) Релиз запущен

Релиз готов .. Сейчас займусь обновлениями Quarkus.

Релиз готов .. Сейчас займусь обновлениями Quarkus.

Превосходно!

Это все еще проблема?

Я считаю, что ошибка все еще существует, но единственные люди, которые столкнутся с ней, - это люди, которые еще не загрузили эту ошибку на свою локальную машину.

Поэтому мне интересно, было ли это вызвано необходимостью обновления тестовой базы данных при переходе с Postgres 12 на 13?

Видите ли, у меня есть набор testcontainers.reuse.enable=true , который, возможно, повторно использует базу данных между тестовыми запусками?

Я не верю, что нам строго _необходимо_ перейти на PostgreSQL 13?

AFAIR, когда я обновил его, мне не нужно было вносить никаких связанных изменений, поэтому я ожидал, что все будет работать нормально и на 12 - если тем временем не была включена регрессия, но это кажется менее вероятным, чем наличие некоторых проблем с docker / testcontainers.

Может попробовать вернуть настройку на 12 и посмотреть?

Я снова испытываю это :-(

Видите ли, у меня есть набор testcontainers.reuse.enable=true , который, возможно, повторно использует базу данных между тестовыми запусками?

Я установил значение false, и это не устранило проблему.

environment "TESTCONTAINERS_RYUK_DISABLED", "true"

Это снова исправило.

@Sanne Как вы думаете, мне следует внести это изменение в скрипт Gradle?

да, конечно, почему бы и нет. Кажется, это новая функция, и до сих пор мы были счастливы без нее.

Он отвечает за получение изображений от имени Testcontainers, поэтому отсутствие нового контейнера (например, postgresql 13) может вызвать это.

Фактически он отвечает за завершение работы контейнеров после запуска тестов. Если вы убьете JVM, перехватчики завершения работы не будут выполняться, и контейнеры продолжат работу, создавая зависшие контейнеры.
Переменная среды существует для систем CI, в которых нельзя использовать Ryuk (например, BitBucket Pipelines), но они сами гарантируют очистку.

tl; dr: не отключать Ryuk;)

Если вы убьете JVM, перехватчики завершения работы не будут выполняться, и контейнеры продолжат работу, создавая зависшие контейнеры.

Ну, ТБХ, я всегда бегаю с testcontainers.reuse.enable=true , так что я думаю, что так и происходит.

И, в целом, висячие контейнеры не хуже, чем мои тесты, просто не работающие. :-)

Но конечно, если это будет исправлено в версии 1.15 (которая, я думаю, вышла всего два дня назад), тогда это здорово, и вместо этого мы просто обновимся.

Спасибо за объяснение @bsideup !

Была ли эта страница полезной?
0 / 5 - 0 рейтинги