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, <[EMAIL PROTECTED]> 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)); > + } > } > > >

