package org.jooby.issues;
import java.io.IOException;
import java.io.InputStream;
import org.jooby.test.ServerFeature;
import org.junit.Test;
import com.google.common.io.ByteStreams;
public class Issue542b extends ServerFeature {
{
assets("/webjars/**", "/META-INF/resources/webjars/{0}");
}
@Test
public void shouldGetFullContent() throws Exception {
request()
.get("/webjars/jquery/2.1.3/jquery.js")
.expect(200)
.header("Content-Length", "247387");
}
@Test
public void shouldGetPartialContent() throws Exception {
request()
.get("/webjars/jquery/2.1.3/jquery.js")
.header("Range", "bytes=0-99")
.expect(206)
.expect(bytes(0, 100))
.header("Accept-Ranges", "bytes")
.header("Content-Range", "bytes 0-99/247387")
.header("Content-Length", "100");
request()
.get("/webjars/jquery/2.1.3/jquery.js")
.header("Range", "bytes=100-199")
.expect(206)
.expect(bytes(100, 200))
.header("Accept-Ranges", "bytes")
.header("Content-Range", "bytes 100-199/247387")
.header("Content-Length", "100");
}
@Test
public void shouldGetPartialContentByPrefix() throws Exception {
request()
.get("/webjars/jquery/2.1.3/jquery.js")
.header("Range", "bytes=0-")
.expect(206)
.expect(bytes(0, 247387))
.header("Accept-Ranges", "bytes")
.header("Content-Range", "bytes 0-247386/247387")
.header("Content-Length", "247387");
}
@Test
public void shouldGetPartialContentBySuffix() throws Exception {
request()
.get("/webjars/jquery/2.1.3/jquery.js")
.header("Range", "bytes=-100")
.expect(206)
.expect(bytes(247387 - 100, 247387))
.header("Accept-Ranges", "bytes")
.header("Content-Range", "bytes 247287-247386/247387")
.header("Content-Length", "100");
}
@Test
public void shouldGet416() throws Exception {
request()
.get("/webjars/jquery/2.1.3/jquery.js")
.header("Range", "bytes=200-100")
.expect(416)
.header("Content-Range", "bytes */247387");
}
private byte[] bytes(final int offset, final int len) throws IOException {
try (InputStream stream = getClass()
.getResourceAsStream("/META-INF/resources/webjars/jquery/2.1.3/jquery.js")) {
byte[] range = new byte[len - offset];
byte[] bytes = ByteStreams.toByteArray(stream);
System.arraycopy(bytes, offset, range, 0, len - offset);
return range;
}
}
}