Coder Social home page Coder Social logo

quarkus-wiremock's Introduction

Quarkus Logo

Quarkus - WireMock


GitHub Actions Status Supported JVM Versions Version License

All Contributors

Description

Quarkus WireMock extension for tests and local development.

Compatibility

Currently, this Quarkus extension supports the LTS streams of Quarkus only. However, it's most likely that this extension will work with the latest and greatest version of Quarkus as well.

Quarkus WireMock WireMock Quarkus Platform Documentation
1.x.x 3.x 3.8.x (LTS) Quarkiverse Docs

πŸš€ Quarkus WireMock Extension in Action

Interested in seeing this extension in action? It's currently being used in the official Quarkus Super Heroes project. This provides a practical example of how this extension can be integrated into your Quarkus applications, demonstrating its utility and ease of use.

By exploring the Super Heroes project, you'll get a firsthand look at the benefits of this extension offers. It's an excellent way to understand its features in a live environment. Check out the Quarkus Super Heroes project to see this extension at work!

πŸ§‘β€πŸ’» Contributing

  • Contribution is the best way to support and get involved in community!
  • Please, consult our Code of Conduct policies for interacting in our community.
  • Contributions to quarkus-wiremock, please check our CONTRIBUTING.md.

If you have any idea or question 🀷

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Spanjer1
Spanjer1

πŸ’» 🚧
Christian Berger
Christian Berger

πŸ’» 🚧 πŸ“–
Willem Jan Glerum
Willem Jan Glerum

πŸ’» πŸ‘€ πŸ“–
Oleg Nenashev
Oleg Nenashev

πŸ‘€
Eric Deandrea
Eric Deandrea

πŸ›
Georgios Andrianakis
Georgios Andrianakis

πŸ’»

This project follows the all-contributors specification. Contributions of any kind welcome!

quarkus-wiremock's People

Contributors

actions-user avatar allcontributors[bot] avatar chberger avatar dependabot[bot] avatar gastaldi avatar geoand avatar gsmet avatar spanjer1 avatar wjglerum avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quarkus-wiremock's Issues

Make WireMock extension for Quarkus an official Dev Service

Congrats with the 1.0.0 release @chberger !

This extension looks like a Dev Service, smells like a DevService, and also behaves and gets configured as a Dev Service. But formally it is not one at the moment. It would be great to make it more official and have it listed on https://quarkus.io/guides/dev-services and within the Quarkus app.

I'd be happy to help with documentation and whatever needed for it

Proposal

Quarkus Dev UI

Right now the extension is not listed as a dev service

image

image

Bug: WireMock config Live reload glitches on Windows

The WireMock config live reload starts working only after the first class reload. It looks like the extension properly registers the reload monitors only after the first Code reload. Or maybe it is a Quarkus glitch.

Reproduction steps

Error: The configuration does not change until the first classes reload

Versions

  • Quarkus Version and BOM: 3.5.3
  • WireMock Extension: 1.0.0

Add support for extensions

Having a way to register extensions would be great, especially ResponseTemplateTransformer for response templating.

WireMock-as-Code adoption?

Hello, in WireMock we are looking for introducing better configuration capabilities, including serving all settings and CLI arguments via a YAML/JSON file, and also providing more YAML support in stub management. I guess such a feature would be really helpful for Quarkus users. Would anyone be interested?

Wiremock for @QuarkusTest and @QuarkusIntagrationTest simultaneously

Hello.

I would like to ask how can I handle Wiremock usage simultaneously for both: @QuarkusTest and @QuarkusIntegrationTest.

Here is simple reproducer: GITHUB

I think that my case is quite simple and straightforward. I'd like to understand how should I properly set properties for native test in my application.properties files (main & test).

Please use wiremock branch in provided reproducer -> then go to test/kotlin/org/acme/GreetingResourceTest and check testHelloEndpoint(). As you can see here, I am registering my client's endpoint for wiremock which url matches the url in ExampleClient.class. So far everything is easy to understand.

This test with @QuarkusTest annotation works properly. There is property
quarkus.rest-client."org.acme.client.ExampleClient".url=http://localhost:${%dev,test.quarkus.wiremock.devservices.port}
set in test/resources/application.properties so wiremock is able to determine correct url for the test.

My issue occurs when I run @QuarkusIntegrationTest (check native-test dir).
Since native env doesn't look for test properties, to make this test passes I had to set exactly the same property as above one in main/resources/application.properties file but unfortunately this approach is obviously bad one (guess I don't have to write why).

So my question is, how can I overcome this problem properly so both tests (native + normal) will use correct url so in result wiremock will be able to determine client's path as expected.

I realise that most probably it isn't any bug but rather my lack of understanding of how native tests work.

Thank you for any advice/feedback for my issue in advance. :)

OutOfMemoryError when using @ConnectWireMock in tests

Regarding documentation -> https://docs.quarkiverse.io/quarkus-wiremock/dev/index.html

we use wiremock with @ConnectWireMock annotation on open base class (kotlin) from which test classes inherit. With more tests fired, we get β€œOutOfMemoryError: Java heap space”.
Screenshot 2024-04-26 at 16 18 40

The problem does not occur if we use QuarkusTestResourceLifecycleManager & @QuarkusTestResource on each class.
Perhaps there is something we forgot about regarding the configuration.

I have prepared a reproducer that illustrates the drastic drop in performance of gradle check between these two approaches.
On the 'main' branch: @ConnectWireMock, on 'with-lifecycle-manager' branch: @QuarkusTestResource -> https://github.com/Tincoquesse/quarkus-wiremock-oom-reproducer

We use the following version of Wiremock:
Screenshot 2024-04-26 at 16 10 14

Quarkus 3.9.1
Gradle 8.6
Java 21

port doesn't seem to be random

I'm not doing any explicit configuration for quarkus.wiremock.devservices.port and it seems to always pick port 8089. This makes it impossible to run dev mode with continuous testing because both server instances pick port 8089.

image

This is the error I get in the dev mode console when i hit r to resume tests:

13:42:45 ERROR [io.qu.test] (Test runner thread) ==================== TEST REPORT #1 ====================
13:42:45 ERROR [io.qu.test] (Test runner thread) Test NarrationServiceTests#narrateFallback() failed 
: java.lang.RuntimeException: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 14 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more

        at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:638)
        at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:722)
        at java.base/java.util.Optional.orElseGet(Optional.java:364)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 14 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more

        at io.quarkus.runner.bootstraptActionImpl.runAugment(AugmentActionImpl.java:334)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:251)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:60)
        at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:224)
        at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:605)
        at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:655)
        ... 1 more
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 14 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more

        at io.quarkus.builder.Execution.run(Execution.java:123)
        at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
        at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:160)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:330)
        ... 6 more
Caused by: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 10 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 11 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 26 more


13:42:45 ERROR [io.qu.test] (Test runner thread) Test ContractVerificationTests#rest-fights - A hello request failed 
: java.lang.RuntimeException: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 14 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more

        at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:638)
        at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:722)
        at java.base/java.util.Optional.orElseGet(Optional.java:364)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
        at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
        at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/javatream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 14 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more

        at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:334)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:251)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:60)
        at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:224)
        at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:605)
        at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:655)
        ... 1 more
Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 14 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more

        at io.quarkus.builder.Execution.run(Execution.java:123)
        at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
        at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:160)
        at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:330)
        ... 6 more
Caused by: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 10 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 11 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 26 more


13:42:45 ERROR [io.qu.test] (Test runner thread) >>>>>>>>>>>>>>>>>>>> Summary: <<<<<<<<<<<<<<<<<<<<
NarrationServiceTests#narrateFallback() java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 14 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more
ContractVerificationTests#rest-fights - A hello request java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:64)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:51)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.RuntimeException: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:198)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8089
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:196)
        ... 14 more
Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more

13:42:45 ERROR [io.qu.test] (Test runner thread) >>>>>>>>>>>>>>>>>>>> 2 TESTS FAILED <<<<<<<<<<<<<<<<<<<<

How to use this in a QuarkusIntegrationTest?

I've read the documentation in https://docs.quarkiverse.io/quarkus-wiremock/dev/index.html#_configuration_retrieval but it doesn't seem the documentation is in-line with how things actually work.

I need to get a grasp on the wiremock port in an integration test. There is no such class called WireMockConfigKey in the library.

Additionally, it seems I need to create a QuarkusTestResourceLifecycleManager which also implements io.quarkus.test.common.DevServicesContext.ContextAware. What's strange though is that when I query the DevServicesContext, like this:

@Override
    public void setIntegrationTestContext(DevServicesContext context) {
      context.devServicesProperties().forEach((k, v) -> System.out.println("%s = %s".formatted()));
    }

I do not see a quarkus.wiremock.devservices.port. Instead I see %dev,test.quarkus.wiremock.devservices.port. This isn't really consistent with how other quarkus dev services work. I've never had to prefix a property with %anything when trying to pull a property from the dev services context.

Furthermore, the example ConfigProvider.getConfig().getValue(WireMockConfigKey.PORT, Integer.class); doesn't work either.

Add support for random port allocation

The extension often fails in the test when trying to allocate a port from higher or lower range, It would be nice if the extension could pick a random free port on startup, e.g. when random passed in the configuration

Sample output

....
Caused by: io.quarkus.runtime.QuarkusBindException: Port(s) already bound: 8081: Address already in use: bind
 at io.quarkus.vertx.http.runtime.VertxHttpRecorder$11.handle([VertxHttpRecorder.java:737](vscode-file://vscode-app/c:/Users/Oleg/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-sandbox/workbench/workbench.html))
 at io.quarkus.vertx.http.runtime.VertxHttpRecorder$11.handle([VertxHttpRecorder.java:718](vscode-file://vscode-app/c:/Users/Oleg/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-sandbox/workbench/workbench.html))
 at io.vertx.core.impl.future.FutureImpl$3.onFailure([FutureImpl.java:153](vscode-file://vscode-app/c:/Users/Oleg/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-sandbox/workbench/workbench.html))
 at io.vertx.core.impl.future.FutureBase.emitFailure([FutureBase.java:75](vscode-file://vscode-app/c:/Users/Oleg/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-sandbox/workbench/workbench.html))
 at io.vertx.core.impl.future.FutureImpl.tryFail([FutureImpl.java:230](vscode-file://vscode-app/c:/Users/Oleg/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-sandbox/workbench/workbench.html))
 at io.vertx.core.impl.future.Mapping.onFailure([Mapping.java:45](vscode-file://vscode-app/c:/Users/Oleg/AppData/Local/Programs/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-sandbox/workbench/workbench.html))

RFC: Docs page for listing guides and demos

There are quite a lot of demos and blogs on Quarkus and WireMock that describe how to use them together. The problem is that not all of them use this extension, and instead apply WireMock directly. Some already use WireMock on Testcontainers, including the Quarkus team itself. It would be nice to somehow group the materials and list them somewhere on an Antora documentation page.

I would be happy to contribute it if someone could help with defining the right structure for that

References from my notes

Collision between @QuarkusTest and @QuarkusIntegrationTest random ports

I am currently testing my new demo, and it looks like the port is not so random with Gradle Quarkus Plugin when both normal and integration tests are being run. Disabling Integration tests resolves the issues https://github.com/oleg-nenashev/gradle-quarkus-plugin-demo

Expected behavior

Port allocations between common and integration tests do not clash

Actual Behavior

Config (supposedly random ports):

# Service destination
%prod.quarkus.rest-client.hackernews-api-server.url=https://hacker-news.firebaseio.com/v0

# WireMock Dev Service (%dev and %test scope)
%dev.quarkus.wiremock.devservices.enabled=true
%dev.quarkus.wiremock.devservices.reload=true
%dev.quarkus.wiremock.devservices.files-mapping=src/test/resources
%dev.quarkus.wiremock.devservices.global-response-templating=false
%test.quarkus.wiremock.devservices.enabled=true
%test.quarkus.wiremock.devservices.reload=false
%test.quarkus.wiremock.devservices.files-mapping=src/test/resources
%test.quarkus.wiremock.devservices.global-response-templating=false

# For tests and demos
%dev.quarkus.log.level=INFO
%test.quarkus.log.level=INFO
%dev.quarkus.log.category."io.quarkiverse".level=DEBUG
%test.quarkus.log.category."io.quarkiverse".level=DEBUG

Output:

> Task :test FAILED

WireMockDevServiceResourceTest > testBestStories() FAILED
    java.lang.RuntimeException: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
        [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: com.github.tomakehurst.wiremock.common.FatalStartupException: java.io.IOException: Failed to bind to /0.0.0.0:52776
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:103)
        at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:76)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:849)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:840)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
    Caused by: com.github.tomakehurst.wiremock.common.FatalStartupException: java.io.IOException: Failed to bind to /0.0.0.0:52776
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:206)
        at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:164)
        ... 13 more
    Caused by: java.io.IOException: Failed to bind to /0.0.0.0:52776
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:344)
        at wiremock.org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:304)
        at wiremock.org.eclipse.jetty.server.Server.lambda$doStart$0(Server.java:402)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
        at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
        at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
        at wiremock.org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at wiremock.org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
        at com.github.tomakehurst.wiremock.jetty.JettyHttpServer.start(JettyHttpServer.java:201)
        ... 14 more
    Caused by: java.net.BindException: Address already in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:555)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:337)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at wiremock.org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:339)
        ... 29 more
        at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:638)
        at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:722)
        at java.base/java.util.Optional.orElseGet(Optional.java:364)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

        Caused by:
        java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
                [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: com.github.tomakehurst.wiremock.common.FatalStartupException: com.github.tomakehurst.wiremock.common.FatalStartupException: java.io.IOException: Failed to bind to /0.0.0.0:52776
                at com.github.tomakehurst.wiremock.WireMockServer.start(WireMockServer.java:166)

Quarkus 3.10 and 1.3.2

On Java 17, the following error happens. It is similar to quarkusio/quarkus#30346 and can be reproduced in oleg-nenashev/gradle-quarkus-plugin-demo#36

* What went wrong:
Execution failed for task ':quarkusAppPartsBuild'.
> There was a failure while executing work items
   > A failure occurred while executing io.quarkus.gradle.tasks.worker.BuildWorker
      > io.quarkus.builder.BuildException: Build failure: Build failed due to errors
                [error]: Build step io.quarkiverse.wiremock.devservice.WireMockServerProcessor#setup threw an exception: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
                at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
                at com.github.tomakehurst.wiremock.common.xml.Xml.optimizeFactoriesLoading(Xml.java:50)
                at com.github.tomakehurst.wiremock.core.WireMockApp.<init>(WireMockApp.java:77)
                at com.github.tomakehurst.wiremock.WireMockServer.<init>(WireMockServer.java:74)
                at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.startWireMockDevService(WireMockServerProcessor.java:116)
                at io.quarkiverse.wiremock.devservice.WireMockServerProcessor.setup(WireMockServerProcessor.java:77)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.base/java.lang.reflect.Method.invoke(Method.java:568)
                at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:858)
                at io.quarkus.builder.BuildContext.run(BuildContext.java:282)
                at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
                at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
                at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
                at java.base/java.lang.Thread.run(Thread.java:840)
                at org.jboss.threads.JBossThread.run(JBossThread.java:501)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.