package org.mockserver.codec;
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpHeaders;
import org.junit.Before;
import org.junit.Test;
import org.mockserver.model.ConnectionOptions;
import org.mockserver.model.HttpResponse;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.core.Is.is;
import static org.mockserver.model.BinaryBody.binary;
import static org.mockserver.model.HttpResponse.response;
import static org.mockserver.model.JsonBody.json;
import static org.mockserver.model.StringBody.exact;
/**
* @author jamesdbloom
*/
public class MockServerResponseEncoderContentLengthTest {
private MockServerResponseEncoder mockServerResponseEncoder;
private List<Object> output;
private HttpResponse httpResponse;
@Before
public void setupFixture() {
mockServerResponseEncoder = new MockServerResponseEncoder();
output = new ArrayList<Object>();
httpResponse = response();
}
@Test
public void shouldSetContentLengthForStringBody() {
// given - a request
String body = "some_content";
httpResponse = response().withBody(exact(body));
// when
mockServerResponseEncoder.encode(null, httpResponse, output);
// then
HttpHeaders headers = ((FullHttpResponse) output.get(0)).headers();
assertThat(headers.getAll("Content-Length"), containsInAnyOrder("" + body.length()));
}
@Test
public void shouldSetContentLengthForBinaryBody() {
// given - a request
byte[] body = "some_binary_content".getBytes();
httpResponse = response().withBody(binary(body));
// when
mockServerResponseEncoder.encode(null, httpResponse, output);
// then
HttpHeaders headers = ((FullHttpResponse) output.get(0)).headers();
assertThat(headers.getAll("Content-Length"), containsInAnyOrder("" + body.length));
}
@Test
public void shouldSetContentLengthForJsonBody() {
// given - a request
String body = "{ \"message\": \"some_json_content\" }";
httpResponse = response().withBody(json(body));
// when
mockServerResponseEncoder.encode(null, httpResponse, output);
// then
HttpHeaders headers = ((FullHttpResponse) output.get(0)).headers();
assertThat(headers.getAll("Content-Length"), containsInAnyOrder("" + body.length()));
}
@Test
public void shouldSetContentLengthForNullBody() {
// given - a request
httpResponse = response();
// when
mockServerResponseEncoder.encode(null, httpResponse, output);
// then
HttpHeaders headers = ((FullHttpResponse) output.get(0)).headers();
assertThat(headers.getAll("Content-Length"), containsInAnyOrder("0"));
}
@Test
public void shouldSetContentLengthForEmptyBody() {
// given - a request
httpResponse = response();
// when
mockServerResponseEncoder.encode(null, httpResponse, output);
// then
HttpHeaders headers = ((FullHttpResponse) output.get(0)).headers();
assertThat(headers.getAll("Content-Length"), containsInAnyOrder("0"));
}
@Test
public void shouldSuppressContentLengthViaConnectionOptions() {
// given - a request
httpResponse = response()
.withBody("some_content")
.withConnectionOptions(
new ConnectionOptions()
.withSuppressContentLengthHeader(true)
);
// when
mockServerResponseEncoder.encode(null, httpResponse, output);
// then
HttpHeaders headers = ((FullHttpResponse) output.get(0)).headers();
assertThat(headers.contains("Content-Length"), is(false));
}
@Test
public void shouldOverrideContentLengthViaConnectionOptions() {
// given - a request
httpResponse = response()
.withBody("some_content")
.withConnectionOptions(
new ConnectionOptions()
.withContentLengthHeaderOverride(50)
);
// when
mockServerResponseEncoder.encode(null, httpResponse, output);
// then
HttpHeaders headers = ((FullHttpResponse) output.get(0)).headers();
assertThat(headers.getAll("Content-Length"), containsInAnyOrder("50"));
}
}