You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by lr...@apache.org on 2009/02/02 19:39:16 UTC
svn commit: r740067 [2/2] - in /incubator/shindig/trunk/java:
server/src/test/java/org/apache/shindig/server/endtoend/
social-api/src/main/java/org/apache/shindig/social/core/config/
social-api/src/main/java/org/apache/shindig/social/opensocial/service...
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java?rev=740067&r1=740066&r2=740067&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/SocialApiTestsGuiceModule.java Mon Feb 2 18:39:12 2009
@@ -19,14 +19,22 @@
package org.apache.shindig.social;
import org.apache.shindig.common.servlet.ParameterFetcher;
+import org.apache.shindig.config.ContainerConfig;
+import org.apache.shindig.config.JsonContainerConfig;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXStreamConverter;
+import org.apache.shindig.social.opensocial.service.ActivityHandler;
+import org.apache.shindig.social.opensocial.service.AppDataHandler;
import org.apache.shindig.social.opensocial.service.BeanConverter;
import org.apache.shindig.social.opensocial.service.DataServiceServletFetcher;
+import org.apache.shindig.social.opensocial.service.PersonHandler;
+import com.google.common.collect.Lists;
import com.google.inject.AbstractModule;
import com.google.inject.name.Names;
+import java.util.List;
+
/**
* Provides social api component injection for all large tests
*/
@@ -44,7 +52,14 @@
BeanXStreamConverter.class);
bind(BeanConverter.class).annotatedWith(Names.named("shindig.bean.converter.json")).to(
BeanJsonConverter.class);
-
+ bind(List.class).annotatedWith(Names.named("org.apache.shindig.handlers"))
+ .toInstance(Lists.immutableList(ActivityHandler.class, AppDataHandler.class,
+ PersonHandler.class));
+
+ bind(String.class).annotatedWith(
+ Names.named("shindig.containers.default"))
+ .toInstance("res://containers/default/container.js");
+ bind(ContainerConfig.class).to(JsonContainerConfig.class);
}
}
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java?rev=740067&r1=740066&r2=740067&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java Mon Feb 2 18:39:12 2009
@@ -17,44 +17,37 @@
*/
package org.apache.shindig.social.dataservice.integration;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-import junit.framework.TestCase;
-
-import org.apache.shindig.common.testing.FakeGadgetToken;
+import org.apache.shindig.auth.AuthInfo;
import org.apache.shindig.common.EasyMockTestCase;
+import org.apache.shindig.common.testing.FakeGadgetToken;
+import org.apache.shindig.common.testing.FakeHttpServletRequest;
import org.apache.shindig.social.SocialApiTestsGuiceModule;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXStreamAtomConverter;
import org.apache.shindig.social.core.util.BeanXStreamConverter;
import org.apache.shindig.social.core.util.xstream.XStream081Configuration;
import org.apache.shindig.social.opensocial.service.DataServiceServlet;
-import org.apache.shindig.social.opensocial.service.HandlerDispatcher;
+import org.apache.shindig.social.opensocial.service.HandlerRegistry;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
import org.easymock.EasyMock;
import org.json.JSONObject;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintWriter;
+import java.util.List;
+import java.util.Map;
public abstract class AbstractLargeRestfulTests extends EasyMockTestCase {
protected static final String XMLSCHEMA = " xmlns=\"http://ns.opensocial.org/2008/opensocial\" \n"
@@ -62,8 +55,6 @@
+ " xsi:schemaLocation=\"http://ns.opensocial.org/2008/opensocial classpath:opensocial.xsd\" ";
protected static final String XSDRESOURCE = "opensocial.xsd";
- private HttpServletRequest req;
-
private HttpServletResponse res;
private DataServiceServlet servlet;
@@ -71,13 +62,6 @@
private static final FakeGadgetToken FAKE_GADGET_TOKEN = new FakeGadgetToken()
.setOwnerId("john.doe").setViewerId("john.doe");
- protected HttpServletRequest getRequest() {
- return req;
- }
- protected void setRequest(HttpServletRequest req) {
- this.req = req;
- }
-
protected HttpServletResponse getResponse() {
return res;
}
@@ -100,12 +84,11 @@
servlet = new DataServiceServlet();
- servlet.setHandlerDispatcher(injector.getInstance(HandlerDispatcher.class));
+ servlet.setHandlerRegistry(injector.getInstance(HandlerRegistry.class));
servlet.setBeanConverters(new BeanJsonConverter(injector),
new BeanXStreamConverter(new XStream081Configuration(injector)),
new BeanXStreamAtomConverter(new XStream081Configuration(injector)));
- req = EasyMock.createMock(HttpServletRequest.class);
res = EasyMock.createMock(HttpServletResponse.class);
}
@@ -130,43 +113,23 @@
protected String getResponse(String path, String method,
Map<String, String> extraParams, String postData, String format,
String contentType) throws Exception {
- EasyMock.expect(req.getCharacterEncoding()).andStubReturn("UTF-8");
- EasyMock.expect(req.getPathInfo()).andStubReturn(path);
- EasyMock.expect(req.getMethod()).andStubReturn(method);
- EasyMock.expect(req.getParameter("format")).andStubReturn(format);
- EasyMock.expect(req.getParameter("X-HTTP-Method-Override")).andStubReturn(
- method);
-
- EasyMock.expect(req.getAttribute(EasyMock.isA(String.class))).andReturn(
- FAKE_GADGET_TOKEN);
-
- Vector<String> vector = new Vector<String>(extraParams.keySet());
- EasyMock.expect(req.getParameterNames()).andStubReturn(vector.elements());
-
- for (Map.Entry<String, String> entry : extraParams.entrySet()) {
- if (entry.getValue() != null) {
- EasyMock.expect(req.getParameterValues(entry.getKey())).andStubReturn(
- new String[] { entry.getValue() });
- } else {
- EasyMock.expect(req.getParameterValues(entry.getKey())).andStubReturn(
- new String[] {});
- }
- }
-
- if (postData == null) {
- postData = "";
+ FakeHttpServletRequest req = new FakeHttpServletRequest();
+ req.setCharacterEncoding("UTF-8");
+ req.setPathInfo(path);
+ req.setParameter("format",format);
+ req.setParameter("X-HTTP-Method-Override", method);
+ req.setAttribute(AuthInfo.Attribute.SECURITY_TOKEN.getId(), FAKE_GADGET_TOKEN);
+ for (Map.Entry<String,String> entry : extraParams.entrySet()) {
+ req.setParameter(entry.getKey(), entry.getValue());
}
if (!("GET").equals(method) && !("HEAD").equals(method)) {
- final InputStream stream = new ByteArrayInputStream(postData.getBytes());
- ServletInputStream servletStream = new ServletInputStream() {
- @Override
- public int read() throws IOException {
- return stream.read();
- }
- };
- EasyMock.expect(req.getInputStream()).andReturn(servletStream);
+ if (postData == null) {
+ postData = "";
+ }
+ req.setPostData(postData.getBytes());
}
+ req.setMethod(method);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrintWriter writer = new PrintWriter(outputStream);
@@ -174,10 +137,10 @@
res.setCharacterEncoding("UTF-8");
res.setContentType(contentType);
- EasyMock.replay(req, res);
+ EasyMock.replay(res);
servlet.service(req, res);
- EasyMock.verify(req, res);
- EasyMock.reset(req, res);
+ EasyMock.verify(res);
+ EasyMock.reset(res);
writer.flush();
return outputStream.toString();
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java?rev=740067&r1=740066&r2=740067&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/ActivityHandlerTest.java Mon Feb 2 18:39:12 2009
@@ -17,12 +17,10 @@
*/
package org.apache.shindig.social.opensocial.service;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Sets;
-
+import org.apache.shindig.common.EasyMockTestCase;
import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.common.util.ImmediateFuture;
-import org.apache.shindig.common.EasyMockTestCase;
+import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.social.core.model.ActivityImpl;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.opensocial.model.Activity;
@@ -32,10 +30,19 @@
import org.apache.shindig.social.opensocial.spi.RestfulCollection;
import org.apache.shindig.social.opensocial.spi.SocialSpiException;
import org.apache.shindig.social.opensocial.spi.UserId;
-import org.easymock.classextension.EasyMock;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.classextension.EasyMock.eq;
+import static org.easymock.classextension.EasyMock.isNull;
+
+import java.io.StringReader;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.Future;
public class ActivityHandlerTest extends EasyMockTestCase {
@@ -47,53 +54,41 @@
private FakeGadgetToken token;
- private RestfulRequestItem request;
-
private static final Set<UserId> JOHN_DOE = Sets
.newHashSet(new UserId(UserId.Type.userId, "john.doe"));
+ protected HandlerRegistry registry;
+ protected ContainerConfig containerConfig;
+
@Override
protected void setUp() throws Exception {
super.setUp();
token = new FakeGadgetToken();
token.setAppId("appId");
- converter = EasyMock.createMock(BeanJsonConverter.class);
- activityService = EasyMock.createMock(ActivityService.class);
- handler = new ActivityHandler(activityService);
- }
- @Override
- protected void replay() {
- EasyMock.replay(converter);
- EasyMock.replay(activityService);
- }
-
- @Override
- protected void verify() {
- EasyMock.verify(converter);
- EasyMock.verify(activityService);
- }
-
- private void setPath(String path) {
- this.setPathAndPostData(path, null);
- }
-
- private void setPathAndPostData(String path, String postData) {
- request = new RestfulRequestItem(path, "GET", postData, token, converter);
+ converter = mock(BeanJsonConverter.class);
+ activityService = mock(ActivityService.class);
+ containerConfig = mock(ContainerConfig.class);
+ handler = new ActivityHandler(activityService, containerConfig);
+ registry = new DefaultHandlerRegistry(null, Lists.newArrayList(handler));
}
private void assertHandleGetForGroup(GroupId.Type group) throws Exception {
- setPath("/activities/john.doe/@" + group.toString());
+ String path = "/activities/john.doe/@" + group.toString();
+ RestHandler operation = registry.getRestHandler(path, "GET");
List<Activity> activityList = ImmutableList.of();
RestfulCollection<Activity> data = new RestfulCollection<Activity>(activityList);
- org.easymock.EasyMock.expect(activityService.getActivities(JOHN_DOE,
- new GroupId(group, null), null, Sets.<String>newHashSet(), new CollectionOptions(request), token)).andReturn(
- ImmediateFuture.newInstance(data));
+ org.easymock.EasyMock.expect(activityService.getActivities(eq(JOHN_DOE),
+ eq(new GroupId(group, null)), (String)isNull(), eq(Sets.<String>newHashSet()),
+ org.easymock.EasyMock.isA(CollectionOptions.class), eq(token))).
+ andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
+ reset();
}
public void testHandleGetAll() throws Exception {
@@ -109,70 +104,102 @@
}
public void testHandleGetPlural() throws Exception {
- setPath("/activities/john.doe,jane.doe/@self/@app");
+ String path = "/activities/john.doe,jane.doe/@self/@app";
+ RestHandler operation = registry.getRestHandler(path, "GET");
List<Activity> activities = ImmutableList.of();
RestfulCollection<Activity> data = new RestfulCollection<Activity>(activities);
Set<UserId> userIdSet = Sets.newLinkedHashSet(JOHN_DOE);
userIdSet.add(new UserId(UserId.Type.userId, "jane.doe"));
- org.easymock.EasyMock.expect(activityService.getActivities(userIdSet,
- new GroupId(GroupId.Type.self, null), "appId", Sets.<String>newHashSet(), new CollectionOptions(request), token)).andReturn(
+ org.easymock.EasyMock.expect(activityService.getActivities(eq(userIdSet),
+ eq(new GroupId(GroupId.Type.self, null)), eq("appId"),eq(Sets.<String>newHashSet()),
+ org.easymock.EasyMock.isA((CollectionOptions.class)), eq(token))).andReturn(
ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
+ reset();
}
public void testHandleGetActivityById() throws Exception {
- setPath("/people/john.doe/@friends/@app/1");
+ String path = "/activities/john.doe/@friends/@app/1";
+ RestHandler operation = registry.getRestHandler(path, "GET");
Activity activity = new ActivityImpl();
- org.easymock.EasyMock.expect(activityService.getActivity(JOHN_DOE.iterator().next(),
- new GroupId(GroupId.Type.friends, null),
- "appId", Sets.<String>newHashSet(), "1", token)).andReturn(
+ org.easymock.EasyMock.expect(activityService.getActivity(eq(JOHN_DOE.iterator().next()),
+ eq(new GroupId(GroupId.Type.friends, null)),
+ eq("appId"), eq(Sets.<String>newHashSet()), eq("1"), eq(token))).andReturn(
ImmediateFuture.newInstance(activity));
replay();
- assertEquals(activity, handler.handleGet(request).get());
+ assertEquals(activity, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
+ reset();
}
- private void setupPostData() throws SocialSpiException {
+ private Future setupBodyRequest(String method) throws SocialSpiException {
String jsonActivity = "{title: hi mom!, etc etc}";
- setPathAndPostData("/people/john.doe/@self/@app", jsonActivity);
+ String path = "/activities/john.doe/@self/@app";
+ RestHandler operation = registry.getRestHandler(path, method);
Activity activity = new ActivityImpl();
- org.easymock.EasyMock.expect(converter.convertToObject(jsonActivity, Activity.class)).andReturn(activity);
+ org.easymock.EasyMock.expect(converter.convertToObject(eq(jsonActivity), eq(Activity.class)))
+ .andReturn(activity);
- org.easymock.EasyMock.expect(activityService.createActivity(JOHN_DOE.iterator().next(),
- new GroupId(GroupId.Type.self, null), "appId", Sets.<String>newHashSet(),
- activity, token)).andReturn(ImmediateFuture.newInstance((Void) null));
+ org.easymock.EasyMock.expect(activityService.createActivity(eq(JOHN_DOE.iterator().next()),
+ eq(new GroupId(GroupId.Type.self, null)), eq("appId"), eq(Sets.<String>newHashSet()),
+ eq(activity), eq(token))).andReturn(ImmediateFuture.newInstance((Void) null));
replay();
+
+ return operation.execute(path, Maps.<String, String[]>newHashMap(),
+ new StringReader(jsonActivity), token, converter);
}
public void testHandlePost() throws Exception {
- setupPostData();
- assertNull(handler.handlePost(request).get());
+ Future future = setupBodyRequest("POST");
+ assertNull(future.get());
verify();
+ reset();
}
public void testHandlePut() throws Exception {
- setupPostData();
- assertNull(handler.handlePut(request).get());
+ Future future = setupBodyRequest("PUT");
+ assertNull(future.get());
verify();
+ reset();
}
public void testHandleDelete() throws Exception {
- setPath("/people/john.doe/@self/@app/1");
+ String path = "/activities/john.doe/@self/@app/1";
+ RestHandler operation = registry.getRestHandler(path, "DELETE");
+
+
+ org.easymock.EasyMock.expect(activityService.deleteActivities(eq(JOHN_DOE.iterator().next()),
+ eq(new GroupId(GroupId.Type.self, null)), eq("appId"), eq(Sets.newHashSet("1")),
+ eq(token))).andReturn(ImmediateFuture.newInstance((Void) null));
+
+ replay();
+ assertNull(operation.execute(path, Maps.<String, String[]>newHashMap(), null,
+ token, converter).get());
+ verify();
+ reset();
+ }
+
+ public void testHandleGetSuportedFields() throws Exception {
+ String path = "/activities/@supportedFields";
+ RestHandler operation = registry.getRestHandler(path, "GET");
- org.easymock.EasyMock.expect(activityService.deleteActivities(JOHN_DOE.iterator().next(),
- new GroupId(GroupId.Type.self, null), "appId", Sets.newHashSet("1"), token)).andReturn(
- ImmediateFuture.newInstance((Void) null));
+ List<Object> list = ImmutableList.<Object>of("id", "title");
+ expect(containerConfig.getList(eq("default"),
+ eq("${gadgets\\.features.opensocial-0\\.8.supportedFields.activity}"))).andReturn(list);
replay();
- assertNull(handler.handleDelete(request).get());
+ assertEquals(list, operation.execute(path, Maps.<String, String[]>newHashMap(), null,
+ token, converter).get());
verify();
}
}
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/AppDataHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/AppDataHandlerTest.java?rev=740067&r1=740066&r2=740067&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/AppDataHandlerTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/AppDataHandlerTest.java Mon Feb 2 18:39:12 2009
@@ -17,24 +17,30 @@
*/
package org.apache.shindig.social.opensocial.service;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
+import org.apache.shindig.common.EasyMockTestCase;
import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.common.util.ImmediateFuture;
-import org.apache.shindig.common.EasyMockTestCase;
+import org.apache.shindig.social.ResponseError;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.opensocial.spi.AppDataService;
import org.apache.shindig.social.opensocial.spi.DataCollection;
import org.apache.shindig.social.opensocial.spi.GroupId;
import org.apache.shindig.social.opensocial.spi.SocialSpiException;
import org.apache.shindig.social.opensocial.spi.UserId;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import org.easymock.classextension.EasyMock;
+import static org.easymock.classextension.EasyMock.eq;
+import java.io.StringReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
public class AppDataHandlerTest extends EasyMockTestCase {
@@ -42,11 +48,9 @@
private AppDataService appDataService;
- private AppDataHandler handler;
-
private FakeGadgetToken token;
- private RestfulRequestItem request;
+ protected HandlerRegistry registry;
private static final Set<UserId> JOHN_DOE = Collections.unmodifiableSet(Sets
@@ -57,50 +61,25 @@
protected void setUp() throws Exception {
super.setUp();
token = new FakeGadgetToken();
- converter = EasyMock.createMock(BeanJsonConverter.class);
- appDataService = EasyMock.createMock(AppDataService.class);
- handler = new AppDataHandler(appDataService);
- }
-
- @Override
- protected void replay() {
- EasyMock.replay(converter);
- EasyMock.replay(appDataService);
- }
-
- @Override
- protected void verify() {
- EasyMock.verify(converter);
- EasyMock.verify(appDataService);
- }
-
- private void setPath(String path) {
- Map<String, String> params = Maps.newHashMap();
- params.put("fields", null);
- this.setPathAndParams(path, params);
- }
-
- private void setPathAndParams(String path, Map<String, String> params) {
- setPathAndParams(path, params, null);
- }
-
- private void setPathAndParams(String path, Map<String, String> params, String postData) {
- request = new RestfulRequestItem(path, "GET", postData, token, converter);
- for (Map.Entry<String, String> entry : params.entrySet()) {
- request.setParameter(entry.getKey(), entry.getValue());
- }
+ converter = mock(BeanJsonConverter.class);
+ appDataService = mock(AppDataService.class);
+ AppDataHandler handler = new AppDataHandler(appDataService);
+ registry = new DefaultHandlerRegistry(null, Lists.newArrayList(handler));
}
private void assertHandleGetForGroup(GroupId.Type group) throws Exception {
- setPath("/activities/john.doe/@" + group.toString() + "/appId");
+ String path = "/appdata/john.doe/@" + group.toString() + "/appId";
+ RestHandler operation = registry.getRestHandler(path, "GET");
DataCollection data = new DataCollection(null);
- org.easymock.EasyMock.expect(appDataService.getPersonData(JOHN_DOE,
- new GroupId(group, null),
- "appId", Sets.<String>newHashSet(), token)).andReturn(ImmediateFuture.newInstance(data));
+ org.easymock.EasyMock.expect(appDataService.getPersonData(eq(JOHN_DOE),
+ eq(new GroupId(group, null)),
+ eq("appId"), eq(Sets.<String>newHashSet()), eq(token)))
+ .andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
}
@@ -117,61 +96,69 @@
}
public void testHandleGetPlural() throws Exception {
- setPath("/activities/john.doe,jane.doe/@self/appId");
+ String path = "/appdata/john.doe,jane.doe/@self/appId";
+ RestHandler operation = registry.getRestHandler(path, "GET");
DataCollection data = new DataCollection(null);
Set<UserId> userIdSet = Sets.newLinkedHashSet(JOHN_DOE);
userIdSet.add(new UserId(UserId.Type.userId, "jane.doe"));
- org.easymock.EasyMock.expect(appDataService.getPersonData(userIdSet,
- new GroupId(GroupId.Type.self, null),
- "appId", Sets.<String>newHashSet(), token)).andReturn(ImmediateFuture.newInstance(data));
+ org.easymock.EasyMock.expect(appDataService.getPersonData(eq(userIdSet),
+ eq(new GroupId(GroupId.Type.self, null)),
+ eq("appId"), eq(Sets.<String>newHashSet()), eq(token)))
+ .andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
}
public void testHandleGetWithoutFields() throws Exception {
- Map<String, String> params = Maps.newHashMap();
- params.put("fields", "pandas");
- setPathAndParams("/appData/john.doe/@friends/appId", params);
+ String path = "/appdata/john.doe/@friends/appId";
+ RestHandler operation = registry.getRestHandler(path, "GET");
+
+ Map<String, String[]> params = Maps.newHashMap();
+ params.put("fields", new String[]{"pandas"});
DataCollection data = new DataCollection(null);
- org.easymock.EasyMock.expect(appDataService.getPersonData(JOHN_DOE,
- new GroupId(GroupId.Type.friends, null),
- "appId", Sets.newHashSet("pandas"), token)).andReturn(ImmediateFuture.newInstance(data));
+ org.easymock.EasyMock.expect(appDataService.getPersonData(eq(JOHN_DOE),
+ eq(new GroupId(GroupId.Type.friends, null)),
+ eq("appId"), eq(Sets.newHashSet("pandas")), eq(token)))
+ .andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, params, null, token, converter).get());
verify();
}
- private void setupPostData() throws SocialSpiException {
+ private Future setupPostData(String method) throws SocialSpiException {
+ String path = "/appdata/john.doe/@self/appId";
+ RestHandler operation = registry.getRestHandler(path, method);
+
String jsonAppData = "{pandas: 'are fuzzy'}";
- Map<String, String> params = Maps.newHashMap();
- params.put("fields", "pandas");
- setPathAndParams("/appData/john.doe/@self/appId", params, jsonAppData);
+ Map<String, String[]> params = Maps.newHashMap();
+ params.put("fields", new String[]{"pandas"});
HashMap<String, String> values = Maps.newHashMap();
- org.easymock.EasyMock.expect(converter.convertToObject(jsonAppData, HashMap.class)).andReturn(values);
+ org.easymock.EasyMock.expect(converter.convertToObject(eq(jsonAppData), eq(HashMap.class)))
+ .andReturn(values);
- org.easymock.EasyMock.expect(appDataService.updatePersonData(JOHN_DOE.iterator().next(),
- new GroupId(GroupId.Type.self, null),
- "appId", Sets.newHashSet("pandas"), values, token))
+ org.easymock.EasyMock.expect(appDataService.updatePersonData(eq(JOHN_DOE.iterator().next()),
+ eq(new GroupId(GroupId.Type.self, null)),
+ eq("appId"), eq(Sets.newHashSet("pandas")), eq(values), eq(token)))
.andReturn(ImmediateFuture.newInstance((Void) null));
replay();
+ return operation.execute(path, params, new StringReader(jsonAppData), token, converter);
}
public void testHandlePost() throws Exception {
- setupPostData();
- assertNull(handler.handlePost(request).get());
+ assertNull(setupPostData("POST").get());
verify();
}
public void testHandlePut() throws Exception {
- setupPostData();
- assertNull(handler.handlePut(request).get());
+ assertNull(setupPostData("PUT").get());
verify();
}
@@ -180,23 +167,26 @@
* @throws Exception if the test fails
*/
public void testHandleNullPostDataKeys() throws Exception {
+ String path = "/appdata/john.doe/@self/appId";
+ RestHandler operation = registry.getRestHandler(path, "POST");
String jsonAppData = "{pandas: 'are fuzzy'}";
- Map<String, String> params = Maps.newHashMap();
- params.put("fields", "pandas");
- setPathAndParams("/appData/john.doe/@self/appId", params, jsonAppData);
+ Map<String, String[]> params = Maps.newHashMap();
+ params.put("fields", new String[]{"pandas"});
HashMap<String, String> values = Maps.newHashMap();
// create an invalid set of app data and inject
values.put("Aokkey", "an ok key");
values.put("", "an empty value");
- org.easymock.EasyMock.expect(converter.convertToObject(jsonAppData, HashMap.class)).andReturn(values);
+ org.easymock.EasyMock.expect(converter.convertToObject(eq(jsonAppData), eq(HashMap.class)))
+ .andReturn(values);
replay();
try {
- handler.handlePost(request).get();
+ operation.execute(path, params, new StringReader(jsonAppData), token, converter).get();
fail();
- } catch (SocialSpiException spi) {
+ } catch (ExecutionException ee) {
+ assertEquals(((SocialSpiException)ee.getCause()).getError(), ResponseError.BAD_REQUEST);
// was expecting an Exception
}
verify();
@@ -206,41 +196,44 @@
* @throws Exception if the test fails
*/
public void testHandleInvalidPostDataKeys() throws Exception {
+ String path = "/appdata/john.doe/@self/appId";
+ RestHandler operation = registry.getRestHandler(path, "POST");
String jsonAppData = "{pandas: 'are fuzzy'}";
- Map<String, String> params = Maps.newHashMap();
- params.put("fields", "pandas");
- setPathAndParams("/appData/john.doe/@self/appId", params, jsonAppData);
+ Map<String, String[]> params = Maps.newHashMap();
+ params.put("fields", new String[]{"pandas"});
HashMap<String, String> values = Maps.newHashMap();
// create an invalid set of app data and inject
values.put("Aokkey", "an ok key");
values.put("a bad key", "a good value");
- org.easymock.EasyMock.expect(converter.convertToObject(jsonAppData, HashMap.class)).andReturn(values);
+ org.easymock.EasyMock.expect(converter.convertToObject(eq(jsonAppData), eq(HashMap.class)))
+ .andReturn(values);
replay();
try {
- handler.handlePost(request).get();
+ operation.execute(path, params, new StringReader(jsonAppData), token, converter).get();
fail();
- } catch (SocialSpiException spi) {
- // was expecting an Exception
+ } catch (ExecutionException ee) {
+ assertEquals(((SocialSpiException)ee.getCause()).getError(), ResponseError.BAD_REQUEST);
}
verify();
}
public void testHandleDelete() throws Exception {
- Map<String, String> params = Maps.newHashMap();
- params.put("fields", "pandas");
- setPathAndParams("/appData/john.doe/@self/appId", params);
-
- EasyMock.expect(appDataService.deletePersonData(JOHN_DOE.iterator().next(),
- new GroupId(GroupId.Type.self, null),
- "appId", Sets.newHashSet("pandas"), token))
+ Map<String, String[]> params = Maps.newHashMap();
+ params.put("fields", new String[]{"pandas"});
+ String path = "/appdata/john.doe/@self/appId";
+ RestHandler operation = registry.getRestHandler(path, "DELETE");
+
+ EasyMock.expect(appDataService.deletePersonData(eq(JOHN_DOE.iterator().next()),
+ eq(new GroupId(GroupId.Type.self, null)),
+ eq("appId"), eq(Sets.newHashSet("pandas")), eq(token)))
.andReturn(ImmediateFuture.newInstance((Void) null));
replay();
- assertNull(handler.handleDelete(request).get());
+ assertNull(operation.execute(path, params, null, token, converter).get());
verify();
}
}
Added: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/BaseRequestItemTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/BaseRequestItemTest.java?rev=740067&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/BaseRequestItemTest.java (added)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/BaseRequestItemTest.java Mon Feb 2 18:39:12 2009
@@ -0,0 +1,139 @@
+/*
+ * 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.social.opensocial.service;
+
+import org.apache.shindig.common.testing.FakeGadgetToken;
+import org.apache.shindig.social.core.util.BeanJsonConverter;
+import org.apache.shindig.social.opensocial.spi.GroupId;
+import org.apache.shindig.social.opensocial.spi.PersonService;
+import org.apache.shindig.social.opensocial.spi.UserId;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.inject.Guice;
+import junit.framework.TestCase;
+import org.json.JSONObject;
+
+/**
+ * Test BaseRequestItem
+ */
+public class BaseRequestItemTest extends TestCase {
+
+ private static final FakeGadgetToken FAKE_TOKEN = new FakeGadgetToken();
+
+ private static final String DEFAULT_PATH = "/people/john.doe/@self";
+ protected BaseRequestItem request;
+ protected BeanJsonConverter converter;
+
+ @Override protected void setUp() throws Exception {
+ FAKE_TOKEN.setAppId("12345");
+ FAKE_TOKEN.setOwnerId("someowner");
+ FAKE_TOKEN.setViewerId("someowner");
+ converter = new BeanJsonConverter(Guice.createInjector());
+ request = new BaseRequestItem(
+ Maps.<String,String[]>newHashMap(),
+ FAKE_TOKEN, converter);
+ }
+
+
+ public void testParseCommaSeparatedList() throws Exception {
+ request.setParameter("fields", "huey,dewey,louie");
+ assertEquals(Lists.newArrayList("huey", "dewey", "louie"), request.getListParameter("fields"));
+ }
+
+ public void testGetAppId() throws Exception {
+ request.setParameter("appId", "100");
+ assertEquals("100", request.getAppId());
+
+ request.setParameter("appId", "@app");
+ assertEquals(FAKE_TOKEN.getAppId(), request.getAppId());
+ }
+
+ public void testGetUser() throws Exception {
+ request.setParameter("userId", "@owner");
+ assertEquals(UserId.Type.owner, request.getUsers().iterator().next().getType());
+ }
+
+ public void testGetGroup() throws Exception {
+ request.setParameter("groupId", "@self");
+ assertEquals(GroupId.Type.self, request.getGroup().getType());
+ }
+
+ public void testStartIndex() throws Exception {
+ request.setParameter("startIndex", null);
+ assertEquals(RequestItem.DEFAULT_START_INDEX, request.getStartIndex());
+
+ request.setParameter("startIndex", "5");
+ assertEquals(5, request.getStartIndex());
+ }
+
+ public void testCount() throws Exception {
+ request.setParameter("count", null);
+ assertEquals(RequestItem.DEFAULT_COUNT, request.getCount());
+
+ request.setParameter("count", "5");
+ assertEquals(5, request.getCount());
+ }
+
+ public void testSortOrder() throws Exception {
+ request.setParameter("sortOrder", null);
+ assertEquals(PersonService.SortOrder.ascending, request.getSortOrder());
+
+ request.setParameter("sortOrder", "descending");
+ assertEquals(PersonService.SortOrder.descending, request.getSortOrder());
+ }
+
+ public void testFields() throws Exception {
+ request.setParameter("fields", "");
+ assertEquals(Sets.<String>newHashSet(), request.getFields());
+
+ request.setParameter("fields", "happy,sad,grumpy");
+ assertEquals(Sets.newHashSet("happy", "sad", "grumpy"), request.getFields());
+ }
+
+ public void testGetTypedParameter() throws Exception {
+ request.setParameter("anykey", "{name: 'Bob', id: '1234'}");
+ InputData input = request.getTypedParameter("anykey", InputData.class);
+ assertEquals("Bob", input.name);
+ assertEquals(1234, input.id);
+ }
+
+ public void testJSONConstructor() throws Exception {
+ request = new BaseRequestItem(new JSONObject("{" +
+ "userId:john.doe," +
+ "groupId:@self," +
+ "fields:[huey,dewey,louie]" +
+ "}"), FAKE_TOKEN, converter);
+ assertEquals(Lists.newArrayList("huey", "dewey", "louie"), request.getListParameter("fields"));
+ }
+
+ public static class InputData {
+ String name;
+ int id;
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+ }
+}
+
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java?rev=740067&r1=740066&r2=740067&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java Mon Feb 2 18:39:12 2009
@@ -17,34 +17,32 @@
*/
package org.apache.shindig.social.opensocial.service;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shindig.auth.AuthInfo;
import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.common.testing.FakeHttpServletRequest;
-import org.apache.shindig.common.util.ImmediateFuture;
-import org.apache.shindig.common.EasyMockTestCase;
import org.apache.shindig.social.ResponseError;
import org.apache.shindig.social.SocialApiTestsGuiceModule;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXStreamAtomConverter;
import org.apache.shindig.social.core.util.BeanXStreamConverter;
import org.apache.shindig.social.core.util.xstream.XStream081Configuration;
-import org.apache.shindig.social.opensocial.spi.SocialSpiException;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
import com.google.inject.Guice;
import com.google.inject.Injector;
-import com.google.inject.Provider;
-
+import junit.framework.TestCase;
+import org.easymock.IMocksControl;
import org.easymock.classextension.EasyMock;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.StringTokenizer;
-import java.util.concurrent.ExecutionException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
-public class DataServiceServletTest extends EasyMockTestCase {
+public class DataServiceServletTest extends TestCase {
private static final FakeGadgetToken FAKE_GADGET_TOKEN = new FakeGadgetToken()
.setOwnerId("john.doe").setViewerId("john.doe");
@@ -52,11 +50,10 @@
private HttpServletRequest req;
private HttpServletResponse res;
private DataServiceServlet servlet;
- private PersonHandler peopleHandler;
- private ActivityHandler activityHandler;
- private AppDataHandler appDataHandler;
private BeanJsonConverter jsonConverter;
+ private IMocksControl mockControl = EasyMock.createNiceControl();
+
private final ServletInputStream dummyPostData = new ServletInputStream() {
@Override public int read() {
return -1;
@@ -64,142 +61,100 @@
};
@Override protected void setUp() throws Exception {
- super.setUp();
servlet = new DataServiceServlet();
- req = EasyMock.createMock(HttpServletRequest.class);
- res = EasyMock.createMock(HttpServletResponse.class);
- jsonConverter = EasyMock.createMock(BeanJsonConverter.class);
- BeanXStreamConverter xmlConverter = EasyMock.createMock(BeanXStreamConverter.class);
- BeanXStreamAtomConverter atomConverter = EasyMock.createMock(BeanXStreamAtomConverter.class);
- peopleHandler = EasyMock.createMock(PersonHandler.class);
- activityHandler = EasyMock.createMock(ActivityHandler.class);
- appDataHandler = EasyMock.createMock(AppDataHandler.class);
-
- EasyMock.expect(jsonConverter.getContentType()).andReturn("application/json");
- EasyMock.expect(xmlConverter.getContentType()).andReturn("application/xml");
- EasyMock.expect(atomConverter.getContentType()).andReturn("application/atom+xml");
-
- HandlerDispatcher dispatcher = new StandardHandlerDispatcher(constant(peopleHandler),
- constant(activityHandler), constant(appDataHandler));
- servlet.setHandlerDispatcher(dispatcher);
+ req = mockControl.createMock(HttpServletRequest.class);
+ res = mockControl.createMock(HttpServletResponse.class);
+ jsonConverter = mockControl.createMock(BeanJsonConverter.class);
+ BeanXStreamConverter xmlConverter = mockControl.createMock(BeanXStreamConverter.class);
+ BeanXStreamAtomConverter atomConverter = mockControl.createMock(BeanXStreamAtomConverter.class);
+
+ EasyMock.expect(jsonConverter.getContentType()).andReturn("application/json").anyTimes();
+ EasyMock.expect(xmlConverter.getContentType()).andReturn("application/xml").anyTimes();
+ EasyMock.expect(atomConverter.getContentType()).andReturn("application/atom+xml").anyTimes();
+
+ HandlerRegistry registry = new DefaultHandlerRegistry(null,
+ Lists.newArrayList(new TestHandler()));
+
+ servlet.setHandlerRegistry(registry);
servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter);
}
- // TODO: replace with Providers.of() when Guice version is upgraded
- private static <T> Provider<T> constant(final T value) {
- return new Provider<T>() {
- public T get() {
- return value;
- }
- };
- }
-
- public void testPeopleUriRecognition() throws Exception {
- verifyHandlerWasFoundForPathInfo('/'
- + DataServiceServlet.PEOPLE_ROUTE + "/5/@self", peopleHandler);
- }
-
- public void testActivitiesUriRecognition() throws Exception {
- verifyHandlerWasFoundForPathInfo('/'
- + DataServiceServlet.ACTIVITY_ROUTE + "/5/@self", activityHandler);
- }
-
- public void testAppDataUriRecognition() throws Exception {
- verifyHandlerWasFoundForPathInfo('/'
- + DataServiceServlet.APPDATA_ROUTE + "/5/@self", appDataHandler);
- }
-
- public void testMethodOverride() throws Exception {
- String route = '/' + DataServiceServlet.APPDATA_ROUTE;
- verifyHandlerWasFoundForPathInfo(route, appDataHandler, "POST", "GET", "GET");
- verifyHandlerWasFoundForPathInfo(route, appDataHandler, "POST", "", "POST");
- verifyHandlerWasFoundForPathInfo(route, appDataHandler, "POST", null, "POST");
- verifyHandlerWasFoundForPathInfo(route, appDataHandler, "POST", "POST", "POST");
- verifyHandlerWasFoundForPathInfo(route, appDataHandler, "GET", null, "GET");
- verifyHandlerWasFoundForPathInfo(route, appDataHandler, "DELETE", null, "DELETE");
- verifyHandlerWasFoundForPathInfo(route, appDataHandler, "PUT", null, "PUT");
+ public void testUriRecognition() throws Exception {
+ verifyHandlerWasFoundForPathInfo("/test/5/@self");
}
- /**
- * Tests a data handler that returns a failed Future
- */
- public void testFailedRequest() throws Exception {
- String route = '/' + DataServiceServlet.APPDATA_ROUTE;
- setupRequest(route, "GET", null);
+ private void verifyHandlerWasFoundForPathInfo(String peoplePathInfo)
+ throws Exception {
+ String post = "POST";
+ verifyHandlerWasFoundForPathInfo(peoplePathInfo, post, post);
+ }
+
+ private void verifyHandlerWasFoundForPathInfo(String pathInfo,
+ String actualMethod, String overrideMethod) throws Exception {
+ setupRequest(pathInfo, actualMethod, overrideMethod);
+
+ String method = StringUtils.isEmpty(overrideMethod) ? actualMethod : overrideMethod;
- EasyMock.expect(appDataHandler.handleItem(EasyMock.isA(RestfulRequestItem.class)));
- EasyMock.expectLastCall().andReturn(
- ImmediateFuture.errorInstance(new RuntimeException("FAILED")));
+ EasyMock.expect(jsonConverter.convertToString(
+ ImmutableMap.of("entry", TestHandler.REST_RESULTS.get(method))))
+ .andReturn("{ 'entry' : " + TestHandler.REST_RESULTS.get(method) + " }");
- res.sendError(500, "FAILED");
+ PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
+ EasyMock.expect(res.getWriter()).andReturn(writerMock);
+ writerMock.write(TestHandler.GET_RESPONSE);
+ EasyMock.expectLastCall();
res.setCharacterEncoding("UTF-8");
res.setContentType("application/json");
- EasyMock.replay(req, res, appDataHandler, jsonConverter);
+ mockControl.replay();
servlet.service(req, res);
- EasyMock.verify(req, res, appDataHandler, jsonConverter);
- EasyMock.reset(req, res, appDataHandler, jsonConverter);
+ mockControl.verify();
+ mockControl.reset();
}
- private void verifyHandlerWasFoundForPathInfo(String peoplePathInfo, DataRequestHandler handler)
- throws Exception {
- String post = "POST";
- verifyHandlerWasFoundForPathInfo(peoplePathInfo, handler, post, post, post);
+ public void testOverridePostWithGet() throws Exception {
+ String route = "/test";
+ verifyHandlerWasFoundForPathInfo(route, "POST", "GET");
}
- private void verifyHandlerWasFoundForPathInfo(String pathInfo, DataRequestHandler handler,
- String actualMethod, String overrideMethod, String expectedMethod) throws Exception {
- setupRequest(pathInfo, actualMethod, overrideMethod);
-
- String jsonObject = "my lovely json";
-
- EasyMock.expect(handler.handleItem(EasyMock.isA(RequestItem.class)));
- EasyMock.expectLastCall().andReturn(ImmediateFuture.newInstance(jsonObject));
+ public void testOverrideGetWithPost() throws Exception {
+ String route = "/test";
+ verifyHandlerWasFoundForPathInfo(route, "GET", "POST");
+ }
- EasyMock.expect(jsonConverter.convertToString(ImmutableMap.of("entry", jsonObject)))
- .andReturn("{ 'entry' : " + jsonObject + " }");
+ /**
+ * Tests a data handler that returns a failed Future
+ */
+ public void testFailedRequest() throws Exception {
+ String route = "/test";
+ setupRequest(route, "DELETE", null);
- PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
- EasyMock.expect(res.getWriter()).andReturn(writerMock);
- writerMock.write(jsonObject);
+ // Shouldnt these be expectations
+ res.sendError(ResponseError.BAD_REQUEST.getHttpErrorCode(), TestHandler.FAILURE_MESSAGE);
res.setCharacterEncoding("UTF-8");
res.setContentType("application/json");
- EasyMock.replay(req, res, handler, jsonConverter);
+ mockControl.replay();
servlet.service(req, res);
- EasyMock.verify(req, res, handler, jsonConverter);
- EasyMock.reset(req, res, handler, jsonConverter);
- // ick, this resets for the next call...
- EasyMock.expect(jsonConverter.getContentType()).andReturn("application/json");
+ mockControl.verify();
+ mockControl.reset();
}
+
+
private void setupRequest(String pathInfo, String actualMethod, String overrideMethod)
throws IOException {
- EasyMock.expect(req.getCharacterEncoding()).andStubReturn("UTF-8");
- if (!("GET").equals(overrideMethod) && !("HEAD").equals(overrideMethod)) {
- EasyMock.expect(req.getInputStream()).andStubReturn(dummyPostData);
- }
- EasyMock.expect(req.getPathInfo()).andStubReturn(pathInfo);
- EasyMock.expect(req.getMethod()).andStubReturn(actualMethod);
- EasyMock.expect(req.getParameterNames()).andStubReturn(new StringTokenizer(""));
- EasyMock.expect(req.getParameter(RestfulRequestItem.X_HTTP_METHOD_OVERRIDE)).andReturn(
- overrideMethod).times(2);
- EasyMock.expect(req.getParameter(DataServiceServlet.FORMAT_PARAM)).andReturn(null);
-
- EasyMock.expect(req.getAttribute(EasyMock.isA(String.class))).andReturn(FAKE_GADGET_TOKEN);
- }
-
- public void testInvalidRoute() throws Exception {
- RestfulRequestItem requestItem = new RestfulRequestItem("/ahhh!", "GET", null,
- FAKE_GADGET_TOKEN, jsonConverter);
- try {
- servlet.handleRequestItem(requestItem, new FakeHttpServletRequest()).get();
- fail();
- } catch (ExecutionException ee) {
- assertTrue(ee.getCause() instanceof SocialSpiException);
- assertEquals(ResponseError.NOT_IMPLEMENTED, ((SocialSpiException) ee.getCause()).getError());
+ FakeHttpServletRequest fakeReq = new FakeHttpServletRequest("/social/rest", pathInfo, "");
+ fakeReq.setPathInfo(pathInfo);
+ fakeReq.setParameter(DataServiceServlet.X_HTTP_METHOD_OVERRIDE, overrideMethod);
+ fakeReq.setCharacterEncoding("UTF-8");
+ if (!("GET").equals(actualMethod) && !("HEAD").equals(actualMethod)) {
+ fakeReq.setPostData("", "UTF-8");
}
+ fakeReq.setMethod(actualMethod);
+ fakeReq.setAttribute(AuthInfo.Attribute.SECURITY_TOKEN.getId(), FAKE_GADGET_TOKEN);
+ req = fakeReq;
}
public void testGetConverterForRequest() throws Exception {
Added: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DefaultHandlerRegistryTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DefaultHandlerRegistryTest.java?rev=740067&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DefaultHandlerRegistryTest.java (added)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DefaultHandlerRegistryTest.java Mon Feb 2 18:39:12 2009
@@ -0,0 +1,158 @@
+/*
+ * 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.social.opensocial.service;
+
+import org.apache.shindig.social.ResponseError;
+import org.apache.shindig.social.opensocial.spi.SocialSpiException;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import junit.framework.TestCase;
+import org.json.JSONObject;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+
+/**
+ * Tests BasicHandleRregistry
+ */
+public class DefaultHandlerRegistryTest extends TestCase {
+
+ private DefaultHandlerRegistry registry;
+
+ @Override
+ @SuppressWarnings("unchecked")
+ protected void setUp() throws Exception {
+ super.setUp();
+ registry = new DefaultHandlerRegistry(null,
+ Lists.newArrayList(new TestHandler()));
+ }
+
+ public void testGetHandlerRPC() throws Exception {
+ assertNotNull(registry.getRpcHandler(new JSONObject("{method : test.get}")));
+ }
+
+ public void testGetHandlerRest() throws Exception {
+ assertNotNull(registry.getRestHandler("/test/", "GET"));
+ }
+
+ public void testOverrideHandlerRPC() throws Exception {
+ assertNotNull(registry.getRpcHandler(new JSONObject("{method : test.overidden}")));
+ }
+
+ public void testOverrideHandlerRest() throws Exception {
+ assertNotNull(registry.getRestHandler("/test/overidden/method/", "GET"));
+ }
+
+ public void testGetForAliasHandler() {
+ assertNotNull(registry.getRestHandler("/test", "GET"));
+ }
+
+ public void testRpcHandler_serviceDoesntExist() throws Exception {
+ JSONObject rpc = new JSONObject("{method : makebelieve.get}");
+ RpcHandler rpcHandler = registry.getRpcHandler(rpc);
+ try {
+ Future future = rpcHandler.execute(rpc, null, null);
+ future.get();
+ fail("Expect exception for missing method");
+ } catch (ExecutionException t) {
+ assertEquals(t.getCause().getClass(), SocialSpiException.class);
+ assertEquals(((SocialSpiException) t.getCause()).getError(), ResponseError.NOT_IMPLEMENTED);
+ } catch (Throwable t) {
+ fail("Unexpected exception " + t.toString());
+ }
+ }
+
+ public void testRestHandler_serviceDoesntExist() {
+ RestHandler restHandler = registry.getRestHandler("/makebelieve", "GET");
+ try {
+ Future future = restHandler.execute("/makebelieve", Maps.<String, String[]>newHashMap(),
+ null, null, null);
+ future.get();
+ fail("Expect exception for missing method");
+ } catch (ExecutionException t) {
+ assertEquals(t.getCause().getClass(), SocialSpiException.class);
+ assertEquals(((SocialSpiException) t.getCause()).getError(), ResponseError.NOT_IMPLEMENTED);
+ } catch (Throwable t) {
+ fail("Unexpected exception " + t.toString());
+ }
+ }
+
+ public void testNonFutureDispatch() throws Exception {
+ // Test calling a handler method which does not return a future
+ RestHandler handler = registry.getRestHandler("/test", "GET");
+ Future future = handler.execute("/test", Maps.<String, String[]>newHashMap(), null, null, null);
+ assertEquals(future.get(), TestHandler.GET_RESPONSE);
+ }
+
+ public void testFutureDispatch() throws Exception {
+ // Test calling a handler method which does not return a future
+ RestHandler handler = registry.getRestHandler("/test", "POST");
+ Future future = handler.execute("/test", Maps.<String, String[]>newHashMap(), null, null, null);
+ assertEquals(future.get(), TestHandler.CREATE_RESPONSE);
+ }
+
+ public void testNonFutureException() throws Exception {
+ // Test calling a handler method which does not return a future
+ JSONObject rpc = new JSONObject("{ method : test.exception }");
+ RpcHandler handler = registry.getRpcHandler(rpc);
+ Future future = handler.execute(rpc, null, null);
+ try {
+ future.get();
+ fail("Service method did not produce NullPointerException from Future");
+ } catch (ExecutionException ee) {
+ assertEquals(ee.getCause().getClass(), NullPointerException.class);
+ }
+ }
+
+ public void testFutureException() throws Exception {
+ // Test calling a handler method which does not return a future
+ JSONObject rpc = new JSONObject("{ method : test.futureException }");
+ RpcHandler handler = registry.getRpcHandler(rpc);
+ Future future = handler.execute(rpc, null, null);
+ try {
+ future.get();
+ fail("Service method did not produce ExecutionException from Future");
+ } catch (ExecutionException ee) {
+ assertEquals(ee.getCause().getClass(), SocialSpiException.class);
+ }
+ }
+
+ public void testSupportedRpcServices() throws Exception {
+ assertEquals(registry.getSupportedRpcServices(),
+ Sets.newHashSet("test.create", "test.get", "test.overridden", "test.exception",
+ "test.futureException"));
+ }
+
+ public void testSupportedRestServices() throws Exception {
+ assertEquals(registry.getSupportedRestServices(),
+ Sets.newHashSet("GET /test", "PUT /test", "DELETE /test", "POST /test",
+ "GET /test/overridden/method"));
+ }
+
+ public void testAddNonService() {
+ try {
+ registry.addHandlers(new Object());
+ fail("Adding an invalid service object succeded");
+ } catch (IllegalStateException ise) {
+
+ }
+ }
+}
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java?rev=740067&r1=740066&r2=740067&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/JsonRpcServletTest.java Mon Feb 2 18:39:12 2009
@@ -18,33 +18,30 @@
package org.apache.shindig.social.opensocial.service;
import org.apache.shindig.common.testing.FakeGadgetToken;
-import org.apache.shindig.common.util.ImmediateFuture;
-import org.apache.shindig.common.EasyMockTestCase;
import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.core.util.BeanXStreamAtomConverter;
import org.apache.shindig.social.core.util.BeanXStreamConverter;
import com.google.common.collect.ImmutableMap;
-
-import com.google.inject.Provider;
-
+import com.google.common.collect.Lists;
+import junit.framework.TestCase;
+import org.easymock.IMocksControl;
import org.easymock.classextension.EasyMock;
import org.json.JSONArray;
import org.json.JSONObject;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
-import java.util.concurrent.Future;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
/**
*
*/
-public class JsonRpcServletTest extends EasyMockTestCase {
+public class JsonRpcServletTest extends TestCase {
private static final FakeGadgetToken FAKE_GADGET_TOKEN = new FakeGadgetToken()
.setOwnerId("john.doe").setViewerId("john.doe");
@@ -53,55 +50,44 @@
private HttpServletResponse res;
private JsonRpcServlet servlet;
- private PersonHandler peopleHandler;
- private ActivityHandler activityHandler;
- private AppDataHandler appDataHandler;
-
private BeanJsonConverter jsonConverter;
private BeanXStreamConverter xmlConverter;
+ private IMocksControl mockControl = EasyMock.createNiceControl();
+
@Override protected void setUp() throws Exception {
- super.setUp();
servlet = new JsonRpcServlet();
- req = EasyMock.createMock(HttpServletRequest.class);
- res = EasyMock.createMock(HttpServletResponse.class);
- jsonConverter = EasyMock.createMock(BeanJsonConverter.class);
- xmlConverter = EasyMock.createMock(BeanXStreamConverter.class);
- BeanXStreamAtomConverter atomConverter = EasyMock.createMock(BeanXStreamAtomConverter.class);
-
- peopleHandler = EasyMock.createMock(PersonHandler.class);
- activityHandler = EasyMock.createMock(ActivityHandler.class);
- appDataHandler = EasyMock.createMock(AppDataHandler.class);
-
- HandlerDispatcher dispatcher = new StandardHandlerDispatcher(constant(peopleHandler),
- constant(activityHandler), constant(appDataHandler));
- servlet.setHandlerDispatcher(dispatcher);
+ req = mockControl.createMock(HttpServletRequest.class);
+ res = mockControl.createMock(HttpServletResponse.class);
+ jsonConverter = mockControl.createMock(BeanJsonConverter.class);
+ xmlConverter = mockControl.createMock(BeanXStreamConverter.class);
+ BeanXStreamAtomConverter atomConverter = mockControl.createMock(BeanXStreamAtomConverter.class);
+ HandlerRegistry registry = new DefaultHandlerRegistry(null,
+ Lists.newArrayList(new TestHandler()));
+
+ servlet.setHandlerRegistry(registry);
servlet.setBeanConverters(jsonConverter, xmlConverter, atomConverter);
}
- // TODO: replace with Providers.of() when Guice version is upgraded
- private static <T> Provider<T> constant(final T value) {
- return new Provider<T>() {
- public T get() {
- return value;
- }
- };
- }
+ public void testMethodRecognition() throws Exception {
+ setupRequest("{method:test.get,id:id,params:{userId:5,groupId:@self}}");
- public void testPeopleMethodRecognition() throws Exception {
- verifyHandlerWasFoundForMethod("{method:people.get,id:id,params:{userId:5,groupId:@self}}",
- peopleHandler);
- }
+ EasyMock.expect(jsonConverter.convertToJson(TestHandler.GET_RESPONSE))
+ .andReturn(new JSONObject(ImmutableMap.of("foo", "bar")));
- public void testActivitiesMethodRecognition() throws Exception {
- verifyHandlerWasFoundForMethod("{method:activities.get,id:id,params:{userId:5,groupId:@self}}",
- activityHandler);
- }
+ JSONObject result = new JSONObject();
+ result.put("id", "id");
+ result.put("data", ImmutableMap.of("foo", "bar"));
+ PrintWriter writerMock = mockControl.createMock(PrintWriter.class);
+ EasyMock.expect(res.getWriter()).andReturn(writerMock);
+ writerMock.write(EasyMock.eq(result.toString()));
+ EasyMock.expectLastCall();
- public void testAppDataMethodRecognition() throws Exception {
- verifyHandlerWasFoundForMethod("{method:appdata.get,id:id,params:{userId:5,groupId:@self}}",
- appDataHandler);
+ mockControl.replay();
+ servlet.service(req, res);
+ mockControl.verify();
+ mockControl.reset();
}
public void testInvalidService() throws Exception {
@@ -109,17 +95,17 @@
setupRequest(json);
JSONObject err = new JSONObject(
- "{id:id,error:{message:'notImplemented: The service junk is not implemented',code:501}}");
+ "{id:id,error:{message:'notImplemented: The method junk.get is not implemented',code:501}}");
- PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
- org.easymock.EasyMock.expect(res.getWriter()).andReturn(writerMock);
- writerMock.write(org.easymock.EasyMock.eq(err.toString()));
- org.easymock.EasyMock.expectLastCall();
+ PrintWriter writerMock = mockControl.createMock(PrintWriter.class);
+ EasyMock.expect(res.getWriter()).andReturn(writerMock);
+ writerMock.write(EasyMock.eq(err.toString()));
+ EasyMock.expectLastCall();
- EasyMock.replay(req, res, jsonConverter, writerMock);
+ mockControl.replay();
servlet.service(req, res);
- EasyMock.verify(req, res, jsonConverter, writerMock);
- EasyMock.reset(req, res, jsonConverter);
+ mockControl.verify();
+ mockControl.reset();
}
@@ -128,105 +114,63 @@
* @throws Exception on failure
*/
public void testFailedRequest() throws Exception {
- setupRequest("{id:id,method:appdata.get}");
- org.easymock.EasyMock.expect(appDataHandler.handleItem(org.easymock.EasyMock.isA(RpcRequestItem.class)));
- org.easymock.EasyMock.expectLastCall().andReturn(
- ImmediateFuture.errorInstance(new RuntimeException("FAILED")));
+ setupRequest("{id:id,method:test.futureException}");
JSONObject err = new JSONObject(
- "{id:id,error:{message:'internalError: FAILED',code:500}}");
-
- PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
- org.easymock.EasyMock.expect(res.getWriter()).andReturn(writerMock);
- writerMock.write(org.easymock.EasyMock.eq(err.toString()));
- org.easymock.EasyMock.expectLastCall();
-
- EasyMock.replay(req, res, appDataHandler, jsonConverter, writerMock);
- servlet.service(req, res);
- EasyMock.verify(req, res, appDataHandler, jsonConverter, writerMock);
- EasyMock.reset(req, res, appDataHandler, jsonConverter);
- }
-
- private void verifyHandlerWasFoundForMethod(String json, DataRequestHandler handler)
- throws Exception {
- setupRequest(json);
-
- String resultObject = "my lovely json";
+ "{id:id,error:{message:'badRequest: FAILURE_MESSAGE',code:400}}");
- org.easymock.EasyMock.expect(handler.handleItem(org.easymock.EasyMock.isA(RequestItem.class)));
- org.easymock.EasyMock.expectLastCall().andReturn(ImmediateFuture.newInstance(resultObject));
+ PrintWriter writerMock = mockControl.createMock(PrintWriter.class);
+ EasyMock.expect(res.getWriter()).andReturn(writerMock);
+ writerMock.write(EasyMock.eq(err.toString()));
+ EasyMock.expectLastCall();
- org.easymock.EasyMock.expect(jsonConverter.convertToJson(resultObject))
- .andReturn(new JSONObject(ImmutableMap.of("foo", "bar")));
-
- JSONObject result = new JSONObject();
- result.put("id", "id");
- result.put("data", ImmutableMap.of("foo", "bar"));
- PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
- org.easymock.EasyMock.expect(res.getWriter()).andReturn(writerMock);
- writerMock.write(org.easymock.EasyMock.eq(result.toString()));
- org.easymock.EasyMock.expectLastCall();
-
- EasyMock.replay(req, res, handler, jsonConverter, writerMock);
+ mockControl.replay();
servlet.service(req, res);
- EasyMock.verify(req, res, handler, jsonConverter, writerMock);
- EasyMock.reset(req, res, handler, jsonConverter);
+ mockControl.verify();
+ mockControl.reset();
}
public void testBasicBatch() throws Exception {
String batchJson =
- "[{method:people.get,id:'1'},{method:activities.get,id:'2'}]";
+ "[{method:test.get,id:'1'},{method:test.get,id:'2'}]";
setupRequest(batchJson);
- String resultObject = "my lovely json";
- Future<?> responseItemFuture = ImmediateFuture.newInstance(resultObject);
- org.easymock.EasyMock.expect(peopleHandler.handleItem(org.easymock.EasyMock.isA(RequestItem.class)));
- org.easymock.EasyMock.expectLastCall().andReturn(responseItemFuture);
- org.easymock.EasyMock.expect(activityHandler.handleItem(org.easymock.EasyMock.isA(RequestItem.class)));
- org.easymock.EasyMock.expectLastCall().andReturn(responseItemFuture);
-
- org.easymock.EasyMock.expect(jsonConverter.convertToJson(resultObject))
+ EasyMock.expect(jsonConverter.convertToJson(TestHandler.GET_RESPONSE))
.andStubReturn(new JSONObject(ImmutableMap.of("foo", "bar")));
JSONArray result = new JSONArray("[{id:'1',data:{foo:'bar'}}," + "{id:'2',data:{foo:'bar'}}]");
- PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
- org.easymock.EasyMock.expect(res.getWriter()).andReturn(writerMock);
- writerMock.write(org.easymock.EasyMock.eq(result.toString()));
- org.easymock.EasyMock.expectLastCall();
+ PrintWriter writerMock = mockControl.createMock(PrintWriter.class);
+ EasyMock.expect(res.getWriter()).andReturn(writerMock);
+ writerMock.write(EasyMock.eq(result.toString()));
+ EasyMock.expectLastCall();
- EasyMock.replay(req, res, peopleHandler, activityHandler, jsonConverter, writerMock);
+ mockControl.replay();
servlet.service(req, res);
- EasyMock.verify(req, res, peopleHandler, activityHandler, jsonConverter, writerMock);
- EasyMock.reset(req, res, peopleHandler, activityHandler, jsonConverter);
+ mockControl.verify();
+ mockControl.reset();
}
public void testGetExecution() throws Exception {
- org.easymock.EasyMock.expect(req.getParameterMap()).andStubReturn(
- ImmutableMap.of("method", new String[]{"people.get"}, "id", new String[]{"1"}));
- org.easymock.EasyMock.expect(req.getMethod()).andStubReturn("GET");
- org.easymock.EasyMock.expect(req.getAttribute(org.easymock.EasyMock.isA(String.class))).andReturn(FAKE_GADGET_TOKEN);
- org.easymock.EasyMock.expect(req.getCharacterEncoding()).andStubReturn("UTF-8");
+ EasyMock.expect(req.getParameterMap()).andStubReturn(
+ ImmutableMap.of("method", new String[]{"test.get"}, "id", new String[]{"1"}));
+ EasyMock.expect(req.getMethod()).andStubReturn("GET");
+ EasyMock.expect(req.getAttribute(EasyMock.isA(String.class))).andReturn(FAKE_GADGET_TOKEN);
+ EasyMock.expect(req.getCharacterEncoding()).andStubReturn("UTF-8");
res.setCharacterEncoding("UTF-8");
- String resultObject = "my lovely json";
-
- Future<?> responseItemFuture = ImmediateFuture.newInstance(resultObject);
- org.easymock.EasyMock.expect(peopleHandler.handleItem(org.easymock.EasyMock.isA(RequestItem.class)));
- org.easymock.EasyMock.expectLastCall().andReturn(responseItemFuture);
-
- org.easymock.EasyMock.expect(jsonConverter.convertToJson(resultObject))
+ EasyMock.expect(jsonConverter.convertToJson(TestHandler.GET_RESPONSE))
.andReturn(new JSONObject(ImmutableMap.of("foo", "bar")));
JSONObject result = new JSONObject("{id:'1',data:{foo:'bar'}}");
- PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
- org.easymock.EasyMock.expect(res.getWriter()).andReturn(writerMock);
- writerMock.write(org.easymock.EasyMock.eq(result.toString()));
- org.easymock.EasyMock.expectLastCall();
+ PrintWriter writerMock = mockControl.createMock(PrintWriter.class);
+ EasyMock.expect(res.getWriter()).andReturn(writerMock);
+ writerMock.write(EasyMock.eq(result.toString()));
+ EasyMock.expectLastCall();
- EasyMock.replay(req, res, peopleHandler, activityHandler, jsonConverter, writerMock);
+ mockControl.replay();
servlet.service(req, res);
- EasyMock.verify(req, res, peopleHandler, activityHandler, jsonConverter, writerMock);
- EasyMock.reset(req, res, peopleHandler, activityHandler, jsonConverter);
+ mockControl.verify();
+ mockControl.reset();
}
private void setupRequest(String json) throws IOException {
@@ -238,10 +182,10 @@
}
};
- org.easymock.EasyMock.expect(req.getInputStream()).andStubReturn(stream);
- org.easymock.EasyMock.expect(req.getMethod()).andStubReturn("POST");
- org.easymock.EasyMock.expect(req.getAttribute(org.easymock.EasyMock.isA(String.class))).andReturn(FAKE_GADGET_TOKEN);
- org.easymock.EasyMock.expect(req.getCharacterEncoding()).andStubReturn("UTF-8");
+ EasyMock.expect(req.getInputStream()).andStubReturn(stream);
+ EasyMock.expect(req.getMethod()).andStubReturn("POST");
+ EasyMock.expect(req.getAttribute(EasyMock.isA(String.class))).andReturn(FAKE_GADGET_TOKEN);
+ EasyMock.expect(req.getCharacterEncoding()).andStubReturn("UTF-8");
res.setCharacterEncoding("UTF-8");
res.setContentType("application/json");
}
Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java?rev=740067&r1=740066&r2=740067&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/PersonHandlerTest.java Mon Feb 2 18:39:12 2009
@@ -17,25 +17,27 @@
*/
package org.apache.shindig.social.opensocial.service;
+import org.apache.shindig.common.EasyMockTestCase;
import org.apache.shindig.common.testing.FakeGadgetToken;
import org.apache.shindig.common.util.ImmediateFuture;
-import org.apache.shindig.common.EasyMockTestCase;
-import org.apache.shindig.social.ResponseError;
+import org.apache.shindig.config.ContainerConfig;
import org.apache.shindig.social.core.model.PersonImpl;
+import org.apache.shindig.social.core.util.BeanJsonConverter;
import org.apache.shindig.social.opensocial.model.Person;
import org.apache.shindig.social.opensocial.spi.CollectionOptions;
import org.apache.shindig.social.opensocial.spi.GroupId;
import org.apache.shindig.social.opensocial.spi.PersonService;
import org.apache.shindig.social.opensocial.spi.RestfulCollection;
import org.apache.shindig.social.opensocial.spi.UserId;
-import org.apache.shindig.social.opensocial.spi.SocialSpiException;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
-
-import org.easymock.classextension.EasyMock;
+import static org.easymock.classextension.EasyMock.eq;
+import static org.easymock.classextension.EasyMock.expect;
import java.util.List;
import java.util.Map;
@@ -45,7 +47,8 @@
private PersonService personService;
private PersonHandler handler;
private FakeGadgetToken token;
- private RestfulRequestItem request;
+ protected HandlerRegistry registry;
+ private BeanJsonConverter converter;
private static final Set<String> DEFAULT_FIELDS = Sets.newHashSet(Person.Field.ID.toString(),
Person.Field.NAME.toString(),
@@ -55,6 +58,7 @@
.newHashSet(new UserId(UserId.Type.userId, "john.doe"));
private static CollectionOptions DEFAULT_OPTIONS = new CollectionOptions();
+ protected ContainerConfig containerConfig;
static {
DEFAULT_OPTIONS.setSortBy(PersonService.TOP_FRIENDS_SORT);
@@ -68,78 +72,59 @@
@Override
protected void setUp() throws Exception {
- super.setUp();
token = new FakeGadgetToken();
- personService = EasyMock.createMock(PersonService.class);
- handler = new PersonHandler(personService);
- }
-
- @Override
- protected void replay() {
- EasyMock.replay(personService);
- }
-
- @Override
- protected void verify() {
- EasyMock.verify(personService);
- }
-
- private void setPath(String path) {
- Map<String, String> params = Maps.newHashMap();
- params.put("sortBy", null);
- params.put("sortOrder", null);
- params.put("filterBy", null);
- params.put("startIndex", null);
- params.put("count", null);
- params.put("fields", null);
- this.setPathAndParams(path, params);
- }
-
- private void setPathAndParams(String path, Map<String, String> params) {
- request = new RestfulRequestItem(path, "GET", null, token, null);
- for (Map.Entry<String, String> entry : params.entrySet()) {
- request.setParameter(entry.getKey(), entry.getValue());
- }
+ converter = mock(BeanJsonConverter.class);
+ personService = mock(PersonService.class);
+ containerConfig = mock(ContainerConfig.class);
+ handler = new PersonHandler(personService, containerConfig);
+ registry = new DefaultHandlerRegistry(null, Lists.newArrayList(handler));
}
public void testHandleGetAllNoParams() throws Exception {
- setPath("/people/john.doe/@all");
+ String path = "/people/john.doe/@all";
+ RestHandler operation = registry.getRestHandler(path, "GET");
List<Person> personList = ImmutableList.of();
RestfulCollection<Person> data = new RestfulCollection<Person>(personList);
- EasyMock.expect(personService.getPeople(
- JOHN_DOE,
- new GroupId(GroupId.Type.all, null),
- DEFAULT_OPTIONS,
- DEFAULT_FIELDS,
- token))
+ expect(personService.getPeople(
+ eq(JOHN_DOE),
+ eq(new GroupId(GroupId.Type.all, null)),
+ eq(DEFAULT_OPTIONS),
+ eq(DEFAULT_FIELDS),
+ eq(token)))
.andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(), null,
+ token, converter).get());
verify();
}
public void testHandleGetFriendsNoParams() throws Exception {
- setPath("/people/john.doe/@friends");
+ String path = "/people/john.doe/@friends";
+ RestHandler operation = registry.getRestHandler(path, "GET");
List<Person> personList = ImmutableList.of();
RestfulCollection<Person> data = new RestfulCollection<Person>(personList);
- EasyMock.expect(personService.getPeople(
- JOHN_DOE,
- new GroupId(GroupId.Type.friends, null),
- DEFAULT_OPTIONS,
- DEFAULT_FIELDS,
- token))
+ expect(personService.getPeople(
+ eq(JOHN_DOE),
+ eq(new GroupId(GroupId.Type.friends, null)),
+ eq(DEFAULT_OPTIONS),
+ eq(DEFAULT_FIELDS),
+ eq(token)))
.andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
}
public void testHandleGetFriendsWithParams() throws Exception {
+ String path = "/people/john.doe/@friends";
+ RestHandler operation = registry.getRestHandler(path, "GET");
+
CollectionOptions options = new CollectionOptions();
options.setSortBy(Person.Field.NAME.toString());
options.setSortOrder(PersonService.SortOrder.descending);
@@ -149,109 +134,90 @@
options.setFirst(5);
options.setMax(10);
- Map<String, String> params = Maps.newHashMap();
- params.put("sortBy", options.getSortBy());
- params.put("sortOrder", options.getSortOrder().toString());
- params.put("filterBy", options.getFilter());
- params.put("filterOp", options.getFilterOperation().toString());
- params.put("filterValue", options.getFilterValue());
- params.put("startIndex", "5");
- params.put("count", "10");
- params.put("fields", "money,fame,fortune");
+ Map<String, String[]> params = Maps.newHashMap();
+ params.put("sortBy", new String[]{options.getSortBy()});
+ params.put("sortOrder", new String[]{options.getSortOrder().toString()});
+ params.put("filterBy", new String[]{options.getFilter()});
+ params.put("filterOp", new String[]{options.getFilterOperation().toString()});
+ params.put("filterValue", new String[]{options.getFilterValue()});
+ params.put("startIndex", new String[]{"5"});
+ params.put("count", new String[]{"10"});
+ params.put("fields", new String[]{"money,fame,fortune"});
- setPathAndParams("/people/john.doe/@friends", params);
List<Person> people = ImmutableList.of();
RestfulCollection<Person> data = new RestfulCollection<Person>(people);
- EasyMock.expect(personService.getPeople(
- JOHN_DOE,
- new GroupId(GroupId.Type.friends, null), options,
- ImmutableSortedSet.of("money", "fame", "fortune"), token))
+ expect(personService.getPeople(
+ eq(JOHN_DOE),
+ eq(new GroupId(GroupId.Type.friends, null)), eq(options),
+ eq(ImmutableSortedSet.of("money", "fame", "fortune")), eq(token)))
.andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, params, null, token, converter).get());
verify();
}
public void testHandleGetFriendById() throws Exception {
- setPath("/people/john.doe/@friends/jane.doe");
+ String path = "/people/john.doe/@friends/jane.doe";
+ RestHandler operation = registry.getRestHandler(path, "GET");
Person data = new PersonImpl();
// TODO: We aren't passing john.doe to the service yet.
- EasyMock.expect(personService.getPerson(new UserId(UserId.Type.userId, "jane.doe"),
- DEFAULT_FIELDS, token)).andReturn(ImmediateFuture.newInstance(data));
+ expect(personService.getPerson(eq(new UserId(UserId.Type.userId, "jane.doe")),
+ eq(DEFAULT_FIELDS), eq(token))).andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
}
public void testHandleGetSelf() throws Exception {
- setPath("/people/john.doe/@self");
+ String path = "/people/john.doe/@self";
+ RestHandler operation = registry.getRestHandler(path, "GET");
Person data = new PersonImpl();
- EasyMock.expect(personService.getPerson(JOHN_DOE.iterator().next(),
- DEFAULT_FIELDS, token)).andReturn(ImmediateFuture.newInstance(data));
+ expect(personService.getPerson(eq(JOHN_DOE.iterator().next()),
+ eq(DEFAULT_FIELDS), eq(token))).andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
}
public void testHandleGetPlural() throws Exception {
- setPath("/people/john.doe,jane.doe/@self");
+ String path = "/people/john.doe,jane.doe/@self";
+ RestHandler operation = registry.getRestHandler(path, "GET");
List<Person> people = ImmutableList.of();
RestfulCollection<Person> data = new RestfulCollection<Person>(people);
Set<UserId> userIdSet = Sets.newLinkedHashSet(JOHN_DOE);
userIdSet.add(new UserId(UserId.Type.userId, "jane.doe"));
- EasyMock.expect(personService.getPeople(userIdSet,
- new GroupId(GroupId.Type.self, null),
- DEFAULT_OPTIONS,
- DEFAULT_FIELDS,
- token)).andReturn(ImmediateFuture.newInstance(data));
+ expect(personService.getPeople(eq(userIdSet),
+ eq(new GroupId(GroupId.Type.self, null)),
+ eq(DEFAULT_OPTIONS),
+ eq(DEFAULT_FIELDS),
+ eq(token))).andReturn(ImmediateFuture.newInstance(data));
replay();
- assertEquals(data, handler.handleGet(request).get());
+ assertEquals(data, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
}
- public void testHandleDelete() throws Exception {
- replay();
- try {
- handler.handleDelete(request);
- fail();
- } catch (SocialSpiException spe) {
- assertEquals(ResponseError.BAD_REQUEST, spe.getError());
- }
+ public void testHandleGetSuportedFields() throws Exception {
+ String path = "/people/@supportedFields";
+ RestHandler operation = registry.getRestHandler(path, "GET");
- verify();
- }
+ List<Object> list = ImmutableList.<Object>of("id", ImmutableMap.of("name", "familyName"));
+ expect(containerConfig.getList(eq("default"),
+ eq("${gadgets\\.features.opensocial-0\\.8.supportedFields.person}"))).andReturn(list);
- public void testHandlePut() throws Exception {
replay();
-
- try {
- handler.handlePut(request).get();
- fail();
- } catch (SocialSpiException spe) {
- assertEquals(ResponseError.NOT_IMPLEMENTED, spe.getError());
- }
-
- verify();
- }
-
- public void testHandlePost() throws Exception {
- replay();
-
- try {
- handler.handlePost(request).get();
- fail();
- } catch (SocialSpiException spe) {
- assertEquals(ResponseError.NOT_IMPLEMENTED, spe.getError());
- }
-
+ assertEquals(list, operation.execute(path, Maps.<String, String[]>newHashMap(),
+ null, token, converter).get());
verify();
}
}
Added: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/TestHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/TestHandler.java?rev=740067&view=auto
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/TestHandler.java (added)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/TestHandler.java Mon Feb 2 18:39:12 2009
@@ -0,0 +1,96 @@
+/*
+ * 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.social.opensocial.service;
+
+import org.apache.shindig.common.util.ImmediateFuture;
+import org.apache.shindig.social.ResponseError;
+import org.apache.shindig.social.opensocial.spi.SocialSpiException;
+
+import com.google.common.collect.ImmutableMap;
+import org.junit.Ignore;
+
+import java.util.Map;
+import java.util.concurrent.Future;
+
+/**
+ * Simple test handler implementation. Can be used standalone or to wrap a mock
+ * delegate.
+ */
+@Ignore
+@Service(name = "test", path = "/{someParam}/{someOtherParam}" )
+public class TestHandler {
+
+ public static final String GET_RESPONSE = "GET_RESPONSE";
+ public static final String CREATE_RESPONSE = "CREATE_RESPONSE";
+ public static final String FAILURE_MESSAGE = "FAILURE_MESSAGE";
+
+ public static Map<String,String> REST_RESULTS = ImmutableMap.of(
+ "POST", CREATE_RESPONSE, "GET", GET_RESPONSE, "DELETE", FAILURE_MESSAGE);
+
+ private TestHandler mock;
+
+ public TestHandler() {
+ }
+
+ public void setMock(TestHandler mock) {
+ this.mock = mock;
+ }
+
+ @Operation(httpMethods = "GET")
+ public String get(RequestItem req) {
+ if (mock != null) {
+ return mock.get(req);
+ }
+ return GET_RESPONSE;
+ }
+
+ @Operation(httpMethods = "GET", path = "/overridden/method")
+ public String overridden(RequestItem req) {
+ if (mock != null) {
+ return mock.get(req);
+ }
+ return GET_RESPONSE;
+ }
+
+ @Operation(httpMethods = {"POST", "PUT"})
+ public Future<?> create(RequestItem req) {
+ if (mock != null) {
+ return mock.create(req);
+ }
+ return ImmediateFuture.newInstance(CREATE_RESPONSE);
+ }
+
+ @Operation(httpMethods = "DELETE")
+ public Future<?> futureException(RequestItem req) {
+ if (mock != null) {
+ return mock.futureException(req);
+ }
+ return ImmediateFuture.errorInstance(new SocialSpiException(ResponseError.BAD_REQUEST,
+ FAILURE_MESSAGE, new Throwable()));
+ }
+
+ @Operation(httpMethods = {})
+ public void exception(RequestItem req) {
+ if (mock != null) {
+ mock.exception(req);
+ } else {
+ throw new NullPointerException(FAILURE_MESSAGE);
+ }
+ }
+}