Hi all, I hope you all are doing fine. We are cur...
# pact-jvm
o
Hi all, I hope you all are doing fine. We are currently moving the JDK 17, and we faced a strange problem. We cannot debug tests using pact provider and consumer junit5 dependencies. I tried many versions and faced the same problem. I debugged this problem by excluding each library that pact dependency is using, and in the end, I found the problematic area. If I use the below configuration, the problem disappears.
Copy code
<dependency>
    <groupId>au.com.dius.pact.provider</groupId>
    <artifactId>junit5</artifactId>
    <version>4.4.4</version>
    <exclusions>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-network-tls-certificates</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-server-netty</artifactId>
        </exclusion>
        <exclusion>
            <groupId>au.com.dius.pact.core</groupId>
            <artifactId>model</artifactId>
        </exclusion>
    </exclusions>
</dependency>


<dependency>
    <groupId>au.com.dius.pact.consumer</groupId>
    <artifactId>junit5</artifactId>
    <version>4.4.4</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-network-tls-certificates</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-server-netty</artifactId>
        </exclusion>
        <exclusion>
            <groupId>au.com.dius.pact.core</groupId>
            <artifactId>model</artifactId>
        </exclusion>
    </exclusions>
</dependency>
If I do not exclude any of these libraries, I am facing the below problem when I debug the tests in IntelliJ. This happens only for debugging, not running the tests. Connected to the target VM, address: ‘127.0.0.1:52632’, transport: ‘socket’ Internal Error occurred. org.junit.platform.commons.JUnitException: TestEngine with ID ‘junit-jupiter’ failed to discover tests at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:160) at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverSafely(EngineDiscoveryOrchestrator.java:132) at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:107) at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discover(EngineDiscoveryOrchestrator.java:78) at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:110) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.junit.platform.commons.JUnitException: MethodSelector [className = ‘com.emirates.ocsl.skeleton.ct.tests.SkeletonCT’, methodName = ‘iGetResponseSuccessfully’, methodParameterTypes = ‘’] resolution failed at org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener.selectorProcessed(AbortOnFailureLauncherDiscoveryListener.java:39) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:103) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.run(EngineDiscoveryRequestResolution.java:83) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.resolve(EngineDiscoveryRequestResolver.java:113) at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:46) at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:69) at org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.discoverEngineRoot(EngineDiscoveryOrchestrator.java:152) ... 13 more Caused by: java.lang.ClassCircularityError: java/lang/WeakPairMap$Pair$Weak at java.base/java.lang.WeakPairMap$Pair.weak(WeakPairMap.java:201) at java.base/java.lang.WeakPairMap.putIfAbsent(WeakPairMap.java:123) at java.base/java.lang.Module.implAddReads(Module.java:488) at java.base/java.lang.Module.implAddReads(Module.java:449) at java.base/java.lang.System$2.addReads(System.java:2335) at java.base/jdk.internal.module.Modules.addReads(Modules.java:90) at java.base/java.lang.reflect.Proxy$ProxyBuilder.lambda$getDynamicModule$1(Proxy.java:918) at java.base/jdk.internal.loader.AbstractClassLoaderValue$Memoizer.get(AbstractClassLoaderValue.java:329) at java.base/jdk.internal.loader.AbstractClassLoaderValue.computeIfAbsent(AbstractClassLoaderValue.java:205) at java.base/java.lang.reflect.Proxy$ProxyBuilder.getDynamicModule(Proxy.java:908) at java.base/java.lang.reflect.Proxy$ProxyBuilder.mapToModule(Proxy.java:846) at java.base/java.lang.reflect.Proxy$ProxyBuilder.<init>(Proxy.java:651) at java.base/java.lang.reflect.Proxy$ProxyBuilder.<init>(Proxy.java:656) at java.base/java.lang.reflect.Proxy.lambda$getProxyConstructor$0(Proxy.java:429) at java.base/jdk.internal.loader.AbstractClassLoaderValue$Memoizer.get(AbstractClassLoaderValue.java:329) at java.base/jdk.internal.loader.AbstractClassLoaderValue.computeIfAbsent(AbstractClassLoaderValue.java:205) at java.base/java.lang.reflect.Proxy.getProxyConstructor(Proxy.java:427) at java.base/java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1037) at java.base/sun.reflect.annotation.AnnotationParser$1.run(AnnotationParser.java:302) at java.base/sun.reflect.annotation.AnnotationParser$1.run(AnnotationParser.java:300) at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) at java.base/sun.reflect.annotation.AnnotationParser.annotationForMap(AnnotationParser.java:300) at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:289) at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:121) at java.base/sun.reflect.annotation.AnnotationParser.parseSelectAnnotations(AnnotationParser.java:102) at java.base/sun.reflect.annotation.AnnotationType.<init>(AnnotationType.java:146) at java.base/sun.reflect.annotation.AnnotationType.getInstance(AnnotationType.java:85) at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:262) at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:121) at java.base/sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:73) at java.base/java.lang.Class.createAnnotationData(Class.java:4068) at java.base/java.lang.Class.annotationData(Class.java:4057) at java.base/java.lang.Class.getAnnotation(Class.java:3940) at java.base/java.lang.reflect.AnnotatedElement.isAnnotationPresent(AnnotatedElement.java:292) at java.base/java.lang.Class.isAnnotationPresent(Class.java:3950) at org.junit.platform.commons.util.AnnotationUtils.findAnnotation(AnnotationUtils.java:136) at org.junit.platform.commons.util.AnnotationUtils.isAnnotated(AnnotationUtils.java:105) at org.junit.jupiter.engine.discovery.predicates.IsTestableMethod.test(IsTestableMethod.java:52) at org.junit.jupiter.engine.discovery.predicates.IsTestMethod.test(IsTestMethod.java:23) at org.junit.jupiter.engine.discovery.predicates.IsTestableMethod.test(IsTestableMethod.java:26) at java.base/java.util.function.Predicate.lambda$or$2(Predicate.java:101) at java.base/java.util.function.Predicate.lambda$or$2(Predicate.java:101) at org.junit.platform.commons.util.ReflectionUtils.findMethod(ReflectionUtils.java:1368) at org.junit.platform.commons.util.ReflectionUtils.isMethodPresent(ReflectionUtils.java:1267) at org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.hasTestOrTestFactoryOrTestTemplateMethods(IsTestClassWithTests.java:50) at org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.test(IsTestClassWithTests.java:46) at org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.test(IsTestClassWithTests.java:27) at java.base/java.util.function.Predicate.lambda$or$2(Predicate.java:101) at org.junit.jupiter.engine.discovery.MethodSelectorResolver.resolve(MethodSelectorResolver.java:87) at org.junit.jupiter.engine.discovery.MethodSelectorResolver.resolve(MethodSelectorResolver.java:75) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.lambda$resolve$2(EngineDiscoveryRequestResolution.java:150) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1602) at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129) at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:189) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolve(EngineDiscoveryRequestResolution.java:126) at org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.resolveCompletely(EngineDiscoveryRequestResolution.java:92)
As I see the ktor libraries create problems with OpenJDK17, Springboot, Webflux, Junit5 project. I am not sure what is the conflict but below exclusions worked fine.
Copy code
<dependency>
    <groupId>au.com.dius.pact.provider</groupId>
    <artifactId>junit5</artifactId>
    <version>${pact.version}</version>
    <exclusions>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-network-tls-certificates</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-server-netty</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-http-jvm</artifactId>
        </exclusion>
    </exclusions>
</dependency>


<dependency>
    <groupId>au.com.dius.pact.consumer</groupId>
    <artifactId>junit5</artifactId>
    <version>${pact.version}</version>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-network-tls-certificates</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-server-netty</artifactId>
        </exclusion>
        <exclusion>
            <groupId>io.ktor</groupId>
            <artifactId>ktor-http-jvm</artifactId>
        </exclusion>
    </exclusions>
</dependency>