Author: beaton
Date: Wed Sep 10 17:51:46 2008
New Revision: 694081
URL: http://svn.apache.org/viewvc?rev=694081&view=rev
Log:
Return cookies and location headers, as per
http://groups.google.com/group/opensocial-and-gadgets-spec/browse_thread/thread/51b016b80e9d21e6
Don't follow 302 redirects for signed fetch and OAuth, since the redirect URL
isn't signed.
Modified:
incubator/shindig/trunk/features/core.io/io.js
incubator/shindig/trunk/features/core.io/iotest.js
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcher.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/FakeOAuthServiceProvider.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
Modified: incubator/shindig/trunk/features/core.io/io.js
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/io.js?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
--- incubator/shindig/trunk/features/core.io/io.js (original)
+++ incubator/shindig/trunk/features/core.io/io.js Wed Sep 10 17:51:46 2008
@@ -134,6 +134,8 @@
function transformResponseData(params, data) {
var resp = {
text: data.body,
+ rc: data.rc,
+ headers: data.headers,
oauthApprovalUrl: data.oauthApprovalUrl,
oauthError: data.oauthError,
oauthErrorText: data.oauthErrorText,
@@ -233,6 +235,8 @@
}
var resp = {
body: preload.body,
+ rc: preload.rc,
+ headers: preload.headers,
oauthApprovalUrl: preload.oauthApprovalUrl,
oauthError: preload.oauthError,
oauthErrorText: preload.oauthErrorText,
Modified: incubator/shindig/trunk/features/core.io/iotest.js
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/core.io/iotest.js?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
--- incubator/shindig/trunk/features/core.io/iotest.js (original)
+++ incubator/shindig/trunk/features/core.io/iotest.js Wed Sep 10 17:51:46 2008
@@ -734,6 +734,10 @@
"http://target.example.com/somepage" : {
"rc" : 200,
"body" : "preloadedbody",
+ "headers": {
+ "set-cookie": ["foo=bar","baz=quux"],
+ "location": ["somewhere"],
+ }
}
};
@@ -744,6 +748,9 @@
});
this.assertEquals("preloadedbody", resp.text);
+ this.assertEquals("somewhere", resp.headers["location"][0]);
+ this.assertEquals("foo=bar", resp.headers["set-cookie"][0]);
+ this.assertEquals("baz=quux", resp.headers["set-cookie"][1]);
var req = new fakeXhr.Expectation("GET", "http://example.com/json");
this.setStandardArgs(req, false);
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
Wed Sep 10 17:51:46 2008
@@ -80,7 +80,7 @@
HttpURLConnection fetcher = (HttpURLConnection)url.openConnection();
fetcher.setConnectTimeout(CONNECT_TIMEOUT_MS);
fetcher.setRequestProperty("Accept-Encoding", "gzip, deflate");
- fetcher.setInstanceFollowRedirects(true);
+ fetcher.setInstanceFollowRedirects(request.getFollowRedirects());
for (Map.Entry<String, List<String>> entry :
request.getHeaders().entrySet()) {
fetcher.setRequestProperty(entry.getKey(),
StringUtils.join(entry.getValue(), ','));
}
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
Wed Sep 10 17:51:46 2008
@@ -58,6 +58,9 @@
private boolean ignoreCache;
private int cacheTtl = -1;
+ // Whether to follow redirects
+ private boolean followRedirects = true;
+
// Context for the request.
private Uri gadget;
private String container = ContainerConfig.DEFAULT_CONTAINER;
@@ -95,6 +98,7 @@
}
authType = request.authType;
rewriteMimeType = request.rewriteMimeType;
+ followRedirects = request.followRedirects;
}
public HttpRequest setMethod(String method) {
@@ -232,6 +236,14 @@
this.oauthArguments = oauthArguments;
return this;
}
+
+ /**
+ * @param followRedirects whether this request should automatically follow
redirects.
+ */
+ public HttpRequest setFollowRedirects(boolean followRedirects) {
+ this.followRedirects = followRedirects;
+ return this;
+ }
/**
* @param authType The type of authentication being used for this request.
@@ -374,6 +386,13 @@
public OAuthArguments getOAuthArguments() {
return oauthArguments;
}
+
+ /**
+ * @return true if redirects should be followed.
+ */
+ public boolean getFollowRedirects() {
+ return followRedirects;
+ }
/**
* @return The type of authentication being used for this request.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcher.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcher.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcher.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthFetcher.java
Wed Sep 10 17:51:46 2008
@@ -429,6 +429,8 @@
OAuthMessage signed = accessorInfo.getAccessor().newRequestMessage(
base.getMethod(), target.toString(), params);
HttpRequest oauthHttpRequest = createHttpRequest(base,
selectOAuthParams(signed));
+ // Following 302s on OAuth responses is unlikely to be productive.
+ oauthHttpRequest.setFollowRedirects(false);
return oauthHttpRequest;
} catch (IOException e) {
throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e);
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java
Wed Sep 10 17:51:46 2008
@@ -24,8 +24,11 @@
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
+import org.apache.shindig.gadgets.servlet.MakeRequestHandler;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.Preload;
+import org.json.JSONException;
+import org.json.JSONObject;
import com.google.common.collect.Maps;
import com.google.inject.Inject;
@@ -84,12 +87,16 @@
* Implements PreloadData by returning a Map that matches the output format
used by makeRequest.
*/
private static class HttpPreloadData implements PreloadedData {
- private final Map<String, String> data;
+ private final JSONObject data;
public HttpPreloadData(HttpResponse response) {
- data = Maps.newHashMap(response.getMetadata());
- data.put("body", response.getResponseAsString());
- data.put("rc", Integer.toString(response.getHttpStatusCode()));
+ JSONObject data = null;
+ try {
+ data = MakeRequestHandler.getResponseAsJson(response,
response.getResponseAsString());
+ } catch (JSONException e) {
+ data = new JSONObject();
+ }
+ this.data = data;
}
public Object toJson() {
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
Wed Sep 10 17:51:46 2008
@@ -34,10 +34,12 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
+import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
+import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -169,21 +171,54 @@
}
/**
+ * Convert a response to a JSON object. static so it can be used by
HttpPreloaders as well.
+ *
+ * The returned JSON object contains the following values:
+ * rc: integer response code
+ * body: string response body
+ * headers: object, keys are header names, values are lists of header values
+ *
+ * @param response the response body
+ * @param body string to use as the body of the response.
+ * @return a JSONObject representation of the response body.
+ */
+ public static JSONObject getResponseAsJson(HttpResponse response, String
body)
+ throws JSONException {
+ JSONObject resp = new JSONObject();
+ resp.put("rc", response.getHttpStatusCode());
+ resp.put("body", body);
+ JSONObject headers = new JSONObject();
+ addHeaders(headers, response, "set-cookie");
+ addHeaders(headers, response, "location");
+ resp.put("headers", headers);
+ // Merge in additional response data
+ for (Map.Entry<String, String> entry : response.getMetadata().entrySet()) {
+ resp.put(entry.getKey(), entry.getValue());
+ }
+ return resp;
+ }
+
+ private static void addHeaders(JSONObject headers, HttpResponse response,
String headerName)
+ throws JSONException {
+ List<String> values = response.getHeaders(headerName);
+ if (!values.isEmpty()) {
+ headers.put(headerName.toLowerCase(), new JSONArray(values));
+ }
+ }
+
+ /**
* Format a response as JSON, including additional JSON inserted by
* chained content fetchers.
*/
private String convertResponseToJson(SecurityToken authToken,
HttpServletRequest request,
HttpResponse results) throws GadgetException {
try {
- JSONObject resp = new JSONObject();
String originalUrl = request.getParameter(ProxyBase.URL_PARAM);
String body = results.getResponseAsString();
if ("FEED".equals(request.getParameter(CONTENT_TYPE_PARAM))) {
- resp.put("body", processFeed(originalUrl, request, body));
- } else {
- resp.put("body", body);
+ body = processFeed(originalUrl, request, body);
}
- resp.put("rc", results.getHttpStatusCode());
+ JSONObject resp = getResponseAsJson(results, body);
if (authToken != null) {
String updatedAuthToken = authToken.getUpdatedToken();
@@ -191,11 +226,6 @@
resp.put("st", updatedAuthToken);
}
}
-
- // Merge in additional response data
- for (Map.Entry<String, String> entry : results.getMetadata().entrySet())
{
- resp.put(entry.getKey(), entry.getValue());
- }
// Use raw param as key as URL may have to be decoded
return new JSONObject().put(originalUrl, resp).toString();
} catch (JSONException e) {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
Wed Sep 10 17:51:46 2008
@@ -173,4 +173,32 @@
assertEquals("POST", response.getHeader("x-method"));
ArrayAssert.assertEquals(body, response.getResponseAsBytes());
}
+
+ @Test public void testFollowRedirects() throws Exception {
+ String content = "";
+ Uri uri = new UriBuilder(BASE_URL)
+ .addQueryParameter("body", content)
+ .addQueryParameter("status", "302")
+ .addQueryParameter("header", "Location=" + BASE_URL.toString() +
"?body=redirected")
+ .toUri();
+ HttpRequest request = new HttpRequest(uri);
+ HttpResponse response = fetcher.fetch(request);
+ assertEquals(200, response.getHttpStatusCode());
+ assertEquals("redirected", response.getResponseAsString());
+ }
+
+ @Test public void testNoFollowRedirects() throws Exception {
+ String content = "";
+ Uri uri = new UriBuilder(BASE_URL)
+ .addQueryParameter("body", content)
+ .addQueryParameter("status", "302")
+ .addQueryParameter("header", "Location=" + BASE_URL.toString() +
"?body=redirected")
+ .toUri();
+ HttpRequest request = new HttpRequest(uri)
+ .setFollowRedirects(false);
+ HttpResponse response = fetcher.fetch(request);
+ assertEquals(302, response.getHttpStatusCode());
+ assertEquals(content, response.getResponseAsString());
+ assertEquals(BASE_URL.toString() + "?body=redirected",
response.getHeader("Location"));
+ }
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpRequestTest.java
Wed Sep 10 17:51:46 2008
@@ -19,6 +19,7 @@
package org.apache.shindig.gadgets.http;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.apache.shindig.auth.AnonymousSecurityToken;
@@ -86,6 +87,12 @@
}
@Test
+ public void testDefaultIsFollowRedirects() {
+ HttpRequest request = new HttpRequest(DEFAULT_URI);
+ assertTrue(request.getFollowRedirects());
+ }
+
+ @Test
public void copyCtorCopiesAllFields() {
OAuthArguments oauthArguments = new OAuthArguments();
oauthArguments.setSignOwner(false);
@@ -100,7 +107,8 @@
.setRewriteMimeType("text/fake")
.setSecurityToken(new AnonymousSecurityToken())
.setOAuthArguments(oauthArguments)
- .setAuthType(AuthType.OAUTH);
+ .setAuthType(AuthType.OAUTH)
+ .setFollowRedirects(false);
HttpRequest request2 = new
HttpRequest(request).setUri(Uri.parse("http://example.org/foo"));
@@ -117,5 +125,6 @@
assertEquals(request.getOAuthArguments().getSignViewer(),
request2.getOAuthArguments().getSignViewer());
assertEquals(AuthType.OAUTH, request.getAuthType());
+ assertFalse(request.getFollowRedirects());
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/FakeOAuthServiceProvider.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/FakeOAuthServiceProvider.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/FakeOAuthServiceProvider.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/FakeOAuthServiceProvider.java
Wed Sep 10 17:51:46 2008
@@ -63,7 +63,6 @@
public final static String SIGNED_FETCH_CONSUMER_KEY = "signedfetch";
-
private static class TokenState {
String tokenSecret;
OAuthConsumer consumer;
@@ -157,7 +156,7 @@
public void setVagueErrors(boolean vagueErrors) {
this.vagueErrors = vagueErrors;
}
-
+
public void addParamLocation(OAuthParamLocation paramLocation) {
validParamLocations.add(paramLocation);
}
@@ -178,6 +177,9 @@
}
private HttpResponse realFetch(HttpRequest request) {
+ if (request.getFollowRedirects()) {
+ throw new RuntimeException("Not supposed to follow OAuth redirects");
+ }
String url = request.getUri().toString();
try {
if (url.startsWith(REQUEST_TOKEN_URL)) {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherTest.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthFetcherTest.java
Wed Sep 10 17:51:46 2008
@@ -736,7 +736,8 @@
HttpResponse resp = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL);
List<Parameter> queryParams = OAuth.decodeForm(resp.getResponseAsString());
assertTrue(contains(queryParams, "opensocial_owner_id", "o"));
- assertTrue(contains(queryParams, "opensocial_viewer_id", "v")); }
+ assertTrue(contains(queryParams, "opensocial_viewer_id", "v"));
+ }
@Test
public void testGetWithQuery() throws Exception {
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/preload/HttpPreloaderTest.java
Wed Sep 10 17:51:46 2008
@@ -36,11 +36,17 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import org.easymock.IMocksControl;
+import org.easymock.classextension.EasyMock;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Before;
import org.junit.Test;
import java.net.URI;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.concurrent.Callable;
/**
@@ -89,11 +95,15 @@
assertEquals(context.getToken().getAppId(),
request.getSecurityToken().getAppId());
}
- private static void checkResults(Map<String, String> results) {
+ private static void checkResults(JSONObject results) throws JSONException {
assertEquals(PRELOAD_CONTENT, results.get("body"));
- assertEquals(HttpResponse.SC_OK, Integer.parseInt(results.get("rc")));
- assertTrue("Metadata values not copied to output.",
- results.entrySet().containsAll(PRELOAD_METADATA.entrySet()));
+ assertEquals(HttpResponse.SC_OK, results.getInt("rc"));
+ assertEquals("yo=momma",
results.getJSONObject("headers").getJSONArray("set-cookie").get(0));
+
+ for (Entry<String, String> entry : PRELOAD_METADATA.entrySet()) {
+ assertEquals("Metadata values not copied to output.",
+ entry.getValue(), results.get(entry.getKey()));
+ }
}
@Test
@@ -111,7 +121,7 @@
PreloadedData data = preloaded.get(PRELOAD_HREF).call();
checkRequest(plainFetcher.requests.get(0));
- checkResults((Map<String, String>)data.toJson());
+ checkResults((JSONObject)data.toJson());
}
@Test
@@ -132,7 +142,7 @@
checkRequest(request);
assertTrue(request.getOAuthArguments().getSignOwner());
assertFalse(request.getOAuthArguments().getSignViewer());
- checkResults((Map<String, String>)data.toJson());
+ checkResults((JSONObject) data.toJson());
}
@Test
@@ -152,7 +162,7 @@
HttpRequest request = oauthFetcher.requests.get(0);
checkRequest(request);
- checkResults((Map<String, String>)data.toJson());
+ checkResults((JSONObject) data.toJson());
}
@Test
@@ -170,11 +180,11 @@
PreloadedData data = preloaded.get(PRELOAD_HREF).call();
checkRequest(plainFetcher.requests.get(0));
- checkResults((Map<String, String>)data.toJson());
+ checkResults((JSONObject) data.toJson());
data = preloaded.get(PRELOAD_HREF2).call();
checkRequest(plainFetcher.requests.get(1));
- checkResults((Map<String, String>)data.toJson());
+ checkResults((JSONObject) data.toJson());
}
private static class RecordingHttpFetcher implements HttpFetcher {
@@ -185,6 +195,7 @@
return new HttpResponseBuilder()
.setMetadata(PRELOAD_METADATA)
.setResponseString(PRELOAD_CONTENT)
+ .addHeader("Set-Cookie", "yo=momma")
.create();
}
}
Modified:
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java?rev=694081&r1=694080&r2=694081&view=diff
==============================================================================
---
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
(original)
+++
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/MakeRequestHandlerTest.java
Wed Sep 10 17:51:46 2008
@@ -359,4 +359,46 @@
assertEquals(RESPONSE_BODY, results.getString("foo"));
assertTrue(rewriter.responseWasRewritten());
}
+
+ public void testSetCookiesReturned() throws Exception {
+ HttpRequest internalRequest = new HttpRequest(REQUEST_URL);
+ HttpResponse response = new HttpResponseBuilder()
+ .setResponse("foo".getBytes("UTF-8"))
+ .addHeader("Set-Cookie", "foo=bar; Secure")
+ .addHeader("Set-Cookie", "name=value")
+ .create();
+
+ expect(fetcherFactory.fetch(internalRequest)).andReturn(response);
+ replay();
+
+ handler.fetch(request, recorder);
+ JSONObject results = extractJsonFromResponse();
+ JSONObject headers = results.getJSONObject("headers");
+ assertNotNull(headers);
+ JSONArray cookies = headers.getJSONArray("set-cookie");
+ assertNotNull(cookies);
+ assertEquals(2, cookies.length());
+ assertEquals("foo=bar; Secure", cookies.get(0));
+ assertEquals("name=value", cookies.get(1));
+ }
+
+ public void testLocationReturned() throws Exception {
+ HttpRequest internalRequest = new HttpRequest(REQUEST_URL);
+ HttpResponse response = new HttpResponseBuilder()
+ .setResponse("foo".getBytes("UTF-8"))
+ .addHeader("Location", "somewhere else")
+ .create();
+
+ expect(fetcherFactory.fetch(internalRequest)).andReturn(response);
+ replay();
+
+ handler.fetch(request, recorder);
+ JSONObject results = extractJsonFromResponse();
+ JSONObject headers = results.getJSONObject("headers");
+ assertNotNull(headers);
+ JSONArray locations = headers.getJSONArray("location");
+ assertNotNull(locations);
+ assertEquals(1, locations.length());
+ assertEquals("somewhere else", locations.get(0));
+ }
}