package org.neo4j.smack.pipeline.http;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.HashSet;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.junit.Test;
import org.neo4j.smack.gcfree.MutableString;
import org.neo4j.smack.pipeline.http.HttpHeaderContainer;
import org.neo4j.smack.pipeline.http.HttpHeaderDecoder;
import org.neo4j.smack.pipeline.http.HttpHeaderName;
import org.neo4j.smack.pipeline.http.HttpHeaderNames;
import org.neo4j.smack.pipeline.http.HttpTokens;
public class TestHttpHeaderDecoder {
@Test
public void testDecodeSingleHeader() throws Exception
{
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
buf.writeBytes("Content-Length: 0".getBytes("ASCII"));
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
HttpHeaderDecoder decoder = new HttpHeaderDecoder(new HashSet<HttpHeaderName>() {
private static final long serialVersionUID = 1L;
{
add(HttpHeaderNames.CONTENT_LENGTH);
}
}, 4000);
HttpHeaderContainer headers = new HttpHeaderContainer();
decoder.decode(buf, headers);
assertThat(headers.getHeader(HttpHeaderNames.CONTENT_LENGTH), is(new MutableString("0")));
}
@Test
public void testDecodeMultipleHeaders() throws Exception
{
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
buf.writeBytes("Content-Length: 0".getBytes("ASCII"));
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
buf.writeBytes("Accept : stuff".getBytes("ASCII"));
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
buf.writeBytes("Content-Length: 4".getBytes("ASCII"));
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
HttpHeaderDecoder decoder = new HttpHeaderDecoder(new HashSet<HttpHeaderName>() {
private static final long serialVersionUID = 1L;
{
add(HttpHeaderNames.CONTENT_LENGTH);
add(HttpHeaderNames.ACCEPT);
}
}, 4000);
HttpHeaderContainer headers = new HttpHeaderContainer();
decoder.decode(buf, headers);
assertThat(headers.getHeaders(HttpHeaderNames.CONTENT_LENGTH).get(0), is(new MutableString("0")));
assertThat(headers.getHeaders(HttpHeaderNames.CONTENT_LENGTH).get(1), is(new MutableString("4")));
assertThat(headers.getHeader(HttpHeaderNames.ACCEPT), is(new MutableString("stuff")));
}
@Test
public void testDecodeMultipleMultilineHeaders() throws Exception
{
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
buf.writeBytes("Content-Length: this".getBytes("ASCII"));
buf.writeBytes(" is a multiline string".getBytes("ASCII"));
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
buf.writeBytes("Accept : stuff".getBytes("ASCII"));
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
HttpHeaderDecoder decoder = new HttpHeaderDecoder(new HashSet<HttpHeaderName>() {
private static final long serialVersionUID = 1L;
{
add(HttpHeaderNames.CONTENT_LENGTH);
add(HttpHeaderNames.ACCEPT);
}
}, 4000);
HttpHeaderContainer headers = new HttpHeaderContainer();
decoder.decode(buf, headers);
assertThat(headers.getHeaders(HttpHeaderNames.CONTENT_LENGTH).get(0), is(new MutableString("this is a multiline string")));
assertThat(headers.getHeader(HttpHeaderNames.ACCEPT), is(new MutableString("stuff")));
}
@Test
public void testDecodeHeadersOnlySeparatedByLinefeed() throws Exception
{
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
buf.writeBytes("Accept : stuff".getBytes("ASCII"));
buf.writeByte(HttpTokens.LF);
buf.writeByte(HttpTokens.CR);
buf.writeByte(HttpTokens.LF);
HttpHeaderDecoder decoder = new HttpHeaderDecoder(new HashSet<HttpHeaderName>() {
private static final long serialVersionUID = 1L;
{
add(HttpHeaderNames.CONTENT_LENGTH);
add(HttpHeaderNames.ACCEPT);
}
}, 4000);
HttpHeaderContainer headers = new HttpHeaderContainer();
decoder.decode(buf, headers);
assertThat(headers.getHeader(HttpHeaderNames.ACCEPT), is(new MutableString("stuff")));
}
}