You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by Kevin Brown <et...@google.com> on 2008/09/11 03:01:07 UTC
Re: svn commit: r694081 - in /incubator/shindig/trunk: features/core.io/ java/gadgets/src/main/java/org/apache/shindig/gadgets/http/ java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/ java/gadgets/src/main/java/org/apache/shindig/gadgets/pr
The changes to HttpPreload / MakeRequest aren't right here. This should be
pulled into a separate utility class; making the preload package depend on
the servlet package is confusing and likely to cause problems later when
somebody changes MakeRequest.
On Wed, Sep 10, 2008 at 5:51 PM, <be...@apache.org> wrote:
> 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));
> + }
> }
>
>
>