diff --git a/consumer/junit5/src/test/java/au/com/dius/pact/consumer/junit5/HeadMethodTest.java b/consumer/junit5/src/test/java/au/com/dius/pact/consumer/junit5/HeadMethodTest.java new file mode 100644 index 000000000..8269f8933 --- /dev/null +++ b/consumer/junit5/src/test/java/au/com/dius/pact/consumer/junit5/HeadMethodTest.java @@ -0,0 +1,38 @@ +package au.com.dius.pact.consumer.junit5; + +import au.com.dius.pact.consumer.MockServer; +import au.com.dius.pact.consumer.dsl.PactBuilder; +import au.com.dius.pact.core.model.V4Pact; +import au.com.dius.pact.core.model.annotations.Pact; +import org.apache.hc.client5.http.fluent.Request; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; + +import java.io.IOException; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; + +@ExtendWith(PactConsumerTestExt.class) +@PactTestFor(providerName = "HeadMethodProvider") +public class HeadMethodTest { + @Pact(consumer = "HeadMethodConsumer") + public V4Pact pact(PactBuilder builder) { + return builder + .expectsToReceiveHttpInteraction("HEAD request", + interaction -> interaction + .withRequest(request -> request.path("/v1/my/path").method("HEAD")) + .willRespondWith(response -> response.status(200))) + .toPact(); + } + + @Test + void testPact(MockServer mockServer) throws IOException { + ClassicHttpResponse httpResponse = (ClassicHttpResponse) Request.head(mockServer.getUrl() + "/v1/my/path") + .execute() + .returnResponse(); + assertThat(httpResponse.getCode(), is(equalTo(200))); + } +} diff --git a/consumer/src/main/kotlin/au/com/dius/pact/consumer/MockHttpServer.kt b/consumer/src/main/kotlin/au/com/dius/pact/consumer/MockHttpServer.kt index 6696791b0..02f5d0be6 100755 --- a/consumer/src/main/kotlin/au/com/dius/pact/consumer/MockHttpServer.kt +++ b/consumer/src/main/kotlin/au/com/dius/pact/consumer/MockHttpServer.kt @@ -273,7 +273,9 @@ abstract class BaseJdkMockServer( private fun pactResponseToHttpExchange(response: IResponse, exchange: HttpExchange) { val headers = response.headers - exchange.responseHeaders.putAll(headers) + if (headers.isNotEmpty()) { + exchange.responseHeaders.putAll(headers) + } if (config.addCloseHeader) { exchange.responseHeaders.add("Connection", "close") } @@ -283,7 +285,7 @@ abstract class BaseJdkMockServer( exchange.sendResponseHeaders(response.status, bytes.size.toLong()) exchange.responseBody.write(bytes) } else { - exchange.sendResponseHeaders(response.status, 0) + exchange.sendResponseHeaders(response.status, -1) } exchange.close() }