Estoy escribiendo algunas pruebas de integración para una aplicación Spring Boot escrita en Kotlin. Para bloquear algunas solicitudes HTTP, estoy usando WireMock a través spring-cloud-contract-wiremock como dependencia.
Algunos códigos de muestra anónimos de una prueba de integración:
@SpringBootTest @AutoConfigureMockMvc @AutoConfigureWireMock class MyIntegrationTest { @Test fun `some test`() { mockEndpoint("url", 500, someResponseBodyInJson) mockMvc.perform( MockMvcRequestBuilders .post("url") .contentType(MediaType.APPLICATION_JSON.toString()) .content(someRequestBodyInJson) ) .andExpect(MockMvcResultMatchers.status().isInternalServerError) } private fun mockEndpoint(url: String, responseCode: Int, responseBody: String) { stubFor( WireMock.post(url).willReturn( WireMock.aResponse() .withStatus(responseCode) .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON.toString()) .withBody(responseBody) ) ) } }Mientras ejecuto estas pruebas en mi máquina local, todo funciona bien. Sin embargo, en el entorno de CI/CD está fallando con el siguiente error:
java.lang.IllegalStateException: No Server ALPNProcessors! at wiremock.org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory.<init>(ALPNServerConnectionFactory.java:52) Investigué un poco y descubrí que tiene que ver con Jetty que se pierde algunas cosas en la ruta de clases. Agregué la siguiente dependencia testImplementation("org.eclipse.jetty:jetty-alpn-server:11.0.7") , pero las pruebas siguen fallando. La extensión alpn-boot no debería ser necesaria ya que se está utilizando JDK 11.
Alguien que me pueda ayudar a solucionar esto? ¿Necesito otra dependencia o estoy mirando en la dirección equivocada?
Degradar a Jetty 9.4.x
Wiremock no es compatible con Jetty 10 o Jetty 11.
Además, Spring no es compatible con Jetty 11 (que usa Jakarta EE 9 y Servlet 5.0 en el nuevo espacio de nombres jakarta.servlet )
El equipo de Wiremock abordó esto en la versión 2.32, hay un ticket aquí . Debe especificar una versión correcta para wiremock-jre8-standalone para anular una versión anterior extraída por Spring:
# Gradle testImplementation 'com.github.tomakehurst:wiremock-jre8-standalone:2.32.0' #Maven <dependency> <groupId>com.github.tomakehurst</groupId> <artifactId>wiremock-jre8-standalone</artifactId> <version>2.32.0</version> <scope>test</scope> </dependency>