blob: 21462cc59580242259daf11834a83cb58261d8f2 [file]
// Copyright 2006 Google Inc. All Rights Reserved.
package com.google.gwt.http.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.RequestPermissionException;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.junit.client.GWTTestCase;
/**
* HTTPRequestBuilder tests
*/
public class RequestBuilderTest extends GWTTestCase {
private static final int TEST_FINISH_DELAY = 10000;
private static String getTestBaseURL() {
return GWT.getModuleBaseURL() + "testRequestBuilder/";
}
public String getModuleName() {
return "com.google.gwt.http.RequestBuilderTest";
}
/**
* Test method for
* {@link com.google.gwt.http.client.RequestBuilder#RequestBuilder(java.lang.String, java.lang.String)}.
* <p>
* NOTE: When running this test against Internet Explorer, the security settings of IE affect this test.
* The assumption is that the "Access Data Sources Across Domains" setting is set to "Disabled". This is
* the standard setting for the "Internet" zone, which models the case of a user's browser sending a request
* to a foreign website. However, if you are running the unit tests against a machine running the GWT app which
* falls into your "Trusted Sites" or "Local Network" content zone, this setting's value is different.
* You will have to change the setting to "Disabled" in these zones for this test to pass.
* <p>
* Test Cases:
* <ul>
* <li>httpMethod == null
* <li>httpMethod == ""
* <li>url == null
* <li>url == ""
* <li>url == "www.freebsd.org" - violates same source
* </ul>
*/
public void testRequestBuilderStringString() {
try {
RequestBuilder builder = new RequestBuilder((RequestBuilder.Method) null,
null);
fail("NullPointerException should have been thrown for construction with null method.");
} catch (NullPointerException ex) {
// purposely ignored
}
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, null);
fail("NullPointerException should have been thrown for construction with null URL.");
} catch (NullPointerException ex) {
// purposely ignored
}
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "");
fail("IllegalArgumentException should have been throw for construction with empty URL.");
} catch (IllegalArgumentException ex) {
// purposely ignored
}
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
"http://www.freebsd.org");
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
// should never get here
fail("HTTPRequest timed out");
}
public void onResponseReceived(Request request, Response response) {
// should never get here
fail();
}
});
} catch (IllegalArgumentException ex) {
// purposely ignored
} catch (RequestPermissionException ex) {
// this is the type of exception that we expect
} catch (RequestException e) {
fail(e.getMessage());
}
}
/**
* Test method for
* {@link com.google.gwt.http.client.RequestBuilder#RequestBuilder(java.lang.String, java.lang.String)}. *
*/
public void testRequestBuilderStringString_HTTPMethodRestrictionOverride() {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "FOO");
try {
class MyRequestBuilder extends RequestBuilder {
MyRequestBuilder(String httpMethod, String url) {
super(httpMethod, url);
}
};
builder = new MyRequestBuilder("HEAD", "FOO");
// should reach here without any exceptions being thrown
} catch (IllegalArgumentException ex) {
fail(ex.getMessage());
}
}
/**
* Test method for
* {@link com.google.gwt.http.client.RequestBuilder#sendRequest(java.lang.String, com.google.gwt.http.client.RequestCallback)}.
*/
public void testSendRequest_GET() {
delayTestFinish(TEST_FINISH_DELAY);
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
getTestBaseURL() + "sendRequest_GET");
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
fail();
}
public void onResponseReceived(Request request, Response response) {
assertEquals(200, response.getStatusCode());
finishTest();
}
});
} catch (RequestException e) {
fail(e.getMessage());
}
}
/**
* Test method for
* {@link com.google.gwt.http.client.RequestBuilder#sendRequest(java.lang.String, com.google.gwt.http.client.RequestCallback)}.
*/
public void testSendRequest_POST() {
delayTestFinish(TEST_FINISH_DELAY);
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST,
getTestBaseURL() + "sendRequest_POST");
builder.sendRequest("method=test+request", new RequestCallback() {
public void onError(Request request, Throwable exception) {
fail("HTTPRequest timed out");
}
public void onResponseReceived(Request request, Response response) {
assertEquals(200, response.getStatusCode());
finishTest();
}
});
} catch (RequestException e) {
fail(e.getMessage());
}
}
public void testSetPassword() {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
getTestBaseURL());
try {
builder.setPassword(null);
} catch (NullPointerException ex) {
// Correct behavior, exception was thrown
}
try {
builder.setPassword("");
} catch (IllegalArgumentException ex) {
// Correct behavior, exception was thrown
}
}
/**
* Test method for
* {@link com.google.gwt.http.client.RequestBuilder#setHeader(java.lang.String, java.lang.String)}.
*
* <p>
* Test Cases:
* <ul>
* <li>name == null
* <li>name == ""
* <li>value == null
* <li>value == ""
* </ul>
*/
public void testSetRequestHeader() {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
getTestBaseURL() + "setRequestHeader");
try {
builder.setHeader(null, "bar");
fail("setRequestHeader(null, \"bar\")");
} catch (NullPointerException ex) {
// purposely ignored
}
try {
builder.setHeader("", "bar");
fail("setRequestHeader(\"\", \"bar\")");
} catch (IllegalArgumentException ex) {
// purposely ignored
}
try {
builder.setHeader("foo", null);
fail("setRequestHeader(\"foo\", null)");
} catch (NullPointerException ex) {
// purposely ignored
}
try {
builder.setHeader("foo", "");
fail("setRequestHeader(\"foo\", \"\")");
} catch (IllegalArgumentException ex) {
// purposely ignored
}
delayTestFinish(TEST_FINISH_DELAY);
try {
builder = new RequestBuilder(RequestBuilder.GET, getTestBaseURL()
+ "setRequestHeader");
builder.setHeader("Foo", "Bar");
builder.setHeader("Foo", "Bar1");
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
fail("HTTPRequest timed out");
}
public void onResponseReceived(Request request, Response response) {
assertEquals(200, response.getStatusCode());
finishTest();
}
});
} catch (RequestException e) {
fail(e.getMessage());
}
}
/**
* Test method for
* {@link com.google.gwt.http.client.RequestBuilder#setTimeoutMillis(int)}.
*
* <p>
* Test Cases:
* <ul>
* <li>Timeout greater than the server's response time
* <li>Timeout is less than the server's response time
* </ul>
*/
public void testSetTimeout_noTimeout() {
delayTestFinish(TEST_FINISH_DELAY);
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
getTestBaseURL() + "setTimeout/noTimeout");
builder.setTimeoutMillis(10000);
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
fail("Test timed out");
}
public void onResponseReceived(Request request, Response response) {
assertEquals(200, response.getStatusCode());
finishTest();
}
});
} catch (RequestException e) {
fail(e.getMessage());
}
}
/**
* Test method for
* {@link com.google.gwt.http.client.RequestBuilder#setTimeoutMillis(int)}.
*
* <p>
* Test Cases:
* <ul>
* <li>Timeout greater than the server's response time
* <li>Timeout is less than the server's response time
* </ul>
*/
public void testSetTimeout_timeout() {
delayTestFinish(TEST_FINISH_DELAY);
try {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
getTestBaseURL() + "setTimeout/timeout");
builder.setTimeoutMillis(2000);
builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
finishTest();
}
public void onResponseReceived(Request request, Response response) {
assertEquals(200, response.getStatusCode());
fail("Test did not timeout");
}
});
} catch (RequestException e) {
fail(e.getMessage());
}
}
public void testSetUser() {
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET,
getTestBaseURL());
try {
builder.setUser(null);
} catch (NullPointerException ex) {
// Correct behavior, exception was thrown
}
try {
builder.setUser("");
} catch (IllegalArgumentException ex) {
// Correct behavior, exception was thrown
}
}
}