Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java?rev=693675&r1=693674&r2=693675&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/GadgetTokenStoreTest.java
 Tue Sep  9 18:50:41 2008
@@ -18,26 +18,27 @@
  */
 package org.apache.shindig.gadgets.oauth;
 
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.same;
-
-import junit.framework.TestCase;
-
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import org.apache.shindig.common.crypto.BasicBlobCrypter;
+import org.apache.shindig.common.crypto.BlobCrypter;
+import org.apache.shindig.common.testing.FakeGadgetToken;
+import org.apache.shindig.gadgets.FakeGadgetSpecFactory;
 import org.apache.shindig.gadgets.GadgetException;
-import org.apache.shindig.gadgets.GadgetSpecFactory;
-import org.apache.shindig.gadgets.spec.GadgetSpec;
-import org.easymock.IArgumentMatcher;
-import org.easymock.classextension.EasyMock;
-import org.easymock.classextension.IMocksControl;
-
-import java.net.URI;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import org.apache.shindig.gadgets.oauth.AccessorInfo.HttpMethod;
+import org.apache.shindig.gadgets.oauth.AccessorInfo.OAuthParamLocation;
+import 
org.apache.shindig.gadgets.oauth.BasicOAuthStoreConsumerKeyAndSecret.KeyType;
+import org.apache.shindig.gadgets.oauth.OAuthArguments.UseToken;
+import org.apache.shindig.gadgets.oauth.OAuthStore.TokenInfo;
+import org.junit.Before;
+import org.junit.Test;
 
-public class GadgetTokenStoreTest extends TestCase {
+public class GadgetTokenStoreTest {
 
+  private static final String GADGET_URL = "http://www.example.com/gadget.xml";;
+  
   public static final String GADGET_SPEC =
       "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
       "  <Module>\n" +
@@ -69,206 +70,360 @@
       "    </Content>\n" +
       "  </Module>";
 
+  private BasicOAuthStore backingStore;
   private GadgetOAuthTokenStore store;
-  private GadgetSpec spec;
-  private IMocksControl control;
-  private BasicOAuthStore mockStoreImpl;
-  private GadgetSpecFactory mockSpecFactory;
-
-  private static class ProviderInfoMatcher implements IArgumentMatcher {
-
-    private OAuthStore.ProviderInfo expectedInfo;
-
-    public ProviderInfoMatcher(OAuthStore.ProviderInfo info) {
-      expectedInfo = info;
-    }
-
-    public void appendTo(StringBuffer sb) {
-      sb.append("eqProvInfo(");
-      sb.append("access: ");
-      sb.append(expectedInfo.getProvider().accessTokenURL);
-      sb.append(", request: ");
-      sb.append(expectedInfo.getProvider().requestTokenURL);
-      sb.append(", authorize: ");
-      sb.append(expectedInfo.getProvider().userAuthorizationURL);
-      sb.append(", http_method: ");
-      sb.append(expectedInfo.getHttpMethod());
-      sb.append(", param_location: ");
-      sb.append(expectedInfo.getParamLocation());
-      sb.append(", signature_type: ");
-      sb.append(expectedInfo.getSignatureType());
-      sb.append(')');
-    }
-
-    public boolean matches(Object actual) {
-      if (! (actual instanceof OAuthStore.ProviderInfo)) {
-        return false;
-      }
-
-      OAuthStore.ProviderInfo actualInfo = (OAuthStore.ProviderInfo)actual;
-
-      return (actualInfo.getHttpMethod() == expectedInfo.getHttpMethod())
-             && (actualInfo.getParamLocation()
-                 == expectedInfo.getParamLocation())
-             && (actualInfo.getSignatureType()
-                 == expectedInfo.getSignatureType())
-             && actualInfo.getProvider().accessTokenURL.equals(
-                 expectedInfo.getProvider().accessTokenURL)
-             && actualInfo.getProvider().requestTokenURL.equals(
-                 expectedInfo.getProvider().requestTokenURL)
-             && actualInfo.getProvider().userAuthorizationURL.equals(
-                 expectedInfo.getProvider().userAuthorizationURL);
+  private FakeGadgetToken socialToken;
+  private FakeGadgetToken privateToken;
+  private BlobCrypter stateCrypter;
+  private OAuthClientState clientState;
+
+  @Before
+  public void setUp() throws Exception {
+    backingStore = new BasicOAuthStore();
+    backingStore.setDefaultKey(
+        new BasicOAuthStoreConsumerKeyAndSecret("key", "secret", 
KeyType.RSA_PRIVATE, "keyname"));
+    store = new GadgetOAuthTokenStore(backingStore, new 
FakeGadgetSpecFactory());
+    
+    socialToken = new FakeGadgetToken();
+    socialToken.setOwnerId("owner");
+    socialToken.setViewerId("viewer");
+    socialToken.setAppUrl(GADGET_URL);
+    
+    privateToken = new FakeGadgetToken();
+    privateToken.setOwnerId("owner");
+    privateToken.setViewerId("owner");
+    privateToken.setAppUrl(GADGET_URL);
+    
+    stateCrypter = new BasicBlobCrypter("abcdefghijklmnop".getBytes());
+    clientState = new OAuthClientState(stateCrypter);
+  }
+  
+  @Test
+  public void testGetOAuthAccessor_signedFetch() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setUseToken(UseToken.NEVER);
+    AccessorInfo info = store.getOAuthAccessor(socialToken, arguments, 
clientState);
+    assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
+    assertEquals("keyname", info.getConsumer().getKeyName());
+    assertEquals("key", info.getConsumer().getConsumer().consumerKey);
+    assertNull(info.getConsumer().getConsumer().consumerSecret);
+    assertNull(info.getAccessor().requestToken);
+    assertNull(info.getAccessor().accessToken);
+    assertNull(info.getAccessor().tokenSecret);
+  }
+  
+  @Test
+  public void testGetOAuthAccessor_useToken_noOAuthInSpec() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setUseToken(UseToken.IF_AVAILABLE);
+    try {
+      store.getOAuthAccessor(socialToken, arguments, clientState);
+      fail();
+    } catch (GadgetException e) {
+      // good
     }
   }
-
-  private static OAuthStore.ProviderInfo eqProvInfo(
-      OAuthStore.ProviderInfo info) {
-    EasyMock.reportMatcher(new ProviderInfoMatcher(info));
-    return null;
+  
+  @Test
+  public void testGetOAuthAccessor_signedFetch_hmacKey() throws Exception {
+    BasicOAuthStoreConsumerIndex index = new BasicOAuthStoreConsumerIndex();
+    index.setGadgetUri(GADGET_URL);
+    index.setServiceName("hmac");
+    BasicOAuthStoreConsumerKeyAndSecret cks =
+        new BasicOAuthStoreConsumerKeyAndSecret("hmac", "hmacsecret", 
KeyType.HMAC_SYMMETRIC, null);
+    backingStore.setConsumerKeyAndSecret(index, cks);
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setUseToken(UseToken.NEVER);
+    arguments.setServiceName("hmac");
+    AccessorInfo info = store.getOAuthAccessor(socialToken, arguments, 
clientState);
+    assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
+    assertEquals(null, info.getConsumer().getKeyName());
+    assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
+    assertEquals("hmacsecret", 
info.getConsumer().getConsumer().consumerSecret);
+    assertNull(info.getAccessor().requestToken);
+    assertNull(info.getAccessor().accessToken);
+    assertNull(info.getAccessor().tokenSecret);
   }
 
-  @Override
-  protected void setUp() throws Exception {
-    super.setUp();
-    control = EasyMock.createStrictControl();
-    mockStoreImpl = control.createMock(BasicOAuthStore.class);
-    mockSpecFactory = control.createMock(GadgetSpecFactory.class);
-
-    store = new GadgetOAuthTokenStore(mockStoreImpl, mockSpecFactory);
-    spec = new GadgetSpec(new URI("http://foo.bar.com/gadget.xml";), 
GADGET_SPEC);
+  @Test
+  public void testGetOAuthAccessor_signedFetch_badServiceName() throws 
Exception {
+    BasicOAuthStoreConsumerIndex index = new BasicOAuthStoreConsumerIndex();
+    index.setGadgetUri(GADGET_URL);
+    index.setServiceName("otherservice");
+    BasicOAuthStoreConsumerKeyAndSecret cks =
+        new BasicOAuthStoreConsumerKeyAndSecret("hmac", "hmacsecret", 
KeyType.HMAC_SYMMETRIC, null);
+    backingStore.setConsumerKeyAndSecret(index, cks);
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setUseToken(UseToken.NEVER);
+    arguments.setServiceName("hmac");
+    AccessorInfo info = store.getOAuthAccessor(socialToken, arguments, 
clientState);
+    assertEquals("keyname", info.getConsumer().getKeyName());
+    assertEquals("key", info.getConsumer().getConsumer().consumerKey);
   }
-
-  public void testStoreConsumerKeyAndSecret() throws Exception {
-    URI gadgetUrl = new URI("http://foo.bar.com/gadget.xml";);
-    String serviceName = "testservice";
-
-    OAuthStore.ProviderKey providerKey = new OAuthStore.ProviderKey();
-    providerKey.setGadgetUri(gadgetUrl.toString());
-    providerKey.setServiceName(serviceName);
-
-    OAuthStore.ConsumerKeyAndSecret kas = new OAuthStore.ConsumerKeyAndSecret(
-        "key", "secret", OAuthStore.KeyType.HMAC_SYMMETRIC);
-
-    mockStoreImpl.setOAuthConsumerKeyAndSecret(eq(providerKey), same(kas));
-    expectLastCall().once();
-
-    control.replay();
-
-    store.storeConsumerKeyAndSecret(gadgetUrl, serviceName, kas);
-
-    control.verify();
+  
+  @Test
+  public void testGetOAuthAccessor_signedFetch_defaultHmac() throws Exception {
+    BasicOAuthStoreConsumerIndex index = new BasicOAuthStoreConsumerIndex();
+    index.setGadgetUri(GADGET_URL);
+    index.setServiceName("");
+    BasicOAuthStoreConsumerKeyAndSecret cks =
+        new BasicOAuthStoreConsumerKeyAndSecret("hmac", "hmacsecret", 
KeyType.HMAC_SYMMETRIC, null);
+    backingStore.setConsumerKeyAndSecret(index, cks);
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setUseToken(UseToken.NEVER);
+    AccessorInfo info = store.getOAuthAccessor(socialToken, arguments, 
clientState);
+    assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
+    assertEquals(null, info.getConsumer().getKeyName());
+    assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
+    assertEquals("hmacsecret", 
info.getConsumer().getConsumer().consumerSecret);
+    assertNull(info.getAccessor().requestToken);
+    assertNull(info.getAccessor().accessToken);
+    assertNull(info.getAccessor().tokenSecret);
   }
-
-  public void testStoreTokenKeyAndSecret() throws Exception {
-
-    final String url = "http://foo.bar.com/gadget.xml";;
-    final int moduleId = 42957;
-    final String userId = "testuser";
-    final String serviceName = "testservice";
-    final String tokenName = "testtoken";
-
-    OAuthStore.TokenInfo tokenInfo = new OAuthStore.TokenInfo("", "");
-
-    OAuthStore.TokenKey tokenKey = new OAuthStore.TokenKey();
-    tokenKey.setGadgetUri(url);
-    tokenKey.setModuleId(moduleId);
-    tokenKey.setServiceName(serviceName);
-    tokenKey.setTokenName(tokenName);
-    tokenKey.setUserId(userId);
-
-    mockStoreImpl.setTokenAndSecret(eq(tokenKey), same(tokenInfo));
-    expectLastCall().once();
-
-    control.replay();
-
-    store.storeTokenKeyAndSecret(tokenKey, tokenInfo);
-
-    control.verify();
+  
+  @Test
+  public void testGetOAuthAccessor_socialOAuth_socialPage() throws Exception {
+    BasicOAuthStoreConsumerIndex index = new BasicOAuthStoreConsumerIndex();
+    index.setGadgetUri(GADGET_URL);
+    index.setServiceName("testservice");
+    BasicOAuthStoreConsumerKeyAndSecret cks =
+        new BasicOAuthStoreConsumerKeyAndSecret("hmac", "hmacsecret", 
KeyType.HMAC_SYMMETRIC, null);
+    backingStore.setConsumerKeyAndSecret(index, cks);
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.IF_AVAILABLE);
+    AccessorInfo info = store.getOAuthAccessor(socialToken, arguments, 
clientState);
+    assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
+    assertEquals(null, info.getConsumer().getKeyName());
+    assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
+    assertEquals("hmacsecret", 
info.getConsumer().getConsumer().consumerSecret);
+    assertNull(info.getAccessor().requestToken);
+    assertNull(info.getAccessor().accessToken);
+    assertNull(info.getAccessor().tokenSecret);
   }
-
-  public void testGetOAuthAccessor() throws Exception {
-
-    final String url = "http://foo.bar.com/gadget.xml";;
-    final int moduleId = 42957;
-    final String userId = "testuser";
-    final String serviceName = "testservice";
-    final String tokenName = "testtoken";
-    final boolean ignoreCache = false;
-
-    OAuthStore.TokenKey tokenKey = new OAuthStore.TokenKey();
-    tokenKey.setGadgetUri(url);
-    tokenKey.setModuleId(moduleId);
-    tokenKey.setServiceName(serviceName);
-    tokenKey.setTokenName(tokenName);
-    tokenKey.setUserId(userId);
-
-    OAuthStore.ProviderInfo info =
-        GadgetOAuthTokenStore.getProviderInfo(spec, serviceName);
-
-    OAuthStore.AccessorInfo accessorInfo = new OAuthStore.AccessorInfo();
-
-    expect(mockSpecFactory.getGadgetSpec(eq(new URI(url)), eq(ignoreCache)))
-        .andReturn(spec);
-    expect(mockStoreImpl.getOAuthAccessor(eq(tokenKey), eqProvInfo(info)))
-        .andReturn(accessorInfo);
-
-    control.replay();
-
-    OAuthStore.AccessorInfo compare =
-        store.getOAuthAccessor(tokenKey, ignoreCache);
-
-    control.verify();
-
-    assertSame(accessorInfo, compare);
+  
+  @Test
+  public void testGetOAuthAccessor_socialOAuth_privatePage() throws Exception {
+    BasicOAuthStoreConsumerIndex index = new BasicOAuthStoreConsumerIndex();
+    index.setGadgetUri(GADGET_URL);
+    index.setServiceName("testservice");
+    BasicOAuthStoreConsumerKeyAndSecret cks =
+        new BasicOAuthStoreConsumerKeyAndSecret("hmac", "hmacsecret", 
KeyType.HMAC_SYMMETRIC, null);
+    backingStore.setConsumerKeyAndSecret(index, cks);
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.IF_AVAILABLE);
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
+    assertEquals(null, info.getConsumer().getKeyName());
+    assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
+    assertEquals("hmacsecret", 
info.getConsumer().getConsumer().consumerSecret);
+    assertNull(info.getAccessor().requestToken);
+    assertNull(info.getAccessor().accessToken);
+    assertNull(info.getAccessor().tokenSecret);
   }
-
-  public void testGetGadgetOAuthInfo() throws Exception {
-    String serviceName = "testservice";
-
-    OAuthStore.ProviderInfo provInfo =
-        GadgetOAuthTokenStore.getProviderInfo(spec, serviceName);
-
-    assertEquals(FakeOAuthServiceProvider.ACCESS_TOKEN_URL,
-                 provInfo.getProvider().accessTokenURL);
-    assertEquals(FakeOAuthServiceProvider.REQUEST_TOKEN_URL,
-                 provInfo.getProvider().requestTokenURL);
-    assertEquals(FakeOAuthServiceProvider.APPROVAL_URL,
-                 provInfo.getProvider().userAuthorizationURL);
-    assertEquals(OAuthStore.HttpMethod.GET, provInfo.getHttpMethod());
-    assertEquals(OAuthStore.SignatureType.HMAC_SHA1,
-                 provInfo.getSignatureType());
-    assertEquals(OAuthStore.OAuthParamLocation.URI_QUERY,
-                 provInfo.getParamLocation());
-
-    // now, let's change the spec a bit
-
-    String newSpecStr = GADGET_SPEC.replaceAll("GET", "POST");
-    spec = new GadgetSpec(new URI("http://foo.bar.com/gadget.xml";), 
newSpecStr);
-
-    provInfo = GadgetOAuthTokenStore.getProviderInfo(spec, serviceName);
-    assertEquals(OAuthStore.HttpMethod.POST, provInfo.getHttpMethod());
-
-    // Unknown service error
-
-    try {
-      provInfo = GadgetOAuthTokenStore.getProviderInfo(spec, "otherservice");
-      fail("expected exception, but didn't get it");
-    } catch (GadgetException e) {
-      // this is expected
-    }
-
-    // what if the gadget doesn't require oauth?
-    Matcher oauth = Pattern.compile("<OAuth>.*</OAuth>", Pattern.DOTALL)
-        .matcher(GADGET_SPEC);
-    newSpecStr = oauth.replaceFirst("");
-    spec = new GadgetSpec(
-        new URI("http://foo.bar.com/gadget.xml";),
-        newSpecStr);
+  
+  @Test
+  public void testGetOAuthAccessor_socialOAuth_withToken() throws Exception {
+    BasicOAuthStoreConsumerIndex index = new BasicOAuthStoreConsumerIndex();
+    index.setGadgetUri(GADGET_URL);
+    index.setServiceName("testservice");
+    BasicOAuthStoreConsumerKeyAndSecret cks =
+        new BasicOAuthStoreConsumerKeyAndSecret("hmac", "hmacsecret", 
KeyType.HMAC_SYMMETRIC, null);
+    backingStore.setConsumerKeyAndSecret(index, cks);
+    
+    backingStore.setTokenInfo(privateToken, null, "testservice", "",
+        new TokenInfo("token", "secret"));
+    
+    // Owner views their own page
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.IF_AVAILABLE);
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
+    assertEquals(null, info.getConsumer().getKeyName());
+    assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
+    assertEquals("hmacsecret", 
info.getConsumer().getConsumer().consumerSecret);
+    assertNull(info.getAccessor().requestToken);
+    assertEquals("token", info.getAccessor().accessToken);
+    assertEquals("secret", info.getAccessor().tokenSecret);
+    
+    // Friend views page
+    info = store.getOAuthAccessor(socialToken, arguments, clientState);
+    assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
+    assertEquals(null, info.getConsumer().getKeyName());
+    assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
+    assertEquals("hmacsecret", 
info.getConsumer().getConsumer().consumerSecret);
+    assertNull(info.getAccessor().requestToken);
+    assertNull(info.getAccessor().accessToken);
+    assertNull(info.getAccessor().tokenSecret);
+  }
+  
+  @Test
+  public void testGetOAuthAccessor_fullOAuth_socialPage() throws Exception {
+    BasicOAuthStoreConsumerIndex index = new BasicOAuthStoreConsumerIndex();
+    index.setGadgetUri(GADGET_URL);
+    index.setServiceName("testservice");
+    BasicOAuthStoreConsumerKeyAndSecret cks =
+        new BasicOAuthStoreConsumerKeyAndSecret("hmac", "hmacsecret", 
KeyType.HMAC_SYMMETRIC, null);
+    backingStore.setConsumerKeyAndSecret(index, cks);
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    AccessorInfo info = store.getOAuthAccessor(socialToken, arguments, 
clientState);
+    assertEquals(OAuthParamLocation.URI_QUERY, info.getParamLocation());
+    assertEquals(null, info.getConsumer().getKeyName());
+    assertEquals("hmac", info.getConsumer().getConsumer().consumerKey);
+    assertEquals("hmacsecret", 
info.getConsumer().getConsumer().consumerSecret);
+    assertNull(info.getAccessor().requestToken);
+    assertNull(info.getAccessor().accessToken);
+    assertNull(info.getAccessor().tokenSecret);
+  }
+  
+  @Test
+  public void testGetOAuthAccessor_serviceNotFound() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("no such service");
+    arguments.setUseToken(UseToken.ALWAYS);
     try {
-      provInfo = GadgetOAuthTokenStore.getProviderInfo(spec, serviceName);
-      fail("expected exception, but didn't get it");
+      store.getOAuthAccessor(socialToken, arguments, clientState);
+      fail();
     } catch (GadgetException e) {
-      // this is expected
+      // good.
     }
   }
+  
+  @Test
+  public void testGetOAuthAccessor_oauthParamsInBody() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    privateToken.setAppUrl("http://www.example.com/body.xml";);
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertEquals(
+        FakeOAuthServiceProvider.REQUEST_TOKEN_URL,
+        info.getConsumer().getConsumer().serviceProvider.requestTokenURL);
+    assertEquals(
+        FakeOAuthServiceProvider.APPROVAL_URL,
+        info.getConsumer().getConsumer().serviceProvider.userAuthorizationURL);
+    assertEquals(
+        FakeOAuthServiceProvider.ACCESS_TOKEN_URL,
+        info.getConsumer().getConsumer().serviceProvider.accessTokenURL);
+    assertEquals(HttpMethod.POST, info.getHttpMethod());
+    assertEquals(OAuthParamLocation.POST_BODY, info.getParamLocation());
+  }
+  
+  @Test
+  public void testGetOAuthAccessor_oauthParamsInHeader() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    privateToken.setAppUrl("http://www.example.com/header.xml";);
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertEquals(
+        FakeOAuthServiceProvider.REQUEST_TOKEN_URL,
+        info.getConsumer().getConsumer().serviceProvider.requestTokenURL);
+    assertEquals(
+        FakeOAuthServiceProvider.APPROVAL_URL,
+        info.getConsumer().getConsumer().serviceProvider.userAuthorizationURL);
+    assertEquals(
+        FakeOAuthServiceProvider.ACCESS_TOKEN_URL,
+        info.getConsumer().getConsumer().serviceProvider.accessTokenURL);
+    assertEquals(HttpMethod.GET, info.getHttpMethod());
+    assertEquals(OAuthParamLocation.AUTH_HEADER, info.getParamLocation());
+  }
+  
+  @Test
+  public void testAccessTokenFromServerDatabase() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    store.storeTokenKeyAndSecret(privateToken, null, arguments, new 
TokenInfo("access", "secret"));
+    
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertNull(info.getAccessor().requestToken);
+    assertEquals("access", info.getAccessor().accessToken);
+    assertEquals("secret", info.getAccessor().tokenSecret);
+  }
+  
+  @Test
+  public void testAccessTokenFromClient() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    store.storeTokenKeyAndSecret(privateToken, null, arguments, new 
TokenInfo("access", "secret"));
+    
+    clientState.setAccessToken("clienttoken");
+    clientState.setAccessTokenSecret("clienttokensecret");
+    
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertNull(info.getAccessor().requestToken);
+    assertEquals("clienttoken", info.getAccessor().accessToken);
+    assertEquals("clienttokensecret", info.getAccessor().tokenSecret);
+  }
+  
+  @Test
+  public void testRequestTokenFromClientState() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    store.storeTokenKeyAndSecret(privateToken, null, arguments, new 
TokenInfo("access", "secret"));
+    
+    clientState.setRequestToken("request");
+    clientState.setRequestTokenSecret("requestsecret");
+    
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertEquals("request", info.getAccessor().requestToken);
+    assertEquals("requestsecret", info.getAccessor().tokenSecret);
+    assertNull(info.getAccessor().accessToken);
+  }
+  
+  @Test
+  public void testRequestTokenFromClient_preferTokenInStorage() throws 
Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    arguments.setRequestToken("preapproved");
+    arguments.setRequestTokenSecret("preapprovedsecret");
+    store.storeTokenKeyAndSecret(privateToken, null, arguments, new 
TokenInfo("access", "secret"));
+    
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertNull(info.getAccessor().requestToken);
+    assertEquals("access", info.getAccessor().accessToken);
+    assertEquals("secret", info.getAccessor().tokenSecret);
+  }
+  
+  @Test
+  public void testRequestTokenFromClient_noTokenInStorage() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    arguments.setRequestToken("preapproved");
+    arguments.setRequestTokenSecret("preapprovedsecret");
+    
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertNull(info.getAccessor().accessToken);
+    assertEquals("preapproved", info.getAccessor().requestToken);
+    assertEquals("preapprovedsecret", info.getAccessor().tokenSecret);
+  }
+  
+  @Test
+  public void testRemoveToken() throws Exception {
+    OAuthArguments arguments = new OAuthArguments();
+    arguments.setServiceName("testservice");
+    arguments.setUseToken(UseToken.ALWAYS);
+    store.storeTokenKeyAndSecret(privateToken, null, arguments, new 
TokenInfo("access", "secret"));
+    
+    AccessorInfo info = store.getOAuthAccessor(privateToken, arguments, 
clientState);
+    assertNull(info.getAccessor().requestToken);
+    assertEquals("access", info.getAccessor().accessToken);
+    assertEquals("secret", info.getAccessor().tokenSecret);
+    
+    store.removeToken(privateToken, null, arguments);
+    
+    info = store.getOAuthAccessor(privateToken, arguments, clientState);
+    assertNull(info.getAccessor().requestToken);
+    assertNull(info.getAccessor().accessToken);
+    assertNull(info.getAccessor().tokenSecret);
+  }
 }

Added: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/MakeRequestClient.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/MakeRequestClient.java?rev=693675&view=auto
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/MakeRequestClient.java
 (added)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/MakeRequestClient.java
 Tue Sep  9 18:50:41 2008
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.shindig.gadgets.oauth;
+
+import org.apache.shindig.auth.SecurityToken;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.common.util.CharsetUtil;
+import org.apache.shindig.gadgets.http.HttpRequest;
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.oauth.OAuthArguments.UseToken;
+
+/**
+ * 
+ */
+public class MakeRequestClient {
+  
+  private final SecurityToken securityToken;
+  private final OAuthFetcherConfig fetcherConfig;
+  private final FakeOAuthServiceProvider serviceProvider;
+  private final String serviceName;
+  private OAuthArguments baseArgs;
+  private String oauthState;
+  private String approvalUrl;
+  private boolean ignoreCache;
+
+  public MakeRequestClient(SecurityToken securityToken, OAuthFetcherConfig 
fetcherConfig,
+      FakeOAuthServiceProvider serviceProvider, String serviceName) {
+    this.securityToken = securityToken;
+    this.fetcherConfig = fetcherConfig;
+    this.serviceProvider = serviceProvider;
+    this.serviceName = serviceName;
+    this.baseArgs = makeNonSocialOAuthArguments();
+    this.ignoreCache = false;
+  }
+  
+  public void setBaseArgs(OAuthArguments baseArgs) {
+    this.baseArgs = baseArgs;
+  }
+  
+  public OAuthArguments getBaseArgs() {
+    return baseArgs;
+  }
+  
+  public void setIgnoreCache(boolean ignoreCache) {
+    this.ignoreCache = ignoreCache;
+  }
+  
+  public HttpResponse sendGet(String target) throws Exception {
+    HttpRequest request = new HttpRequest(Uri.parse(target));
+    request.setOAuthArguments(recallState());
+    OAuthFetcher dest = new OAuthFetcher(fetcherConfig, serviceProvider, 
request);
+    request.setIgnoreCache(ignoreCache);
+    request.setSecurityToken(securityToken);
+    HttpResponse response = dest.fetch(request);
+    saveState(response);
+    return response;
+  }
+  
+  public HttpResponse sendFormPost(String target, String body) throws 
Exception {
+    HttpRequest request = new HttpRequest(Uri.parse(target));
+    request.setOAuthArguments(recallState());
+    OAuthFetcher dest = new OAuthFetcher(fetcherConfig, serviceProvider, 
request);
+    request.setMethod("POST");
+    request.setPostBody(CharsetUtil.getUtf8Bytes(body));
+    request.setHeader("content-type", "application/x-www-form-urlencoded");
+    request.setSecurityToken(securityToken);
+    HttpResponse response = dest.fetch(request);
+    saveState(response);
+    return response;
+  }
+  
+  public OAuthArguments makeNonSocialOAuthArguments() {
+    OAuthArguments params = new OAuthArguments();
+    params.setUseToken(UseToken.ALWAYS);
+    params.setServiceName(serviceName);
+    params.setSignOwner(false);
+    params.setSignViewer(false);
+    return params;
+  }
+  
+  public OAuthArguments makeSignedFetchArguments() {
+    OAuthArguments params = new OAuthArguments();
+    params.setUseToken(UseToken.NEVER);
+    params.setSignOwner(true);
+    params.setSignViewer(true);
+    return params;
+  }
+    
+  private OAuthArguments recallState() {
+    OAuthArguments params = new OAuthArguments(baseArgs);
+    params.setOrigClientState(oauthState);
+    return params;
+  }
+  
+  private void saveState(HttpResponse response) {
+    approvalUrl = null;
+    if (response.getMetadata() != null) {
+      if (response.getMetadata().containsKey("oauthState")) {
+        oauthState = response.getMetadata().get("oauthState");
+      }
+      approvalUrl = response.getMetadata().get("oauthApprovalUrl");
+    }
+  }
+  
+  public void approveToken(String params) throws Exception {
+    // This will throw if approvalUrl looks wrong.
+    serviceProvider.browserVisit(approvalUrl + "&" + params);
+  }
+}

Propchange: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/MakeRequestClient.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthArgumentsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthArgumentsTest.java?rev=693675&r1=693674&r2=693675&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthArgumentsTest.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthArgumentsTest.java
 Tue Sep  9 18:50:41 2008
@@ -20,11 +20,18 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
+import org.apache.shindig.common.testing.FakeHttpServletRequest;
 import org.apache.shindig.common.xml.XmlUtil;
+import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.oauth.OAuthArguments.UseToken;
+import org.apache.shindig.gadgets.spec.Auth;
 import org.apache.shindig.gadgets.spec.Preload;
 import org.junit.Test;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * Tests parameter parsing
  */
@@ -37,6 +44,7 @@
                "OAUTH_TOKEN_NAME='token' " +
                "OAUTH_REQuest_token='requesttoken' " +
                "oauth_request_token_secret='tokensecret' " +
+               "OAUTH_USE_TOKEN='never' " +
                "/>";
 
     Preload preload = new Preload(XmlUtil.parse(xml));
@@ -45,7 +53,150 @@
     assertEquals("token", params.getTokenName());
     assertEquals("requesttoken", params.getRequestToken());
     assertEquals("tokensecret", params.getRequestTokenSecret());
+    assertEquals(UseToken.NEVER, params.getUseToken());
     assertNull(params.getOrigClientState());
     assertFalse(params.getBypassSpecCache());
   }
+  
+  private FakeHttpServletRequest makeDummyRequest() throws Exception {
+    FakeHttpServletRequest req = new FakeHttpServletRequest();
+    req.setParameter("OAUTH_USE_TOKEN", true, "never");
+    req.setParameter("OAUTH_SERVICE_NAME", true, "service");
+    req.setParameter("OAUTH_TOKEN_NAME", true, "token");
+    req.setParameter("OAUTH_REQUEST_TOKEN", true, "reqtoken");
+    req.setParameter("OAUTH_REQUEST_TOKEN_SECRET", true, "secret");
+    req.setParameter("oauthState", true, "state");
+    req.setParameter("bypassSpecCache", true, "1");
+    req.setParameter("signOwner", true, "false");
+    req.setParameter("signViewer", true, "false");
+    return req;
+  }
+  
+  @Test
+  public void testInitFromRequest() throws Exception {
+    HttpServletRequest req = makeDummyRequest();
+    
+    OAuthArguments args = new OAuthArguments(Auth.SIGNED, req);
+    assertEquals(UseToken.NEVER, args.getUseToken());
+    assertEquals("service", args.getServiceName());
+    assertEquals("token", args.getTokenName());
+    assertEquals("reqtoken", args.getRequestToken());
+    assertEquals("secret", args.getRequestTokenSecret());
+    assertEquals("state", args.getOrigClientState());
+    assertEquals(true, args.getBypassSpecCache());
+    assertEquals(false, args.getSignOwner());
+    assertEquals(false, args.getSignViewer());
+  }
+  
+  @Test
+  public void testInitFromRequest_defaults() throws Exception {
+    HttpServletRequest req = new FakeHttpServletRequest();
+    OAuthArguments args = new OAuthArguments(Auth.SIGNED, req);
+    assertEquals(UseToken.NEVER, args.getUseToken());
+    assertEquals("", args.getServiceName());
+    assertEquals("", args.getTokenName());
+    assertEquals(null, args.getRequestToken());
+    assertEquals(null, args.getRequestTokenSecret());
+    assertEquals(null, args.getOrigClientState());
+    assertEquals(false, args.getBypassSpecCache());
+    assertEquals(true, args.getSignOwner());
+    assertEquals(true, args.getSignViewer());
+  }
+  
+  @Test
+  public void testInitFromRequest_oauthDefaults() throws Exception {
+    FakeHttpServletRequest req = new FakeHttpServletRequest();
+    OAuthArguments args = new OAuthArguments(Auth.OAUTH, req);
+    assertEquals(UseToken.ALWAYS, args.getUseToken());
+  }
+  
+  @Test
+  public void testNoArgConstructorDefaults() throws Exception {
+    OAuthArguments args = new OAuthArguments();
+    assertEquals(UseToken.ALWAYS, args.getUseToken());
+    assertEquals("", args.getServiceName());
+    assertEquals("", args.getTokenName());
+    assertEquals(null, args.getRequestToken());
+    assertEquals(null, args.getRequestTokenSecret());
+    assertEquals(null, args.getOrigClientState());
+    assertEquals(false, args.getBypassSpecCache());
+    assertEquals(false, args.getSignOwner());
+    assertEquals(false, args.getSignViewer());
+  }
+  
+  @Test
+  public void testGetAndSet() throws Exception {
+    OAuthArguments args = new OAuthArguments();
+    args.setBypassSpecCache(true);
+    assertEquals(true, args.getBypassSpecCache());
+    
+    args.setOrigClientState("thestate");
+    assertEquals("thestate", args.getOrigClientState());
+    
+    args.setRequestToken("rt");
+    assertEquals("rt", args.getRequestToken());
+    
+    args.setRequestTokenSecret("rts");
+    assertEquals("rts", args.getRequestTokenSecret());
+    
+    args.setServiceName("s");
+    assertEquals("s", args.getServiceName());
+    
+    args.setSignOwner(true);
+    assertEquals(true, args.getSignOwner());
+    
+    args.setSignViewer(true);
+    assertEquals(true, args.getSignViewer());
+    
+    args.setUseToken(UseToken.IF_AVAILABLE);
+    assertEquals(UseToken.IF_AVAILABLE, args.getUseToken());
+  }
+  
+  @Test
+  public void testCopyConstructor() throws Exception {
+    HttpServletRequest req = makeDummyRequest();
+    OAuthArguments args = new OAuthArguments(Auth.OAUTH, req);
+    args = new OAuthArguments(args);
+    assertEquals(UseToken.NEVER, args.getUseToken());
+    assertEquals("service", args.getServiceName());
+    assertEquals("token", args.getTokenName());
+    assertEquals("reqtoken", args.getRequestToken());
+    assertEquals("secret", args.getRequestTokenSecret());
+    assertEquals("state", args.getOrigClientState());
+    assertEquals(true, args.getBypassSpecCache());
+    assertEquals(false, args.getSignOwner());
+    assertEquals(false, args.getSignViewer());
+  }
+  
+  @Test
+  public void testParseUseToken() throws Exception {
+    FakeHttpServletRequest req = new FakeHttpServletRequest();
+    req.setParameter("OAUTH_USE_TOKEN", "ALWAYS");
+    OAuthArguments args = new OAuthArguments(Auth.SIGNED, req);
+    assertEquals(UseToken.ALWAYS, args.getUseToken());
+    
+    req.setParameter("OAUTH_USE_TOKEN", "if_available");
+    args = new OAuthArguments(Auth.SIGNED, req);
+    assertEquals(UseToken.IF_AVAILABLE, args.getUseToken());     
+    
+    req.setParameter("OAUTH_USE_TOKEN", "never");
+    args = new OAuthArguments(Auth.SIGNED, req);
+    assertEquals(UseToken.NEVER, args.getUseToken());
+    
+    req.setParameter("OAUTH_USE_TOKEN", "");
+    args = new OAuthArguments(Auth.SIGNED, req);
+    assertEquals(UseToken.NEVER, args.getUseToken());
+    
+    req.setParameter("OAUTH_USE_TOKEN", "");
+    args = new OAuthArguments(Auth.OAUTH, req);
+    assertEquals(UseToken.ALWAYS, args.getUseToken());
+    
+    try {
+      req.setParameter("OAUTH_USE_TOKEN", "stuff");
+      new OAuthArguments(Auth.OAUTH, req);
+      fail("Should have thrown");
+    } catch (GadgetException e) {
+      // good.
+    }
+  }
 }


Reply via email to