You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by zh...@apache.org on 2010/10/09 02:10:12 UTC

svn commit: r1006080 - in /shindig/trunk/java: common/src/main/java/org/apache/shindig/protocol/conversion/ common/src/test/java/org/apache/shindig/protocol/conversion/ gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ gadgets/src/test/java/org...

Author: zhoresh
Date: Sat Oct  9 00:10:12 2010
New Revision: 1006080

URL: http://svn.apache.org/viewvc?rev=1006080&view=rev
Log:
Ref http://codereview.appspot.com/2341050/
Add Delegator verifier that check added fields

Added:
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java
      - copied, changed from r1005531, shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java
Removed:
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java
Modified:
    shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java
    shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java

Modified: shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java?rev=1006080&r1=1006079&r2=1006080&view=diff
==============================================================================
--- shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java (original)
+++ shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/conversion/BeanDelegator.java Sat Oct  9 00:10:12 2010
@@ -319,6 +319,19 @@ public class BeanDelegator {
     return (delegatedClasses.get(dataType) == interfaceType);
   }
 
+  /**
+   * Validate a delegator object has all fields defined.
+   * With the field list option, classes can be delegated without being complete.
+   * This helper method should be used to verify that no field was missed.
+   */
+  public static void validateDelegator(Object o)
+      throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
+    for (Method method : o.getClass().getInterfaces()[0].getMethods()) {
+      if (method.getName().startsWith("get")) {
+        Object val = method.invoke(o);
+      }
+    }
+  }
 
   /**
    * Utility function to auto generate mapping between two enums that have same values (toString)

Modified: shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java?rev=1006080&r1=1006079&r2=1006080&view=diff
==============================================================================
--- shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java (original)
+++ shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/conversion/BeanDelegatorTest.java Sat Oct  9 00:10:12 2010
@@ -27,6 +27,7 @@ import org.apache.shindig.protocol.conve
 import org.junit.Before;
 import org.junit.Test;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.List;
 import java.util.Map;
 
@@ -222,4 +223,26 @@ public class BeanDelegatorTest extends A
   public void tesValidate() throws Exception {
     beanDelegator.validate();
   }
+
+  @Test
+  public void testValidateGoodBean() throws Exception {
+    TokenInter p = beanDelegator.createDelegator(null, TokenInter.class,
+        ImmutableMap.<String, Object>of("container", "open", "id", "test"));
+    BeanDelegator.validateDelegator(p);
+  }
+
+  @Test(expected = InvocationTargetException.class)
+  public void testValidateWrongtype() throws Exception {
+    TokenInter p = beanDelegator.createDelegator(null, TokenInter.class,
+        ImmutableMap.<String, Object>of("container", "open", "id", new Integer(5)));
+    BeanDelegator.validateDelegator(p);
+  }
+
+  @Test(expected = InvocationTargetException.class)
+  public void testValidateMissingField() throws Exception {
+    TokenInter p = beanDelegator.createDelegator(null, TokenInter.class,
+        ImmutableMap.<String, Object>of("container", "open"));
+    BeanDelegator.validateDelegator(p);
+  }
+
 }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java?rev=1006080&r1=1006079&r2=1006080&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerService.java Sat Oct  9 00:10:12 2010
@@ -249,14 +249,15 @@ public class GadgetsHandlerService {
   public GadgetsHandlerApi.BaseResponse createErrorResponse(Uri url, int code, String error) {
     GadgetsHandlerApi.Error errorBean = beanDelegator.createDelegator(
         null, GadgetsHandlerApi.Error.class, ImmutableMap.<String, Object>of(
-          "message", error, "code", code));
+          "message", BeanDelegator.nullable(error), "code", code));
 
     return beanDelegator.createDelegator(error, GadgetsHandlerApi.BaseResponse.class,
         ImmutableMap.<String, Object>of("url", BeanDelegator.nullable(url), "error", errorBean,
             "responsetimems", BeanDelegator.NULL, "expiretimems", BeanDelegator.NULL));
   }
 
-  private GadgetsHandlerApi.MetadataResponse createMetadataResponse(
+  @VisibleForTesting
+  GadgetsHandlerApi.MetadataResponse createMetadataResponse(
       Uri url, GadgetSpec spec, String iframeUrl, Boolean needsTokenRefresh,
       Set<String> fields, Long expireTime) {
     return (GadgetsHandlerApi.MetadataResponse) beanFilter.createFilteredBean(
@@ -271,7 +272,8 @@ public class GadgetsHandlerService {
         fields);
   }
 
-  private GadgetsHandlerApi.TokenResponse createTokenResponse(
+  @VisibleForTesting
+  GadgetsHandlerApi.TokenResponse createTokenResponse(
       Uri url, String token, Set<String> fields, Long tokenExpire) {
     return (GadgetsHandlerApi.TokenResponse) beanFilter.createFilteredBean(
         beanDelegator.createDelegator("empty", GadgetsHandlerApi.TokenResponse.class,

Copied: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java (from r1005531, shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java)
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java?p2=shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java&p1=shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java&r1=1005531&r2=1006080&rev=1006080&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetHandlerServiceTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetsHandlerServiceTest.java Sat Oct  9 00:10:12 2010
@@ -19,6 +19,7 @@
 package org.apache.shindig.gadgets.servlet;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 
 import org.apache.shindig.auth.SecurityToken;
@@ -29,6 +30,7 @@ import org.apache.shindig.common.uri.Uri
 import org.apache.shindig.common.util.FakeTimeSource;
 import org.apache.shindig.gadgets.features.FeatureRegistry;
 import org.apache.shindig.gadgets.process.ProcessingException;
+import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.protocol.conversion.BeanDelegator;
 import org.apache.shindig.protocol.conversion.BeanFilter;
 import org.easymock.EasyMock;
@@ -38,7 +40,7 @@ import org.junit.Test;
 import java.util.List;
 import java.util.Map;
 
-public class GadgetHandlerServiceTest extends EasyMockTestCase {
+public class GadgetsHandlerServiceTest extends EasyMockTestCase {
 
   private static final String TOKEN = "<token data>";
   private static final String OWNER = "<owner>";
@@ -230,6 +232,69 @@ public class GadgetHandlerServiceTest ex
     verify();
   }
 
+  @Test
+  public void testCreateErrorResponse() throws Exception {
+    GadgetsHandlerApi.BaseResponse res = gadgetHandler.createErrorResponse(null, 404, null);
+    assertEquals(404, res.getError().getCode());
+    assertNull(res.getError().getMessage());
+    assertNull(res.getUrl());
+    BeanDelegator.validateDelegator(res);
+    res = gadgetHandler.createErrorResponse(Uri.parse("url"), 500, "error");
+    assertEquals("error", res.getError().getMessage());
+    assertEquals("url", res.getUrl().toString());
+    BeanDelegator.validateDelegator(res);
+  }
+
+  @Test
+  public void testCreateErrorResponseFromException() throws Exception {
+    GadgetsHandlerApi.BaseResponse res = gadgetHandler.createErrorResponse(
+        Uri.parse("url"), new RuntimeException("test"), "error");
+    assertEquals("error", res.getError().getMessage());
+    assertEquals("url", res.getUrl().toString());
+    assertEquals(500, res.getError().getCode());
+    BeanDelegator.validateDelegator(res);
+    res = gadgetHandler.createErrorResponse(
+        Uri.parse("url"), new ProcessingException("test", 404), "error");
+    assertEquals("test", res.getError().getMessage());
+    assertEquals("url", res.getUrl().toString());
+    assertEquals(404, res.getError().getCode());
+    BeanDelegator.validateDelegator(res);
+  }
+
+  @Test
+  public void testCreateMetadataResponse() throws Exception {
+    GadgetsHandlerApi.MetadataResponse res = gadgetHandler.createMetadataResponse(
+        Uri.parse("gadgeturl"), new GadgetSpec(Uri.parse("#"), FakeProcessor.SPEC_XML),
+        null, null, ImmutableSet.of("*"), null);
+    assertNull(res.getIframeUrl());
+    assertNull(res.getNeedsTokenRefresh());
+    assertNull(res.getExpireTimeMs());
+    assertEquals(FakeProcessor.SPEC_TITLE, res.getModulePrefs().getTitle());
+    BeanDelegator.validateDelegator(res);
+    res = gadgetHandler.createMetadataResponse(
+        Uri.parse("gadgeturl"), new GadgetSpec(Uri.parse("#"), FakeProcessor.SPEC_XML),
+        "iframeurl", true, ImmutableSet.of("*"), 3L);
+    assertEquals("iframeurl", res.getIframeUrl());
+    assertEquals(true, res.getNeedsTokenRefresh().booleanValue());
+    assertEquals(3L, res.getExpireTimeMs().longValue());
+    BeanDelegator.validateDelegator(res);
+  }
+
+  @Test
+  public void testCreateTokenResponse() throws Exception {
+    GadgetsHandlerApi.TokenResponse res = gadgetHandler.createTokenResponse(Uri.parse("#"), null,
+        ImmutableSet.of("*"), null);
+    BeanDelegator.validateDelegator(res);
+    assertNull(res.getToken());
+    assertNull(res.getExpireTimeMs());
+    res = gadgetHandler.createTokenResponse(Uri.parse("#"), "token",
+        ImmutableSet.of("*"), 100L);
+    BeanDelegator.validateDelegator(res);
+    assertEquals("token", res.getToken());
+    assertEquals(100L, res.getExpireTimeMs().longValue());
+
+  }
+
   private GadgetsHandlerApi.TokenData createTokenData(String ownerId, String viewerId) {
     GadgetsHandlerApi.TokenData token = mock(GadgetsHandlerApi.TokenData.class);
     if (ownerId != null) {