blob: 3b51e10858c67f5571d2b43af73884c0d0287add [file] [log] [blame]
/*
*/
package org.apache.tomcat.lite.http;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import junit.framework.TestCase;
import org.apache.tomcat.lite.TestMain;
import org.apache.tomcat.lite.http.HttpConnectionPool.RemoteServer;
import org.apache.tomcat.lite.io.IOBuffer;
import org.apache.tomcat.lite.io.SocketConnector;
public class SpdyTest extends TestCase {
HttpConnector http11Con = TestMain.shared().getClient();
static HttpConnector spdyCon = HttpClient.newClient();
static HttpConnector spdyConSsl = HttpClient.newClient();
HttpConnector memSpdyCon = new HttpConnector(null);
public void testClient() throws IOException {
HttpRequest req =
spdyCon.request("http://localhost:8802/echo/test1");
// Force SPDY - no negotiation
req.setProtocol("SPDY/1.0");
HttpResponse res = req.waitResponse();
assertEquals(200, res.getStatus());
//assertEquals("", res.getHeader(""));
BufferedReader reader = res.getReader();
String line1 = reader.readLine();
//assertEquals("", line1);
}
public void testSslClient() throws IOException {
HttpRequest req =
spdyConSsl.request("http://localhost:8443/echo/test1");
// Enable SSL for the connection.
// TODO: this must be done on the first request, all will be
// encrypted.
req.setSecure(true);
// Force SPDY - no negotiation
req.setProtocol("SPDY/1.0");
HttpResponse res = req.waitResponse();
assertEquals(200, res.getStatus());
//assertEquals("", res.getHeader(""));
res.setReadTimeout(2000);
BufferedReader reader = res.getReader();
String line1 = reader.readLine();
//assertEquals("", line1);
}
// Initial frame generated by Chrome
public void testParse() throws IOException {
InputStream is =
getClass().getClassLoader().getResourceAsStream("org/apache/tomcat/lite/http/spdyreq0.bin");
IOBuffer iob = new IOBuffer();
iob.append(is);
SpdyConnection con = new SpdyConnection(memSpdyCon, new RemoteServer());
// By default it has a dispatcher buit-in
con.serverMode = true;
con.dataReceived(iob);
HttpChannel spdyChannel = con.channels.get(1);
assertEquals(1, con.lastFrame.version);
assertEquals(1, con.lastFrame.type);
assertEquals(1, con.lastFrame.flags);
assertEquals(417, con.lastFrame.length);
// TODO: test req, headers
HttpRequest req = spdyChannel.getRequest();
assertTrue(req.getHeader("accept").indexOf("application/xml") >= 0);
}
// Initial frame generated by Chrome
public void testParseCompressed() throws IOException {
InputStream is =
getClass().getClassLoader().getResourceAsStream("org/apache/tomcat/lite/http/spdyreqCompressed.bin");
IOBuffer iob = new IOBuffer();
iob.append(is);
SpdyConnection con = new SpdyConnection(memSpdyCon, new RemoteServer());
// By default it has a dispatcher buit-in
con.serverMode = true;
con.dataReceived(iob);
HttpChannel spdyChannel = con.channels.get(1);
assertEquals(1, con.lastFrame.version);
assertEquals(1, con.lastFrame.type);
assertEquals(1, con.lastFrame.flags);
// TODO: test req, headers
HttpRequest req = spdyChannel.getRequest();
assertTrue(req.getHeader("accept").indexOf("application/xml") >= 0);
}
// Does int parsing works ?
public void testLargeInt() throws Exception {
IOBuffer iob = new IOBuffer();
iob.append(0x80);
iob.append(0x01);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
SpdyConnection con = new SpdyConnection(memSpdyCon, new RemoteServer());
con.dataReceived(iob);
assertEquals(1, con.currentInFrame.version);
assertEquals(0xFFFF, con.currentInFrame.type);
assertEquals(0xFF, con.currentInFrame.flags);
assertEquals(0xFFFFFF, con.currentInFrame.length);
}
// Does int parsing works ?
public void testBad() throws Exception {
IOBuffer iob = new IOBuffer();
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
iob.append(0xFF);
SpdyConnection con = new SpdyConnection(memSpdyCon, new RemoteServer());
con.dataReceived(iob);
assertEquals(1, con.streamErrors.get());
}
}