Added: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java?rev=982090&view=auto
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java
 (added)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java
 Wed Aug  4 00:09:36 2010
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.gadgets.servlet;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.Vector;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.shindig.common.servlet.HttpServletResponseRecorder;
+import org.apache.shindig.common.servlet.HttpUtil;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.common.util.FakeTimeSource;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.easymock.EasyMock;
+
+import org.json.JSONObject;
+import org.junit.Test;
+
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ServletUtilTest {
+  @Test
+  public void testValidateUrlNoPath() throws Exception {
+    Uri url = ServletUtil.validateUrl(Uri.parse("http://www.example.com";));
+    assertEquals("http", url.getScheme());
+    assertEquals("www.example.com", url.getAuthority());
+    assertEquals("/", url.getPath());
+    assertNull(url.getQuery());
+    assertNull(url.getFragment());
+  }
+
+  @Test
+  public void testValidateUrlHttps() throws Exception {
+    Uri url = ServletUtil.validateUrl(Uri.parse("https://www.example.com";));
+    assertEquals("https", url.getScheme());
+    assertEquals("www.example.com", url.getAuthority());
+    assertEquals("/", url.getPath());
+    assertNull(url.getQuery());
+    assertNull(url.getFragment());
+  }
+
+  @Test
+  public void testValidateUrlWithPath() throws Exception {
+    Uri url = ServletUtil.validateUrl(Uri.parse("http://www.example.com/foo";));
+    assertEquals("http", url.getScheme());
+    assertEquals("www.example.com", url.getAuthority());
+    assertEquals("/foo", url.getPath());
+    assertNull(url.getQuery());
+    assertNull(url.getFragment());
+  }
+
+  @Test
+  public void testValidateUrlWithPort() throws Exception {
+    Uri url = 
ServletUtil.validateUrl(Uri.parse("http://www.example.com:8080/foo";));
+    assertEquals("http", url.getScheme());
+    assertEquals("www.example.com:8080", url.getAuthority());
+    assertEquals("/foo", url.getPath());
+    assertNull(url.getQuery());
+    assertNull(url.getFragment());
+  }
+
+  @Test
+  public void testValidateUrlWithEncodedPath() throws Exception {
+    Uri url = 
ServletUtil.validateUrl(Uri.parse("http://www.example.com/foo%20bar";));
+    assertEquals("http", url.getScheme());
+    assertEquals("www.example.com", url.getAuthority());
+    assertEquals("/foo%20bar", url.getPath());
+    assertNull(url.getQuery());
+    assertNull(url.getFragment());
+  }
+
+  @Test
+  public void testValidateUrlWithEncodedQuery() throws Exception {
+    Uri url = 
ServletUtil.validateUrl(Uri.parse("http://www.example.com/foo?q=with%20space";));
+    assertEquals("http", url.getScheme());
+    assertEquals("www.example.com", url.getAuthority());
+    assertEquals("/foo", url.getPath());
+    assertEquals("q=with%20space", url.getQuery());
+    assertEquals("with space", url.getQueryParameter("q"));
+    assertNull(url.getFragment());
+  }
+
+  @Test
+  public void testValidateUrlWithNoPathAndEncodedQuery() throws Exception {
+    Uri url = 
ServletUtil.validateUrl(Uri.parse("http://www.example.com?q=with%20space";));
+    assertEquals("http", url.getScheme());
+    assertEquals("www.example.com", url.getAuthority());
+    assertEquals("/", url.getPath());
+    assertEquals("q=with%20space", url.getQuery());
+    assertNull(url.getFragment());
+  }
+
+  @Test(expected = GadgetException.class)
+  public void testValidateUrlNullInput() throws Exception {
+    ServletUtil.validateUrl(null);
+  }
+  
+  @Test
+  public void testOutputDataUri() throws Exception {
+    checkOutputDataUri("text/foo", "text/foo", "UTF-8");
+  }
+  
+  @Test
+  public void testOutputDataUriWithCharset() throws Exception {
+    checkOutputDataUri("text/bar; charset=ISO-8859-1", "text/bar", 
"ISO-8859-1");
+  }
+  
+  private void checkOutputDataUri(String contentType, String expectedType,
+      String expectedEncoding) throws Exception {
+    String theData = "this is the data";
+    String mk1 = "meta1", mv1 = "val1";
+    String mk2 = "'\"}key", mv2 = "val{\"'";
+    HttpResponse response = new HttpResponseBuilder()
+      .setResponseString(theData)
+      .addHeader("Content-Type", contentType)
+      .setMetadata(mk1, mv1)
+      .setMetadata(mk2, mv2)
+      .setMetadata(ServletUtil.DATA_URI_KEY, "foo")  // Should be ignored.
+      .create();
+
+    HttpResponse jsonified = ServletUtil.convertToJsonResponse(response);
+
+    assertEquals("application/json; charset=UTF-8", 
jsonified.getHeader("Content-Type"));
+    
+    String emitted = jsonified.getResponseAsString();
+    JSONObject js = new JSONObject(emitted);
+    assertEquals(mv1, js.getString(mk1));
+    assertEquals(mv2, js.getString(mk2));
+    String content64 = getBase64(theData);
+    assertEquals("data:" + expectedType + ";base64;charset=" + 
expectedEncoding + "," + content64,
+        js.getString(ServletUtil.DATA_URI_KEY));
+  }
+  
+  private String getBase64(String input) throws Exception {
+    return new String(Base64.encodeBase64(input.getBytes("UTF8")), "UTF8");
+  }
+  
+  @Test
+  public void testFromHttpServletRequest() throws Exception {
+    HttpServletRequest original = 
EasyMock.createMock(HttpServletRequest.class);
+    EasyMock.expect(original.getScheme()).andReturn("https");
+    EasyMock.expect(original.getServerName()).andReturn("www.example.org");
+    EasyMock.expect(original.getServerPort()).andReturn(444);
+    EasyMock.expect(original.getRequestURI()).andReturn("/path/foo");
+    EasyMock.expect(original.getQueryString()).andReturn("one=two&three=four");
+    Vector<String> headerNames = new Vector<String>();
+    headerNames.add("Header1");
+    headerNames.add("Header2");
+    
EasyMock.expect(original.getHeaderNames()).andReturn(headerNames.elements());
+    EasyMock.expect(original.getHeader("Header1")).andReturn("HVal1");
+    EasyMock.expect(original.getHeader("Header2")).andReturn("HVal2");
+    EasyMock.expect(original.getMethod()).andReturn("post");
+    final ByteArrayInputStream bais = new ByteArrayInputStream("post 
body".getBytes());
+    ServletInputStream sis = new ServletInputStream() {
+      @Override
+      public int read() throws IOException {
+        return bais.read();
+      }
+    };
+    EasyMock.expect(original.getInputStream()).andReturn(sis);
+    EasyMock.expect(original.getRemoteAddr()).andReturn("1.2.3.4");
+    
+    EasyMock.replay(original);
+    HttpRequest request = ServletUtil.fromHttpServletRequest(original);
+    EasyMock.verify(original);
+    
+    
assertEquals(Uri.parse("https://www.example.org:444/path/foo?one=two&three=four";),
+        request.getUri());
+    assertEquals(3, request.getHeaders().size());
+    assertEquals("HVal1", request.getHeader("Header1"));
+    assertEquals("HVal2", request.getHeader("Header2"));
+    assertEquals("post", request.getMethod());
+    assertEquals("post body", request.getPostBodyAsString());
+    assertEquals("1.2.3.4", request.getParam(ServletUtil.REMOTE_ADDR_KEY));
+  }
+  
+  @Test
+  public void testCopyResponseToServlet() throws Exception {
+    HttpResponse response = new HttpResponseBuilder()
+        .setResponseString("response 
string").setHttpStatusCode(200).addHeader("h1", "v1")
+        .addHeader("h2", "v2").setCacheTtl(1000).create();
+
+    HttpServletResponse servletResponse = 
EasyMock.createMock(HttpServletResponse.class);
+    HttpServletResponseRecorder recorder = new 
HttpServletResponseRecorder(servletResponse);
+    
+    ServletUtil.copyResponseToServlet(response, recorder);
+    
+    assertEquals(200, recorder.getHttpStatusCode());
+    assertEquals("response string", recorder.getResponseAsString());
+    assertEquals("v1", recorder.getHeader("h1"));
+    assertEquals("v2", recorder.getHeader("h2"));
+  }
+  
+  @Test
+  public void testCopyResponseToServletNoCache() throws Exception {
+    HttpResponse response = new HttpResponseBuilder()
+        .setResponseString("response 
string").setHttpStatusCode(200).addHeader("h1", "v1")
+        .addHeader("h2", "v2").setStrictNoCache().create();
+
+    HttpServletResponse servletResponse = 
EasyMock.createMock(HttpServletResponse.class);
+    HttpServletResponseRecorder recorder = new 
HttpServletResponseRecorder(servletResponse);
+    
+    FakeTimeSource fakeTime = new FakeTimeSource();
+    HttpUtil.setTimeSource(fakeTime);
+    ServletUtil.copyResponseToServlet(response, recorder);
+    
+    assertEquals(200, recorder.getHttpStatusCode());
+    assertEquals("response string", recorder.getResponseAsString());
+    assertEquals("v1", recorder.getHeader("h1"));
+    assertEquals("v2", recorder.getHeader("h2"));
+    assertEquals("no-cache", recorder.getHeader("Pragma"));
+    assertEquals("no-cache", recorder.getHeader("Cache-Control"));
+  }
+}

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriUtilsTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriUtilsTest.java?rev=982090&r1=982089&r2=982090&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriUtilsTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/UriUtilsTest.java
 Wed Aug  4 00:09:36 2010
@@ -18,34 +18,22 @@
  */
 package org.apache.shindig.gadgets.uri;
 
+import static org.junit.Assert.assertEquals;
+
 import com.google.inject.internal.ImmutableList;
 import com.google.inject.internal.ImmutableMap;
-import org.apache.shindig.common.EasyMockTestCase;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
-import org.apache.shindig.gadgets.servlet.ServletTestFixture;
-import org.easymock.EasyMock;
-import org.easymock.IAnswer;
-import org.junit.Before;
 import org.junit.Test;
 
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import java.util.*;
 
-import static org.easymock.EasyMock.expect;
-
 /**
  * Tests for UriUtils.
  */
-public class UriUtilsTest extends ServletTestFixture {
-  @Before
-  public void setUp() throws Exception {
-  }
-
+public class UriUtilsTest {
   Enumeration<String> makeEnumeration(String... args) {
     Vector<String> vector = new Vector<String>();
     if (args != null) {
@@ -59,10 +47,11 @@ public class UriUtilsTest extends Servle
     String url = "http://example.org/foo";;
     HttpRequest req = new HttpRequest(Uri.parse(url))
         .setRewriteMimeType(requestMime);
-    recorder.setContentType(responseMime);
+    HttpResponseBuilder builder = new HttpResponseBuilder()
+        .setHeader("Content-Type", responseMime);
 
-    UriUtils.maybeRewriteContentType(req, recorder);
-    assertEquals(expectedMime, recorder.getContentType());
+    UriUtils.maybeRewriteContentType(req, builder);
+    assertEquals(expectedMime, builder.getHeader("Content-Type"));
   }
 
   @Test
@@ -121,26 +110,25 @@ public class UriUtilsTest extends Servle
         .setHttpStatusCode(5000)
         .addHeader("hello", "world1")
         .addHeader("hello", "world2")
-        .addHeader("hello\\u2297", "bad header")
+        .addHeader("hello\u2297", "bad header")
         .addHeader("Content-length", "10")
         .addHeader("vary", "1")
         .create();
-    HttpServletResponse response = mock(HttpServletResponse.class);
-
-    response.setStatus(5000);
-    EasyMock.expectLastCall().once();
-
-    response.addHeader("hello", "world1");
-    EasyMock.expectLastCall().once();
-    response.addHeader("hello", "world2");
-    EasyMock.expectLastCall().once();
     
+    HttpResponseBuilder builder = new HttpResponseBuilder();
 
-    replay();
-    UriUtils.copyResponseHeadersAndStatusCode(resp, response, false, false,
+    UriUtils.copyResponseHeadersAndStatusCode(resp, builder, false, false,
         UriUtils.DisallowedHeaders.OUTPUT_TRANSFER_DIRECTIVES,
         UriUtils.DisallowedHeaders.CACHING_DIRECTIVES);
-    verify();
+    
+    HttpResponse response = builder.create();
+    
+    // Date is added by HttpResponse.
+    assertEquals(3, response.getHeaders().size());
+    Iterator<String> headers = response.getHeaders("hello").iterator();
+    assertEquals("world1", headers.next());
+    assertEquals("world2", headers.next());
+    assertEquals(5000, response.getHttpStatusCode());
   }
 
   @Test
@@ -149,26 +137,21 @@ public class UriUtilsTest extends Servle
         .setHttpStatusCode(5000)
         .addHeader("hello", "world1")
         .addHeader("hello", "world2")
-        .addHeader("hello\\u2297", "bad header")
+        .addHeader("hello\u2297", "bad header")
         .addHeader("Content-length", "10")
         .addHeader("vary", "1")
         .create();
-    HttpServletResponse response = mock(HttpServletResponse.class);
-
-    response.setStatus(5000);
-    EasyMock.expectLastCall().once();
-
-    response.setHeader("hello", "world1");
-    EasyMock.expectLastCall().once();
-    response.setHeader("hello", "world2");
-    EasyMock.expectLastCall().once();
-
+    
+    HttpResponseBuilder builder = new HttpResponseBuilder();
 
-    replay();
-    UriUtils.copyResponseHeadersAndStatusCode(resp, response, false, true,
+    UriUtils.copyResponseHeadersAndStatusCode(resp, builder, false, true,
         UriUtils.DisallowedHeaders.OUTPUT_TRANSFER_DIRECTIVES,
         UriUtils.DisallowedHeaders.CACHING_DIRECTIVES);
-    verify();
+
+    HttpResponse response = builder.create();
+    assertEquals(2, response.getHeaders().size());
+    assertEquals("world2", response.getHeader("hello"));
+    assertEquals(5000, response.getHttpStatusCode());
   }
 
   @Test
@@ -177,26 +160,21 @@ public class UriUtilsTest extends Servle
         .setHttpStatusCode(500)
         .addHeader("hello", "world1")
         .addHeader("hello", "world2")
-        .addHeader("hello\\u2297", "bad header")
+        .addHeader("hello\u2297", "bad header")
         .addHeader("Content-length", "10")
         .addHeader("vary", "1")
         .create();
-    HttpServletResponse response = mock(HttpServletResponse.class);
 
-    response.setStatus(502);
-    EasyMock.expectLastCall().once();
+    HttpResponseBuilder builder = new HttpResponseBuilder();
 
-    response.setHeader("hello", "world1");
-    EasyMock.expectLastCall().once();
-    response.setHeader("hello", "world2");
-    EasyMock.expectLastCall().once();
-
-
-    replay();
-    UriUtils.copyResponseHeadersAndStatusCode(resp, response, true, true,
+    UriUtils.copyResponseHeadersAndStatusCode(resp, builder, true, true,
         UriUtils.DisallowedHeaders.OUTPUT_TRANSFER_DIRECTIVES,
         UriUtils.DisallowedHeaders.CACHING_DIRECTIVES);
-    verify();
+
+    HttpResponse response = builder.create();
+    assertEquals(2, response.getHeaders().size());
+    assertEquals("world2", response.getHeader("hello"));
+    assertEquals(502, response.getHttpStatusCode());
   }
 
   @Test
@@ -205,45 +183,37 @@ public class UriUtilsTest extends Servle
         .setHttpStatusCode(500)
         .addHeader("hello", "world1")
         .addHeader("hello", "world2")
-        .addHeader("hello\\u2297", "bad header")
+        .addHeader("hello\u2297", "bad header")
         .addHeader("Content-length", "10")
         .addHeader("vary", "1")
         .create();
-    HttpServletResponse response = mock(HttpServletResponse.class);
-
-    response.setStatus(500);
-    EasyMock.expectLastCall().once();
 
-    response.setHeader("hello", "world1");
-    EasyMock.expectLastCall().once();
-    response.setHeader("hello", "world2");
-    EasyMock.expectLastCall().once();
+    HttpResponseBuilder builder = new HttpResponseBuilder();
 
-
-    replay();
-    UriUtils.copyResponseHeadersAndStatusCode(resp, response, false, true,
+    UriUtils.copyResponseHeadersAndStatusCode(resp, builder, false, true,
         UriUtils.DisallowedHeaders.OUTPUT_TRANSFER_DIRECTIVES,
         UriUtils.DisallowedHeaders.CACHING_DIRECTIVES);
-    verify();
+
+    HttpResponse response = builder.create();
+    assertEquals(2, response.getHeaders().size());
+    assertEquals("world2", response.getHeader("hello"));
+    assertEquals(500, response.getHttpStatusCode());
   }
 
   @Test
   public void testCopyRequestHeaders() throws Exception {
-    HttpServletRequest request = mock(HttpServletRequest.class);
+    HttpRequest origRequest = new 
HttpRequest(Uri.parse("http://www.example.org/data.html";));
 
-    EasyMock.expect(request.getHeaderNames())
-        .andReturn(makeEnumeration("h1", "h2", "hello\\u2297",
-                                   "unchanged_header", "Content-Length"));
-    EasyMock.expect(request.getHeaders("h1"))
-        .andReturn(makeEnumeration("v1", "v2"));
-    EasyMock.expect(request.getHeaders("h2"))
-        .andReturn(makeEnumeration("v3", "v4"));
-    EasyMock.expect(request.getHeaders("hello\\u2297"))
-        .andReturn(makeEnumeration("v5", "v6"));
-    EasyMock.expect(request.getHeaders("unchanged_header"))
-        .andReturn(makeEnumeration());
-    EasyMock.expect(request.getHeaders("Content-Length"))
-        .andReturn(makeEnumeration("50", "100"));
+    Map<String, List<String>> addedHeaders =
+        ImmutableMap.<String, List<String>>builder()
+          .put("h1", ImmutableList.of("v1", "v2"))
+          .put("h2", ImmutableList.of("v3", "v4"))
+          .put("hello\u2297", ImmutableList.of("v5", "v6"))
+          .put("unchanged_header", ImmutableList.<String>of())
+          .put("Content-Length", ImmutableList.of("50", "100"))
+          .build();
+    
+    origRequest.addAllHeaders(addedHeaders);
 
     HttpRequest req = new HttpRequest(Uri.parse(
         "http://www.example.org/data.html";));
@@ -252,18 +222,16 @@ public class UriUtilsTest extends Servle
     req.addHeader("Content-Length", "10");
     req.addHeader("unchanged_header", "original_value");
 
-    replay();
-    UriUtils.copyRequestHeaders(request, req,
+    UriUtils.copyRequestHeaders(origRequest, req,
         UriUtils.DisallowedHeaders.POST_INCOMPATIBLE_DIRECTIVES);
-    verify();
 
     Map<String, List<String>> headers =
         ImmutableMap.<String, List<String>>builder()
         .put("h1", ImmutableList.of("v1", "v2"))
         .put("h2", ImmutableList.of("v3", "v4"))
-        .put("hello\\u2297", ImmutableList.of("v5", "v6"))
         .put("unchanged_header", ImmutableList.of("original_value"))
         .put("Content-Length", ImmutableList.of("10"))
+        .put(HttpRequest.DOS_PREVENTION_HEADER, ImmutableList.of("on"))
         .build();
 
     assertEquals(headers, req.getHeaders());
@@ -271,34 +239,16 @@ public class UriUtilsTest extends Servle
 
   @Test
   public void testCopyRequestData() throws Exception {
-    HttpServletRequest request = mock(HttpServletRequest.class);
-
-    expect(request.getMethod()).andReturn("Post").anyTimes();
-
-    final String data = "hello world";
-    ServletInputStream inputStream = mock(ServletInputStream.class);
-    expect(request.getInputStream()).andReturn(inputStream);
-    expect(inputStream.read((byte[]) EasyMock.anyObject()))
-        .andAnswer(new IAnswer<Integer>() {
-          public Integer answer() throws Throwable {
-            byte[] byteArray = (byte[]) EasyMock.getCurrentArguments()[0];
-            System.arraycopy(data.getBytes(), 0, byteArray, 0, data.length());
-            return data.length();
-          }
-        });
-    expect(inputStream.read((byte[]) EasyMock.anyObject()))
-        .andAnswer(new IAnswer<Integer>() {
-          public Integer answer() throws Throwable {
-            return -1;
-          }
-        });
-
+    HttpRequest origRequest = new 
HttpRequest(Uri.parse("http://www.example.com";));
+    origRequest.setMethod("Post");
+    
+    String data = "hello world";
+    origRequest.setPostBody(data.getBytes());
+    
     HttpRequest req = new HttpRequest(Uri.parse(
         "http://www.example.org/data.html";));
 
-    replay();
-    UriUtils.copyRequestData(request, req);
-    verify();
+    UriUtils.copyRequestData(origRequest, req);
 
     assertEquals(data, req.getPostBodyAsString());
   }


Reply via email to