Spring Cloud Contract Stub Runner : how to configure Wiremock server?

4.4k views Asked by At
package com.example.stubrunner;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.contract.stubrunner.server.EnableStubRunnerServer;
import org.springframework.cloud.contract.wiremock.WireMockConfigurationCustomizer;
import org.springframework.context.annotation.Bean;


@SpringBootApplication
@EnableStubRunnerServer
public class StubRunnerApplication {

    public static void main(String[] args) {
        SpringApplication.run(StubRunnerApplication.class, args);
    }


    @Bean
    public WireMockConfigurationCustomizer optionsCustomizer() {

        WireMockConfigurationCustomizer customizer = new WireMockConfigurationCustomizer() {
            @Override
            public void customize(com.github.tomakehurst.wiremock.core.WireMockConfiguration config) {
                config.jettyHeaderBufferSize(16384);
            }
        };

        return customizer;
    }

}

Above customizer bean does not seem to have any effect. This feature has not much documentation. With security token headers Wiremock's (jettty) default value is just too little.

I used start.spring.io with (current) defaults: spring boot 2.5.5. and spring cloud Hoxton.SR3.

java -jar wiremock-standalone-2.26.3.jar --jetty-header-buffer-size 16384

works just fine.

EDIT :

package com.example.wiremockrunnerlatest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.contract.stubrunner.server.EnableStubRunnerServer;
import org.springframework.cloud.contract.stubrunner.spring.AutoConfigureStubRunner;

@SpringBootApplication
@EnableStubRunnerServer
@AutoConfigureStubRunner(httpServerStubConfigurer = HeaderSizeConfigurer.class)
public class WiremockRunnerLatestApplication {

    public static void main(String[] args) {
        SpringApplication.run(WiremockRunnerLatestApplication.class, args);
    }

}

... and then :

public class HeaderSizeConfigurer extends WireMockHttpServerStubConfigurer {

    @Override
    public WireMockConfiguration configure(WireMockConfiguration httpStubConfiguration, HttpServerStubConfiguration httpServerStubConfiguration) {

        return httpStubConfiguration.jettyHeaderBufferSize(16384);
    }
}
1

There are 1 answers

0
cherish sham On

Have you tried using @AutoConfigureStubRunner annotation?

Just add below annotation in your tests:

@AutoConfigureStubRunner(
    stubsMode = StubRunnerProperties.StubsMode.CLASSPATH,
    ids = "com.org:servicename:+:stubs")

Here stubsmode is classpath which means that stubs would be available in classpath.

to do that add:

testCompile("com.org:servicename:+:stubs") { transitive = false }

in your build if your using gradle or add equivalient from maven. This will download the application automatically from remote and configures the wiremock server for stubs to be available.

complete configuration to run a spring boot test is like:

@RunWith(SpringRunner.class)
@SpringBootTest(
    webEnvironment = SpringBootTest.WebEnvironment.MOCK,
    classes = HiltiIntegrationApplication.class)
@AutoConfigureStubRunner(
    stubsMode = StubRunnerProperties.StubsMode.CLASSPATH,
    ids = "com.ict:organization-management:+:stubs")
@DirtiesContext 

Hope this helps!