/** configureURLForProtectedAccess */ @Test public void testConfigureURLForProtectedAccess() throws Exception { CoreOAuthConsumerSupport support = new CoreOAuthConsumerSupport() { // Inherited. @Override public String getOAuthQueryString( ProtectedResourceDetails details, OAuthConsumerToken accessToken, URL url, String httpMethod, Map<String, String> additionalParameters) { return "myquerystring"; } }; support.setStreamHandlerFactory(new DefaultOAuthURLStreamHandlerFactory()); ProtectedResourceDetails details = createMock(ProtectedResourceDetails.class); OAuthConsumerToken token = new OAuthConsumerToken(); URL url = new URL("https://myhost.com/somepath?with=some&query=params&too"); expect(details.isAcceptsAuthorizationHeader()).andReturn(true); replay(details); assertEquals( "https://myhost.com/somepath?with=some&query=params&too", support.configureURLForProtectedAccess(url, token, details, "GET", null).toString()); verify(details); reset(details); expect(details.isAcceptsAuthorizationHeader()).andReturn(false); replay(details); assertEquals( "https://myhost.com/somepath?myquerystring", support.configureURLForProtectedAccess(url, token, details, "GET", null).toString()); verify(details); reset(details); replay(details); assertEquals( "https://myhost.com/somepath?with=some&query=params&too", support.configureURLForProtectedAccess(url, token, details, "POST", null).toString()); verify(details); reset(details); replay(details); assertEquals( "https://myhost.com/somepath?with=some&query=params&too", support.configureURLForProtectedAccess(url, token, details, "PUT", null).toString()); verify(details); reset(details); }
/** readResouce */ @Test public void testReadResouce() throws Exception { ProtectedResourceDetails details = createMock(ProtectedResourceDetails.class); OAuthConsumerToken token = new OAuthConsumerToken(); URL url = new URL("http://myhost.com/resource?with=some&query=params&too"); final ConnectionProps connectionProps = new ConnectionProps(); final ByteArrayInputStream inputStream = new ByteArrayInputStream(new byte[0]); final HttpURLConnectionForTestingPurposes connectionMock = new HttpURLConnectionForTestingPurposes(url) { @Override public void setRequestMethod(String method) throws ProtocolException { connectionProps.method = method; } @Override public void setDoOutput(boolean dooutput) { connectionProps.doOutput = dooutput; } @Override public void connect() throws IOException { connectionProps.connected = true; } @Override public OutputStream getOutputStream() throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); connectionProps.outputStream = out; return out; } @Override public int getResponseCode() throws IOException { return connectionProps.responseCode; } @Override public String getResponseMessage() throws IOException { return connectionProps.responseMessage; } @Override public InputStream getInputStream() throws IOException { return inputStream; } @Override public String getHeaderField(String name) { return connectionProps.headerFields.get(name); } }; CoreOAuthConsumerSupport support = new CoreOAuthConsumerSupport() { @Override public URL configureURLForProtectedAccess( URL url, OAuthConsumerToken accessToken, ProtectedResourceDetails details, String httpMethod, Map<String, String> additionalParameters) throws OAuthRequestFailedException { try { return new URL( url.getProtocol(), url.getHost(), url.getPort(), url.getFile(), new SteamHandlerForTestingPurposes(connectionMock)); } catch (MalformedURLException e) { throw new RuntimeException(e); } } @Override public String getOAuthQueryString( ProtectedResourceDetails details, OAuthConsumerToken accessToken, URL url, String httpMethod, Map<String, String> additionalParameters) { return "POSTBODY"; } }; support.setStreamHandlerFactory(new DefaultOAuthURLStreamHandlerFactory()); expect(details.getAuthorizationHeaderRealm()).andReturn("realm1"); expect(details.isAcceptsAuthorizationHeader()).andReturn(true); expect(details.getAdditionalRequestHeaders()).andReturn(null); replay(details); try { support.readResource(details, url, "POST", token, null, null); fail("shouldn't have been a valid response code."); } catch (OAuthRequestFailedException e) { // fall through... } verify(details); reset(details); assertFalse(connectionProps.doOutput); assertEquals("POST", connectionProps.method); assertTrue(connectionProps.connected); connectionProps.reset(); expect(details.getAuthorizationHeaderRealm()).andReturn(null); expect(details.isAcceptsAuthorizationHeader()).andReturn(true); expect(details.getAdditionalRequestHeaders()).andReturn(null); connectionProps.responseCode = 400; connectionProps.responseMessage = "Nasty"; replay(details); try { support.readResource(details, url, "POST", token, null, null); fail("shouldn't have been a valid response code."); } catch (OAuthRequestFailedException e) { // fall through... } verify(details); reset(details); assertFalse(connectionProps.doOutput); assertEquals("POST", connectionProps.method); assertTrue(connectionProps.connected); connectionProps.reset(); expect(details.getAuthorizationHeaderRealm()).andReturn(null); expect(details.isAcceptsAuthorizationHeader()).andReturn(true); expect(details.getAdditionalRequestHeaders()).andReturn(null); connectionProps.responseCode = 401; connectionProps.responseMessage = "Bad Realm"; connectionProps.headerFields.put("WWW-Authenticate", "realm=\"goodrealm\""); replay(details); try { support.readResource(details, url, "POST", token, null, null); fail("shouldn't have been a valid response code."); } catch (InvalidOAuthRealmException e) { // fall through... } verify(details); reset(details); assertFalse(connectionProps.doOutput); assertEquals("POST", connectionProps.method); assertTrue(connectionProps.connected); connectionProps.reset(); expect(details.getAuthorizationHeaderRealm()).andReturn(null); expect(details.isAcceptsAuthorizationHeader()).andReturn(true); expect(details.getAdditionalRequestHeaders()).andReturn(null); connectionProps.responseCode = 200; connectionProps.responseMessage = "Congrats"; replay(details); assertSame(inputStream, support.readResource(details, url, "GET", token, null, null)); verify(details); reset(details); assertFalse(connectionProps.doOutput); assertEquals("GET", connectionProps.method); assertTrue(connectionProps.connected); connectionProps.reset(); expect(details.getAuthorizationHeaderRealm()).andReturn(null); expect(details.isAcceptsAuthorizationHeader()).andReturn(false); expect(details.getAdditionalRequestHeaders()).andReturn(null); connectionProps.responseCode = 200; connectionProps.responseMessage = "Congrats"; replay(details); assertSame(inputStream, support.readResource(details, url, "POST", token, null, null)); assertEquals( "POSTBODY", new String(((ByteArrayOutputStream) connectionProps.outputStream).toByteArray())); verify(details); reset(details); assertTrue(connectionProps.doOutput); assertEquals("POST", connectionProps.method); assertTrue(connectionProps.connected); connectionProps.reset(); }