@Test public void testNextFetchThrowsRuntimeException() throws Exception { serviceProvider.setThrow(new RuntimeException("very, very wrong")); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); try { client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); fail("Should have thrown"); } catch (RuntimeException e) { // good } checkLogContains("OAuth fetch unexpected fatal erro"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [very, very wrong] for " + "application http://www.example.com/gadget.xml"); checkLogContains("RuntimeException"); checkLogContains("very, very wrong"); }
@Test public void testNextFetchThrowsRuntimeException() throws Exception { serviceProvider.setThrow(new RuntimeException("very, very wrong")); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); try { client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); fail("Should have thrown"); } catch (RuntimeException e) { // good } //checkLogContains("OAuth fetch unexpected fatal erro"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [very, very wrong] for " + "application http://www.example.com/gadget.xml"); checkLogContains("RuntimeException"); checkLogContains("very, very wrong"); }
@Test public void testNextFetchThrowsRuntimeException() throws Exception { serviceProvider.setThrow(new RuntimeException("very, very wrong")); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); try { client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); fail("Should have thrown"); } catch (RuntimeException e) { // good } //checkLogContains("OAuth fetch unexpected fatal erro"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [very, very wrong] for " + "application http://www.example.com/gadget.xml"); checkLogContains("RuntimeException"); checkLogContains("very, very wrong"); }
@Test public void testNextFetchThrowsGadgetException() throws Exception { serviceProvider.setThrow( new GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT, "mildly wrong")); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); assertEquals("MISSING_SERVER_RESPONSE", response.getMetadata().get("oauthError")); assertEquals("", response.getResponseAsString()); String oauthErrorText = response.getMetadata().get("oauthErrorText"); checkStringContains("should say no response", oauthErrorText, "No response from server"); checkStringContains("should show request", oauthErrorText, "GET /request?param=foo&opensocial_owner_id=owner"); checkStringContains("should log empty response", oauthErrorText, "Received response 1:\n\n"); checkLogContains("No response from server"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [MISSING_SERVER_RESPONSE, No response from server] for " + "application http://www.example.com/gadget.xml"); checkLogContains("GadgetException"); checkLogContains("mildly wrong"); }
@Test public void testNextFetchThrowsGadgetException() throws Exception { serviceProvider.setThrow( new GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT, "mildly wrong")); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); assertEquals("MISSING_SERVER_RESPONSE", response.getMetadata().get("oauthError")); assertEquals("", response.getResponseAsString()); String oauthErrorText = response.getMetadata().get("oauthErrorText"); checkStringContains("should say no response", oauthErrorText, "No response from server"); checkStringContains("should show request", oauthErrorText, "GET /request?param=foo&opensocial_owner_id=owner"); checkStringContains("should log empty response", oauthErrorText, "Received response 1:\n\n"); checkLogContains("No response from server"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [MISSING_SERVER_RESPONSE, No response from server] for " + "application http://www.example.com/gadget.xml"); checkLogContains("GadgetException"); checkLogContains("mildly wrong"); }
@Test public void testNextFetchThrowsGadgetException() throws Exception { serviceProvider.setThrow( new GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT, "mildly wrong")); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); assertEquals("MISSING_SERVER_RESPONSE", response.getMetadata().get("oauthError")); assertEquals("", response.getResponseAsString()); String oauthErrorText = response.getMetadata().get("oauthErrorText"); checkStringContains("should say no response", oauthErrorText, "No response from server"); checkStringContains("should show request", oauthErrorText, "GET /request?param=foo&opensocial_owner_id=owner"); checkStringContains("should log empty response", oauthErrorText, "Received response 1:\n\n"); checkLogContains("No response from server"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [MISSING_SERVER_RESPONSE, No response from server] for " + "application http://www.example.com/gadget.xml"); checkLogContains("GadgetException"); checkLogContains("mildly wrong"); }
@Test public void testError403() throws Exception { serviceProvider.setVagueErrors(true); SecurityToken securityToken = getSecurityToken("owner", "owner", GADGET_URL_NO_KEY); MakeRequestClient client = new MakeRequestClient(securityToken, fetcherConfig, serviceProvider, FakeGadgetSpecFactory.SERVICE_NAME_NO_KEY); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); Map<String, String> metadata = response.getMetadata(); assertNotNull(metadata); assertEquals("MISSING_OAUTH_PARAMETER", metadata.get("oauthError")); checkStringContains("oauthErrorText mismatch", metadata.get("oauthErrorText"), "some vague error"); checkStringContains("oauthErrorText mismatch", metadata.get("oauthErrorText"), "HTTP/1.1 403"); checkLogContains("HTTP/1.1 403"); checkLogContains("GET /request"); checkLogContains("some vague error"); }
@Test public void testError403() throws Exception { serviceProvider.setVagueErrors(true); SecurityToken securityToken = getSecurityToken("owner", "owner", GADGET_URL_NO_KEY); MakeRequestClient client = new MakeRequestClient(securityToken, fetcherConfig, serviceProvider, FakeGadgetSpecFactory.SERVICE_NAME_NO_KEY); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); Map<String, String> metadata = response.getMetadata(); assertNotNull(metadata); assertEquals("MISSING_OAUTH_PARAMETER", metadata.get("oauthError")); checkStringContains("oauthErrorText mismatch", metadata.get("oauthErrorText"), "some vague error"); checkStringContains("oauthErrorText mismatch", metadata.get("oauthErrorText"), "HTTP/1.1 403"); checkLogContains("HTTP/1.1 403"); checkLogContains("GET /request"); checkLogContains("some vague error"); }
@Test public void testNextFetchReturnsNull() throws Exception { serviceProvider.setReturnNull(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); assertEquals("MISSING_SERVER_RESPONSE", response.getMetadata().get("oauthError")); assertEquals("", response.getResponseAsString()); String oauthErrorText = response.getMetadata().get("oauthErrorText"); checkStringContains("should say no response", oauthErrorText, "No response from server"); checkStringContains("should show request", oauthErrorText, "GET /request?param=foo&opensocial_owner_id=owner"); checkStringContains("should log empty response", oauthErrorText, "Received response 1:\n\n"); checkLogContains("No response from server"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [MISSING_SERVER_RESPONSE, No response from server] for " + "application http://www.example.com/gadget.xml"); }
@Test public void testError403() throws Exception { serviceProvider.setVagueErrors(true); SecurityToken securityToken = getSecurityToken("owner", "owner", GADGET_URL_NO_KEY); MakeRequestClient client = new MakeRequestClient(securityToken, fetcherConfig, serviceProvider, FakeGadgetSpecFactory.SERVICE_NAME_NO_KEY); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); Map<String, String> metadata = response.getMetadata(); assertNotNull(metadata); assertEquals("MISSING_OAUTH_PARAMETER", metadata.get("oauthError")); checkStringContains("oauthErrorText mismatch", metadata.get("oauthErrorText"), "some vague error"); checkStringContains("oauthErrorText mismatch", metadata.get("oauthErrorText"), "HTTP/1.1 403"); checkLogContains("HTTP/1.1 403"); checkLogContains("GET /request"); checkLogContains("some vague error"); }
@Test public void testNextFetchReturnsNull() throws Exception { serviceProvider.setReturnNull(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); assertEquals("MISSING_SERVER_RESPONSE", response.getMetadata().get("oauthError")); assertEquals("", response.getResponseAsString()); String oauthErrorText = response.getMetadata().get("oauthErrorText"); checkStringContains("should say no response", oauthErrorText, "No response from server"); checkStringContains("should show request", oauthErrorText, "GET /request?param=foo&opensocial_owner_id=owner"); checkStringContains("should log empty response", oauthErrorText, "Received response 1:\n\n"); checkLogContains("No response from server"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [MISSING_SERVER_RESPONSE, No response from server] for " + "application http://www.example.com/gadget.xml"); }
@Test public void testNextFetchReturnsNull() throws Exception { serviceProvider.setReturnNull(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL); assertEquals("MISSING_SERVER_RESPONSE", response.getMetadata().get("oauthError")); assertEquals("", response.getResponseAsString()); String oauthErrorText = response.getMetadata().get("oauthErrorText"); checkStringContains("should say no response", oauthErrorText, "No response from server"); checkStringContains("should show request", oauthErrorText, "GET /request?param=foo&opensocial_owner_id=owner"); checkStringContains("should log empty response", oauthErrorText, "Received response 1:\n\n"); checkLogContains("No response from server"); checkLogContains("GET /request?param=foo&opensocial_owner_id=owner"); checkLogContains("OAuth error [MISSING_SERVER_RESPONSE, No response from server] for " + "application http://www.example.com/gadget.xml"); }
@Test public void testError401() throws Exception { serviceProvider.setVagueErrors(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); client.approveToken("user_data=hello-oauth"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=1"); assertEquals("User data is hello-oauth", response.getResponseAsString()); serviceProvider.revokeAllAccessTokens(); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=2"); checkLogContains("GET /data?cachebust=2"); checkLogContains("HTTP/1.1 401"); assertEquals("", response.getResponseAsString()); assertNotNull(response.getMetadata().get("oauthApprovalUrl")); client.approveToken("user_data=reapproved"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=3"); assertEquals("User data is reapproved", response.getResponseAsString()); }
@Test public void testError401() throws Exception { serviceProvider.setVagueErrors(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); client.approveToken("user_data=hello-oauth"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=1"); assertEquals("User data is hello-oauth", response.getResponseAsString()); serviceProvider.revokeAllAccessTokens(); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=2"); checkLogContains("GET /data?cachebust=2"); checkLogContains("HTTP/1.1 401"); assertEquals("", response.getResponseAsString()); assertNotNull(response.getMetadata().get("oauthApprovalUrl")); client.approveToken("user_data=reapproved"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=3"); assertEquals("User data is reapproved", response.getResponseAsString()); }
@Test public void testError401() throws Exception { serviceProvider.setVagueErrors(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); client.approveToken("user_data=hello-oauth"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=1"); assertEquals("User data is hello-oauth", response.getResponseAsString()); serviceProvider.revokeAllAccessTokens(); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=2"); checkLogContains("GET /data?cachebust=2"); checkLogContains("HTTP/1.1 401"); assertEquals("", response.getResponseAsString()); assertNotNull(response.getMetadata().get("oauthApprovalUrl")); client.approveToken("user_data=reapproved"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cachebust=3"); assertEquals("User data is reapproved", response.getResponseAsString()); }
@Test public void testBadSessionHandle() throws Exception { serviceProvider.setSessionExtension(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); client.approveToken("user_data=hello-oauth"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("User data is hello-oauth", response.getResponseAsString()); assertEquals(1, serviceProvider.getRequestTokenCount()); assertEquals(1, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); clock.incrementSeconds(FakeOAuthServiceProvider.TOKEN_EXPIRATION_SECONDS + 1); serviceProvider.changeAllSessionHandles(); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals("", response.getResponseAsString()); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(2, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); client.approveToken("user_data=renewed"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(3, serviceProvider.getAccessTokenCount()); assertEquals(2, serviceProvider.getResourceAccessCount()); assertEquals("User data is renewed", response.getResponseAsString()); checkLogContains("oauth_session_handle=REMOVED"); }
@Test public void testAccessTokenExpired_andRevoked() throws Exception { serviceProvider.setSessionExtension(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); client.approveToken("user_data=hello-oauth"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("User data is hello-oauth", response.getResponseAsString()); assertEquals(1, serviceProvider.getRequestTokenCount()); assertEquals(1, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); clock.incrementSeconds(FakeOAuthServiceProvider.TOKEN_EXPIRATION_SECONDS + 1); serviceProvider.revokeAllAccessTokens(); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals("", response.getResponseAsString()); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(2, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); client.approveToken("user_data=renewed"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(3, serviceProvider.getAccessTokenCount()); assertEquals(2, serviceProvider.getResourceAccessCount()); assertEquals("User data is renewed", response.getResponseAsString()); checkLogContains("oauth_token_secret=REMOVED"); }
@Test public void testBadSessionHandle() throws Exception { serviceProvider.setSessionExtension(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); client.approveToken("user_data=hello-oauth"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("User data is hello-oauth", response.getResponseAsString()); assertEquals(1, serviceProvider.getRequestTokenCount()); assertEquals(1, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); clock.incrementSeconds(FakeOAuthServiceProvider.TOKEN_EXPIRATION_SECONDS + 1); serviceProvider.changeAllSessionHandles(); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals("", response.getResponseAsString()); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(2, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); client.approveToken("user_data=renewed"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(3, serviceProvider.getAccessTokenCount()); assertEquals(2, serviceProvider.getResourceAccessCount()); assertEquals("User data is renewed", response.getResponseAsString()); checkLogContains("oauth_session_handle=REMOVED"); }
@Test public void testBadSessionHandle() throws Exception { serviceProvider.setSessionExtension(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); client.approveToken("user_data=hello-oauth"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("User data is hello-oauth", response.getResponseAsString()); assertEquals(1, serviceProvider.getRequestTokenCount()); assertEquals(1, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); clock.incrementSeconds(FakeOAuthServiceProvider.TOKEN_EXPIRATION_SECONDS + 1); serviceProvider.changeAllSessionHandles(); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals("", response.getResponseAsString()); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(2, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); client.approveToken("user_data=renewed"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(3, serviceProvider.getAccessTokenCount()); assertEquals(2, serviceProvider.getResourceAccessCount()); assertEquals("User data is renewed", response.getResponseAsString()); checkLogContains("oauth_session_handle=REMOVED"); }
@Test public void testAccessTokenExpired_andRevoked() throws Exception { serviceProvider.setSessionExtension(true); MakeRequestClient client = makeNonSocialClient("owner", "owner", GADGET_URL); HttpResponse response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("", response.getResponseAsString()); client.approveToken("user_data=hello-oauth"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL); assertEquals("User data is hello-oauth", response.getResponseAsString()); assertEquals(1, serviceProvider.getRequestTokenCount()); assertEquals(1, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); clock.incrementSeconds(FakeOAuthServiceProvider.TOKEN_EXPIRATION_SECONDS + 1); serviceProvider.revokeAllAccessTokens(); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals("", response.getResponseAsString()); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(2, serviceProvider.getAccessTokenCount()); assertEquals(1, serviceProvider.getResourceAccessCount()); client.approveToken("user_data=renewed"); response = client.sendGet(FakeOAuthServiceProvider.RESOURCE_URL + "?cb=1"); assertEquals(2, serviceProvider.getRequestTokenCount()); assertEquals(3, serviceProvider.getAccessTokenCount()); assertEquals(2, serviceProvider.getResourceAccessCount()); assertEquals("User data is renewed", response.getResponseAsString()); checkLogContains("oauth_token_secret=REMOVED"); }