package com.rapidftr.net; import static junit.framework.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.IOException; import org.junit.Before; import org.junit.Test; import com.rapidftr.Key; import com.rapidftr.datastore.MockStore; import com.rapidftr.utilities.HttpSettings; import com.rapidftr.utilities.Settings; import com.sun.me.web.request.Part; import com.sun.me.web.request.PostData; import com.sun.me.web.request.Request; import com.sun.me.web.request.Response; public class HttpServerTest { private HttpGateway httpGateway; private Response response; private HttpSettings httpSettings; @Before public void setup() { Settings settings = new Settings(new MockStore(new Key("settings"))); httpSettings = new HttpSettings(settings); httpSettings.setHost("http://www.google.com"); httpGateway = mock(HttpGateway.class); response = new Response(); response.setResponseCode(200); } @Test public void shouldPerformGetRequest() throws IOException { Request request = Request.createGetRequest("http://www.google.com/;deviceside=true;ConnectionTimeout=10000"); when(httpGateway.perform(request)).thenReturn(response); HttpServer server = new HttpServer(httpSettings, httpGateway); response = server.getFromServer("", null, null); assertEquals(200, response.getCode()); } @Test public void shouldPerformGetRequestAsynchronously() throws Exception { TstRequestListener listener = new TstRequestListener(); Request request = Request.createGetRequest("http://www.google.com/someurl;deviceside=true;ConnectionTimeout=10000", null, null, listener, null); when(httpGateway.perform(request)).thenReturn(response); HttpServer server = new HttpServer(httpSettings, httpGateway); server.getFromServer("someurl", null, null, listener, null); waitForResponse(2000, listener); assertEquals(response, listener.getResponse()); } @Test public void shouldPerformPostRequestAsynchronously() throws Exception { TstRequestListener listener = new TstRequestListener(); Part apart = new Part("hello".getBytes(), null); Part[] parts = new Part[]{apart}; PostData postData = new PostData(parts, ""); Request request = Request.createPostRequest("http://www.google.com/;deviceside=true;ConnectionTimeout=10000", listener, postData); when(httpGateway.perform(request)).thenReturn(response); HttpServer server = new HttpServer(httpSettings, httpGateway); server.postToServer("", null, null, listener, postData, null); waitForResponse(1000, listener); assertEquals(response, listener.getResponse()); } private void waitForResponse(long timeout, TstRequestListener listener) throws InterruptedException { long waitedFor = 0; long waitFor = 500; if (listener.getResponse() == null && waitedFor < timeout) { Thread.sleep(waitFor); waitedFor += waitFor; } } }