wiremock / wiremock-grpc-extension

WireMock Extension: gRPC mocking
https://wiremock.org/docs/grpc/
Apache License 2.0
15 stars 8 forks source link

WireMockHandlerDispatchingServlet is not a javax.servlet.Servlet #81

Closed imochurad closed 2 months ago

imochurad commented 4 months ago

Proposal

I realize that this it must be some lib mismatch, cannot put a finger on what it is...

Failures (1):
  JUnit Jupiter:GrpcServiceComponentTest
    ClassSource [className = 'package.MetadataGrpcServiceComponentTest', filePosition = null]
    => com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: MultiException[javax.servlet.UnavailableException: Servlet class com.github.tomakehurst.wiremock.servlet.NotMatchedServlet is not a javax.servlet.Servlet, javax.servlet.UnavailableException: Servlet class com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet is not a javax.servlet.Servlet]
       com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
       com.github.tomakehurst.wiremock.junit5.WireMockExtension.startServerIfRequired(WireMockExtension.java:163)
       com.github.tomakehurst.wiremock.junit5.WireMockExtension.beforeAll(WireMockExtension.java:228)
       org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllCallbacks$12(ClassBasedTestDescriptor.java:395)
       org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
       [...]
       Suppressed: java.lang.NullPointerException
         com.github.tomakehurst.wiremock.junit5.WireMockExtension.stopServerIfRunning(WireMockExtension.java:216)
         com.github.tomakehurst.wiremock.junit5.WireMockExtension.afterAll(WireMockExtension.java:254)
         org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeAfterAllCallbacks$18(ClassBasedTestDescriptor.java:461)
         org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
         org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeAfterAllCallbacks$19(ClassBasedTestDescriptor.java:461)
         [...]
     Caused by: java.lang.RuntimeException: MultiException[javax.servlet.UnavailableException: Servlet class com.github.tomakehurst.wiremock.servlet.NotMatchedServlet is not a javax.servlet.Servlet, javax.servlet.UnavailableException: Servlet class com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet is not a javax.servlet.Servlet]
       com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
       com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
       [...]
     Caused by: MultiException[javax.servlet.UnavailableException: Servlet class com.github.tomakehurst.wiremock.servlet.NotMatchedServlet is not a javax.servlet.Servlet, javax.servlet.UnavailableException: Servlet class com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet is not a javax.servlet.Servlet]
       org.eclipse.jetty.util.MultiException.ifExceptionThrow(MultiException.java:117)
       org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:751)
       org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:392)
       org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:901)
       org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:306)
       [...]
       Suppressed: javax.servlet.UnavailableException: Servlet class com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet is not a javax.servlet.Servlet
         org.eclipse.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:514)
         org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:386)
         org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
         org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$2(ServletHandler.java:724)
         java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
         [...]
     Caused by: javax.servlet.UnavailableException: Servlet class com.github.tomakehurst.wiremock.servlet.NotMatchedServlet is not a javax.servlet.Servlet
       org.eclipse.jetty.servlet.ServletHolder.checkServletType(ServletHolder.java:514)
       org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:386)
       org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
       org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$2(ServletHandler.java:724)
       java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357)
       [...]

Reproduction steps

package com.salesforce.fieldservice.metadatafeed

import com.github.tomakehurst.wiremock.client.WireMock import com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig import com.github.tomakehurst.wiremock.junit5.WireMockExtension import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.junit.jupiter.api.extension.RegisterExtension import org.wiremock.grpc.GrpcExtensionFactory import org.wiremock.grpc.dsl.WireMockGrpcService

@ExtendWith(WireMockExtension::class) class GrpcServiceComponentTest {

companion object {
    @JvmField
    @RegisterExtension
    val wm: WireMockExtension = WireMockExtension.newInstance()
        .options(
            wireMockConfig()
                .dynamicPort()
                .withRootDirectory("src/test/resources/wiremock")
                .extensions(GrpcExtensionFactory())
        )
        .build()
}

private var mockJwtGenerationService: WireMockGrpcService? = null

@BeforeEach
fun init() {
    mockJwtGenerationService = WireMockGrpcService(WireMock(wm.port), "salesforce.cdp.authenticationservice.jwt.v1.JwtGenerationService")
}

@Test
fun dummyTest() {
    assertThat(5).isNotNull()
}

}

References

No response

tomakehurst commented 2 months ago

This is likely due to the Jetty version you already have on your classpath. Suggest you post this to the Slack community if you still need any help.