Hibernate-reactive: توقفت الاختبارات عن العمل على سطح مكتب Docker

تم إنشاؤها على ٤ أكتوبر ٢٠٢٠  ·  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 ، @ DavidD ؟

bug testing

التعليق الأكثر فائدة

يبدو أن التغيير إلى testcontainers 1.15.0-rc2 قد أصلحه بالنسبة لي.

ال 23 كومينتر

ما هو ريوك ولماذا يجب تشغيله على المضيف المحلي: 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) سيؤدي إلى ذلك.

يبدو خطأ في حاويات الاختبار.

قد تتمكن من حلها عن طريق تنزيل الحاوية مرة واحدة يدويًا؟

محاولة

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/#disopped -ryuk

أو بدلاً من ذلك: https://www.testcontainers.org/features/configuration/#disopped -ryuk

نعم ، لقد نجح ذلك.

هل هناك طريقة صحيحة لتعيين متغير بيئة من البرنامج النصي gradle؟

فيما يبدو:

test {
    environment "TESTCONTAINERS_RYUK_DISABLED", "true"

صحيح ، يجب أن تفعل ذلك.

راجع للشغل يرجى الاستمرار في الضغط لبضع دقائق :) الإصدار قيد التشغيل

تم الإصدار .. سأفعل تحديثات Quarkus الآن.

تم الإصدار .. سأفعل تحديثات Quarkus الآن.

ممتاز!

لا تزال هذه القضية؟

أعتقد أن الخطأ لا يزال موجودًا ، لكن الأشخاص الوحيدين الذين سيختبرونه هم الأشخاص الذين ليس لديهم بالفعل الشيء الذي تم جلبه إلى أجهزتهم المحلية.

لذا أتساءل عما إذا كان السبب في ذلك هو الحاجة إلى ترقية قاعدة بيانات الاختبار عند الترحيل من Postgres 12 إلى 13؟

انظر ، لدي مجموعة testcontainers.reuse.enable=true ، والتي ربما تعيد استخدام قاعدة البيانات بين عمليات التشغيل التجريبية؟

لا أعتقد أننا _ نحتاج بشدة_ إلى الترقية إلى PostgreSQL 13؟

AFAIR عندما قمت بترقيته ، لم أكن بحاجة إلى إجراء أي تغييرات ذات صلة ، لذلك أتوقع أن يعمل كل شيء بشكل جيد في 12 أيضًا - ما لم يتم تضمين الانحدار في هذه الأثناء ولكن يبدو أن هذا أقل احتمالًا من وجود بعض المشكلات مع عامل الإرساء / حاويات الاختبار.

ربما تحاول إعادة التكوين إلى 12 وترى؟

أعاني من هذا مرة أخرى :-(

انظر ، لدي مجموعة testcontainers.reuse.enable=true ، والتي ربما تعيد استخدام قاعدة البيانات بين عمليات التشغيل التجريبية؟

لقد قمت بتعيينه على "خطأ" ، ولم يحل المشكلة.

environment "TESTCONTAINERS_RYUK_DISABLED", "true"

هذا أصلحها مرة أخرى.

Sanne هل تعتقد أنني يجب أن أدفع هذا التغيير إلى البرنامج النصي gradle؟

نعم بالتأكيد لماذا لا. يبدو أنها ميزة جديدة ، وكنا سعداء حتى الآن بدونها.

إنها مسؤولة عن جلب الصور نيابة عن Testcontainers - لذا فإن عدم وجود حاوية جديدة (مثل postgresql 13) سيؤدي إلى ذلك.

إنها في الواقع مسؤولة عن إنهاء الحاويات بعد إجراء الاختبارات. إذا قمت بقتل JVM ، فلن يتم تنفيذ خطافات الإغلاق وستستمر الحاويات في العمل ، مما يؤدي إلى إنشاء حاويات متدلية.
متغير البيئة موجود لأنظمة CI حيث لا يمكن استخدام Ryuk (مثل BitBucket Pipelines) لكنها تضمن التنظيف بأنفسهم.

TL ؛ dr: لا تقم بتعطيل Ryuk ؛)

إذا قمت بقتل JVM ، فلن يتم تنفيذ خطافات الإغلاق وستستمر الحاويات في العمل ، مما يؤدي إلى إنشاء حاويات متدلية.

حسنًا ، TBH ، أركض بـ testcontainers.reuse.enable=true دائمًا ، لذا أعتقد أن هذا ما يحدث على أي حال.

وبشكل عام ، الحاويات المتدلية أقل سوءًا من اختباراتي التي لا تعمل. :-)

لكن بالتأكيد ، إذا تم إصلاح هذا في 1.15 (والذي ظهر للتو منذ يومين ، على ما أعتقد) فهذا رائع ، وسنقوم بالترقية بدلاً من ذلك.

شكرًا لتوضيح ذلك

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات