From c27e675ba8702594cf4f102de383b15c0aba6945 Mon Sep 17 00:00:00 2001 From: Lari Hotari Date: Tue, 8 Sep 2020 14:24:30 +0300 Subject: [PATCH] Support multiple WireMockConfigurationCustomizers (#1501) - fixes #1500 --- .../wiremock/WireMockConfiguration.java | 8 +- ...kConfigurationMultipleCustomizerTests.java | 81 +++++++++++++++++++ 2 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationMultipleCustomizerTests.java diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java index 85f1601622..2dcef0d704 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockConfiguration.java @@ -33,6 +33,7 @@ import com.github.tomakehurst.wiremock.stubbing.StubMapping; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -78,7 +79,7 @@ public class WireMockConfiguration implements SmartLifecycle { private Options options; @Autowired(required = false) - private WireMockConfigurationCustomizer customizer; + private ObjectProvider customizers; @Autowired private DefaultListableBeanFactory beanFactory; @@ -106,8 +107,9 @@ public class WireMockConfiguration implements SmartLifecycle { factory.extensions(new ResponseTemplateTransformer(false)); } this.options = factory; - if (this.customizer != null) { - this.customizer.customize(factory); + if (this.customizers != null) { + this.customizers.orderedStream() + .forEach(customizer -> customizer.customize(factory)); } } reRegisterServerWithResetMappings(); diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationMultipleCustomizerTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationMultipleCustomizerTests.java new file mode 100644 index 0000000000..caa3d1c433 --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationMultipleCustomizerTests.java @@ -0,0 +1,81 @@ +/* + * Copyright 2013-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.contract.wiremock; + +import com.github.tomakehurst.wiremock.core.WireMockConfiguration; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = { WiremockTestsApplication.class, + AutoConfigureWireMockConfigurationMultipleCustomizerTests.Config.class }, + webEnvironment = WebEnvironment.NONE) +@AutoConfigureWireMock(port = 0) +public class AutoConfigureWireMockConfigurationMultipleCustomizerTests { + + @Autowired + private Config config; + + @Test + public void bothCustomizersHaveBeenExecuted() throws Exception { + assertThat(this.config.isExecuted()).isTrue(); + } + + @Configuration + protected static class Config { + + boolean executedCustomizer1 = false; + + boolean executedCustomizer2 = false; + + @Bean + WireMockConfigurationCustomizer optionsCustomizer1() { + return new WireMockConfigurationCustomizer() { + @Override + public void customize(WireMockConfiguration options) { + Config.this.executedCustomizer1 = true; + } + }; + } + + @Bean + WireMockConfigurationCustomizer optionsCustomizer2() { + return new WireMockConfigurationCustomizer() { + @Override + public void customize(WireMockConfiguration options) { + Config.this.executedCustomizer2 = true; + } + }; + } + + public boolean isExecuted() { + return this.executedCustomizer1 && this.executedCustomizer2; + } + + } + +}