2929import org .springframework .boot .actuate .endpoint .http .ActuatorMediaType ;
3030import org .springframework .context .ConfigurableApplicationContext ;
3131import org .springframework .core .ParameterizedTypeReference ;
32+ import org .springframework .http .HttpMethod ;
3233import org .springframework .http .HttpStatus ;
3334import org .springframework .http .MediaType ;
3435import org .springframework .test .web .reactive .server .EntityExchangeResult ;
3536import org .springframework .test .web .reactive .server .WebTestClient ;
3637import com .github .tomakehurst .wiremock .common .FileSource ;
38+ import com .github .tomakehurst .wiremock .core .WireMockConfiguration ;
3739import com .github .tomakehurst .wiremock .extension .Parameters ;
3840import com .github .tomakehurst .wiremock .extension .ResponseTransformer ;
3941import com .github .tomakehurst .wiremock .http .Fault ;
4951import static com .github .tomakehurst .wiremock .client .WireMock .get ;
5052import static com .github .tomakehurst .wiremock .client .WireMock .getRequestedFor ;
5153import static com .github .tomakehurst .wiremock .client .WireMock .ok ;
54+ import static com .github .tomakehurst .wiremock .client .WireMock .options ;
5255import static com .github .tomakehurst .wiremock .client .WireMock .post ;
5356import static com .github .tomakehurst .wiremock .client .WireMock .postRequestedFor ;
5457import static com .github .tomakehurst .wiremock .client .WireMock .serverError ;
5558import static com .github .tomakehurst .wiremock .client .WireMock .urlEqualTo ;
56- import static com .github .tomakehurst .wiremock .core .WireMockConfiguration .options ;
5759import static de .codecentric .boot .admin .server .utils .MediaType .ACTUATOR_V2_MEDIATYPE ;
5860import static org .assertj .core .api .Assertions .assertThat ;
61+ import static org .springframework .http .HttpHeaders .ALLOW ;
5962import static org .springframework .http .HttpHeaders .CONTENT_TYPE ;
6063
6164public abstract class AbstractInstancesProxyControllerIntegrationTest {
6265 private static final String ACTUATOR_CONTENT_TYPE = ActuatorMediaType .V2_JSON + ";charset=UTF-8" ;
6366 private static ParameterizedTypeReference <Map <String , Object >> RESPONSE_TYPE = new ParameterizedTypeReference <Map <String , Object >>() {
6467 };
6568 @ Rule
66- public WireMockRule wireMock = new WireMockRule (options ().dynamicPort ().extensions (new ConnectionCloseExtension ()));
69+ public WireMockRule wireMock = new WireMockRule (WireMockConfiguration .options ()
70+ .dynamicPort ()
71+ .extensions (new ConnectionCloseExtension ()));
6772
6873 private static WebTestClient client ;
6974 private static String instanceId ;
@@ -88,31 +93,32 @@ public void setUpClient(ConfigurableApplicationContext context) {
8893 String managementUrl = "http://localhost:" + wireMock .port () + "/mgmt" ;
8994 //@formatter:off
9095 String actuatorIndex = "{ \" _links\" : { " +
96+ "\" env\" : { \" href\" : \" " + managementUrl + "/env\" , \" templated\" : false }," +
9197 "\" test\" : { \" href\" : \" " + managementUrl + "/test\" , \" templated\" : false }," +
9298 "\" invalid\" : { \" href\" : \" " + managementUrl + "/invalid\" , \" templated\" : false }," +
9399 "\" timeout\" : { \" href\" : \" " + managementUrl + "/timeout\" , \" templated\" : false }" +
94100 " } }" ;
95101 //@formatter:on
96- wireMock .stubFor (get (urlEqualTo ("/mgmt/health" )).willReturn (ok ("{ \" status\" : \" UP\" }" ).withHeader (
97- CONTENT_TYPE ,
102+ wireMock .stubFor (get (urlEqualTo ("/mgmt/health" )).willReturn (ok ("{ \" status\" : \" UP\" }" ).withHeader (CONTENT_TYPE ,
98103 ActuatorMediaType .V2_JSON
99104 )));
100- wireMock .stubFor (get (urlEqualTo ("/mgmt/info" )).willReturn (ok ("{ }" ).withHeader (
101- CONTENT_TYPE ,
105+ wireMock .stubFor (get (urlEqualTo ("/mgmt/info" )).willReturn (ok ("{ }" ).withHeader (CONTENT_TYPE ,
102106 ACTUATOR_CONTENT_TYPE
103107 )));
104- wireMock .stubFor (get (urlEqualTo ("/mgmt" )).willReturn (ok (actuatorIndex ).withHeader (
105- CONTENT_TYPE ,
108+ wireMock .stubFor (options (urlEqualTo ("/mgmt/env" )).willReturn (ok ().withHeader (ALLOW ,
109+ HttpMethod .HEAD .name (),
110+ HttpMethod .GET .name (),
111+ HttpMethod .OPTIONS .name ()
112+ )));
113+ wireMock .stubFor (get (urlEqualTo ("/mgmt" )).willReturn (ok (actuatorIndex ).withHeader (CONTENT_TYPE ,
106114 ACTUATOR_CONTENT_TYPE
107115 )));
108116 wireMock .stubFor (get (urlEqualTo ("/mgmt/invalid" )).willReturn (aResponse ().withFault (Fault .EMPTY_RESPONSE )));
109117 wireMock .stubFor (get (urlEqualTo ("/mgmt/timeout" )).willReturn (ok ().withFixedDelay (10000 )));
110- wireMock .stubFor (get (urlEqualTo ("/mgmt/test" )).willReturn (ok ("{ \" foo\" : \" bar\" }" ).withHeader (
111- CONTENT_TYPE ,
118+ wireMock .stubFor (get (urlEqualTo ("/mgmt/test" )).willReturn (ok ("{ \" foo\" : \" bar\" }" ).withHeader (CONTENT_TYPE ,
112119 ACTUATOR_CONTENT_TYPE
113120 )));
114- wireMock .stubFor (get (urlEqualTo ("/mgmt/test/has%20spaces" )).willReturn (ok ("{ \" foo\" : \" bar-with-spaces\" }" ).withHeader (
115- CONTENT_TYPE ,
121+ wireMock .stubFor (get (urlEqualTo ("/mgmt/test/has%20spaces" )).willReturn (ok ("{ \" foo\" : \" bar-with-spaces\" }" ).withHeader (CONTENT_TYPE ,
116122 ACTUATOR_CONTENT_TYPE
117123 )));
118124 wireMock .stubFor (post (urlEqualTo ("/mgmt/test" )).willReturn (ok ()));
@@ -162,6 +168,15 @@ public void should_return_status_502_504() {
162168
163169 @ Test
164170 public void should_forward_requests () {
171+ client .options ()
172+ .uri ("/instances/{instanceId}/actuator/env" , instanceId )
173+ .accept (ACTUATOR_V2_MEDIATYPE )
174+ .exchange ()
175+ .expectStatus ()
176+ .isEqualTo (HttpStatus .OK )
177+ .expectHeader ()
178+ .valueEquals (ALLOW , HttpMethod .HEAD .name (), HttpMethod .GET .name (), HttpMethod .OPTIONS .name ());
179+
165180 client .get ()
166181 .uri ("/instances/{instanceId}/actuator/test" , instanceId )
167182 .accept (ACTUATOR_V2_MEDIATYPE )
0 commit comments