package com.limegroup.gnutella.uploader; import java.io.IOException; import java.net.InetSocketAddress; import java.util.List; import java.util.Set; import junit.framework.Test; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.HttpVersion; import org.apache.http.message.BasicHttpRequest; import org.apache.http.message.BasicHttpResponse; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.limewire.io.GUID; import org.limewire.io.IpPort; import org.limewire.security.SecurityToken; import org.limewire.util.BaseTestCase; import com.google.inject.Singleton; import com.limegroup.gnutella.MessageListener; import com.limegroup.gnutella.MessageRouter; import com.limegroup.gnutella.ReplyHandler; import com.limegroup.gnutella.Response; import com.limegroup.gnutella.connection.RoutedConnection; import com.limegroup.gnutella.filters.SpamFilter; import com.limegroup.gnutella.guess.GUESSEndpoint; import com.limegroup.gnutella.messagehandlers.MessageHandler; import com.limegroup.gnutella.messages.Message; import com.limegroup.gnutella.messages.PingRequest; import com.limegroup.gnutella.messages.PushRequest; import com.limegroup.gnutella.messages.QueryReply; import com.limegroup.gnutella.messages.QueryRequest; import com.limegroup.gnutella.messages.vendor.InspectionRequest; import com.limegroup.gnutella.messages.vendor.ReplyNumberVendorMessage; import com.limegroup.gnutella.routing.QueryRouteTable; public class HttpPushRequestHandlerTest extends BaseTestCase { private HttpPushRequestHandler requestHandler; private HttpContext context; private HTTPUploader uploader; private StubMessageRouter messageRouter; public HttpPushRequestHandlerTest(String name) { super(name); } public static Test suite() { return buildTestSuite(HttpPushRequestHandlerTest.class); } @Override protected void setUp() throws Exception { messageRouter = new StubMessageRouter(); MockHTTPUploadSessionManager sessionManager = new MockHTTPUploadSessionManager(); uploader = new HTTPUploader("filename", new HTTPUploadSession(null, null, null)) { @Override public void setState(UploadStatus state) { // avoid assertion errors } }; sessionManager.uploader = uploader; requestHandler = new HttpPushRequestHandler(sessionManager, messageRouter); context = new BasicHttpContext(null); } public void testHandleMalformedRequest() throws Exception { HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); // no parameters HttpRequest request = new BasicHttpRequest("GET", "/push/proxy"); requestHandler.handle(request, response, context); assertNull(messageRouter.push); assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusLine() .getStatusCode()); // no node header request = new BasicHttpRequest("GET", "/push/proxy/?ServerID=6MTB46XQ3PTC3QVZRDW6PAFQAA"); requestHandler.handle(request, response, context); assertNull(messageRouter.push); assertEquals(HttpStatus.SC_BAD_REQUEST, response.getStatusLine() .getStatusCode()); } public void testHandleValidRequest() throws Exception { HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, ""); BasicHttpRequest request = new BasicHttpRequest("GET", "/push/proxy/?ServerID=6MTB46XQ3PTC3QVZRDW6PAFQAA"); request.addHeader("X-Node", "localhost:4567"); requestHandler.handle(request, response, context); assertNotNull(messageRouter.push); assertEquals(HttpStatus.SC_ACCEPTED, response.getStatusLine() .getStatusCode()); } @Singleton private class StubMessageRouter implements MessageRouter { private PushRequest push; protected List<QueryReply> createQueryReply(byte[] guid, byte ttl, long speed, Response[] res, byte[] clientGUID, boolean busy, boolean uploaded, boolean measuredSpeed, boolean isFromMcast, boolean shouldMarkForFWTransfer, SecurityToken securityToken) { return null; } protected void respondToPingRequest(PingRequest request, ReplyHandler handler) { } protected boolean respondToQueryRequest(QueryRequest queryRequest, byte[] clientGUID, ReplyHandler handler) { return false; } protected void respondToUDPPingRequest(PingRequest request, InetSocketAddress addr, ReplyHandler handler) { } public void sendPushRequest(PushRequest push) throws IOException { this.push = push; } public boolean addBypassedSource(QueryReply reply, ReplyHandler handler) { // TODO Auto-generated method stub return false; } public boolean addBypassedSource(ReplyNumberVendorMessage reply, ReplyHandler handler) { // TODO Auto-generated method stub return false; } public void addMessageHandler(Class<? extends Message> clazz, MessageHandler handler) { // TODO Auto-generated method stub } public void addMulticastMessageHandler(Class<? extends Message> clazz, MessageHandler handler) { // TODO Auto-generated method stub } public void addUDPMessageHandler(Class<? extends Message> clazz, MessageHandler handler) { // TODO Auto-generated method stub } public void broadcastPingRequest(PingRequest ping) { // TODO Auto-generated method stub } public void downloadFinished(GUID guid) throws IllegalArgumentException { // TODO Auto-generated method stub } public void forwardInspectionRequestToLeaves(InspectionRequest ir) { // TODO Auto-generated method stub } public void forwardQueryRequestToLeaves(QueryRequest query, ReplyHandler handler) { // TODO Auto-generated method stub } public MessageHandler getMessageHandler(Class<? extends Message> clazz) { // TODO Auto-generated method stub return null; } public MessageHandler getMulticastMessageHandler(Class<? extends Message> clazz) { // TODO Auto-generated method stub return null; } public int getNumOOBToRequest(ReplyNumberVendorMessage reply) { // TODO Auto-generated method stub return 0; } public long getOOBExpireTime() { // TODO Auto-generated method stub return 0; } public String getPingRouteTableDump() { // TODO Auto-generated method stub return null; } public String getPushRouteTableDump() { // TODO Auto-generated method stub return null; } public Set<GUESSEndpoint> getQueryLocs(GUID guid) { // TODO Auto-generated method stub return null; } public QueryRouteTable getQueryRouteTable() { // TODO Auto-generated method stub return null; } public String getQueryRouteTableDump() { // TODO Auto-generated method stub return null; } public MessageHandler getUDPMessageHandler(Class<? extends Message> clazz) { // TODO Auto-generated method stub return null; } public void handleMessage(Message msg, ReplyHandler receivingConnection) { // TODO Auto-generated method stub } public void handleMulticastMessage(Message msg, InetSocketAddress addr) { // TODO Auto-generated method stub } public void handleQueryReply(QueryReply queryReply, ReplyHandler handler) { // TODO Auto-generated method stub } public void handleUDPMessage(Message msg, InetSocketAddress addr) { // TODO Auto-generated method stub } public void start() { // TODO Auto-generated method stub } public boolean isHostUnicastQueried(GUID guid, IpPort host) { // TODO Auto-generated method stub return false; } public boolean isQueryAlive(GUID guid) { // TODO Auto-generated method stub return false; } public boolean sendInitialQuery(QueryRequest query, RoutedConnection mc) { // TODO Auto-generated method stub return false; } public void originateQueryGUID(byte[] guid) { // TODO Auto-generated method stub } public void queryKilled(GUID guid) throws IllegalArgumentException { // TODO Auto-generated method stub } public void registerMessageListener(byte[] guid, MessageListener ml) { // TODO Auto-generated method stub } public void removeConnection(ReplyHandler rh) { // TODO Auto-generated method stub } public Iterable<QueryReply> responsesToQueryReplies(Response[] responses, QueryRequest queryRequest) { // TODO Auto-generated method stub return null; } public void sendDynamicQuery(QueryRequest query) { // TODO Auto-generated method stub } public void sendMulticastPushRequest(PushRequest push) { // TODO Auto-generated method stub } public void sendPingRequest(PingRequest request, RoutedConnection connection) { // TODO Auto-generated method stub } public void setMessageHandler(Class<? extends Message> clazz, MessageHandler handler) { // TODO Auto-generated method stub } public void setMulticastMessageHandler(Class<? extends Message> clazz, MessageHandler handler) { // TODO Auto-generated method stub } public void setUDPMessageHandler(Class<? extends Message> clazz, MessageHandler handler) { // TODO Auto-generated method stub } public void unregisterMessageListener(byte[] guid, MessageListener ml) { // TODO Auto-generated method stub } public ReplyHandler getPushHandler(byte[] guid) { return null; } public void setPersonalFilter(SpamFilter personalFilter) { } public boolean isPersonalSpam(Message m) { return false; } public void stop() { } public Iterable<QueryReply> responsesToQueryReplies(Response[] responses, QueryRequest queryRequest, int replyLimit, SecurityToken token) { return null; } public void initialize() { // TODO Auto-generated method stub } public String getServiceName() { // TODO Auto-generated method stub return null; } } }