olegk 2004/11/20 11:35:30 Modified: httpclient/src/test/org/apache/commons/httpclient TestProxy.java Log: Test coverage for proxied methods + connection persistance + interactive authentication Contributed by Oleg Kalnichevski Revision Changes Path 1.9 +272 -10 jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestProxy.java Index: TestProxy.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/test/org/apache/commons/httpclient/TestProxy.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- TestProxy.java 20 Nov 2004 17:56:39 -0000 1.8 +++ TestProxy.java 20 Nov 2004 19:35:30 -0000 1.9 @@ -27,7 +27,10 @@ */ package org.apache.commons.httpclient; +import org.apache.commons.httpclient.auth.AuthScheme; import org.apache.commons.httpclient.auth.AuthScope; +import org.apache.commons.httpclient.auth.CredentialsNotAvailableException; +import org.apache.commons.httpclient.auth.CredentialsProvider; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.StringRequestEntity; @@ -46,6 +49,7 @@ * Tests for proxied connections. * * @author Ortwin Glueck + * @author Oleg Kalnichevski */ public class TestProxy extends TestCase { @@ -83,19 +87,108 @@ this.httpserver = null; super.tearDown(); } + + class GetItWrongThenGetItRight implements CredentialsProvider { + + private int hostcount = 0; + private int proxycount = 0; + + public GetItWrongThenGetItRight() { + super(); + } + + public Credentials getCredentials(AuthScheme scheme, String host, int port, boolean proxy) + throws CredentialsNotAvailableException { + if (!proxy) { + this.hostcount++; + return provideCredentials(this.hostcount); + } else { + this.proxycount++; + return provideCredentials(this.proxycount); + } + } + + private Credentials provideCredentials(int count) { + switch (count) { + case 1: + return new UsernamePasswordCredentials("testuser", "wrongstuff"); + case 2: + return new UsernamePasswordCredentials("testuser", "testpass"); + default: + return null; + } + } + + } + /** + * Tests GET via non-authenticating proxy + */ public void testSimpleGet() throws Exception { this.httpserver.setHttpService(new FeedbackService()); GetMethod get = new GetMethod("/"); try { this.httpclient.executeMethod(get); - assertEquals(200, get.getStatusCode()); + assertEquals(HttpStatus.SC_OK, get.getStatusCode()); + } finally { + get.releaseConnection(); + } + } + + /** + * Tests GET via non-authenticating proxy + host auth + connection keep-alive + */ + public void testGetHostAuthConnKeepAlive() throws Exception { + + UsernamePasswordCredentials creds = + new UsernamePasswordCredentials("testuser", "testpass"); + + this.httpclient.getState().setCredentials(AuthScope.ANY, creds); + + HttpRequestHandlerChain handlerchain = new HttpRequestHandlerChain(); + handlerchain.appendHandler(new AuthRequestHandler(creds, "test", true)); + handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + + this.httpserver.setRequestHandler(handlerchain); + + GetMethod get = new GetMethod("/"); + try { + this.httpclient.executeMethod(get); + assertEquals(HttpStatus.SC_OK, get.getStatusCode()); + } finally { + get.releaseConnection(); + } + } + + /** + * Tests GET via non-authenticating proxy + host auth + connection close + */ + public void testGetHostAuthConnClose() throws Exception { + + UsernamePasswordCredentials creds = + new UsernamePasswordCredentials("testuser", "testpass"); + + this.httpclient.getState().setCredentials(AuthScope.ANY, creds); + + HttpRequestHandlerChain handlerchain = new HttpRequestHandlerChain(); + handlerchain.appendHandler(new AuthRequestHandler(creds, "test", false)); + handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + + this.httpserver.setRequestHandler(handlerchain); + + GetMethod get = new GetMethod("/"); + try { + this.httpclient.executeMethod(get); + assertEquals(HttpStatus.SC_OK, get.getStatusCode()); } finally { get.releaseConnection(); } } - public void testAuthHostGet() throws Exception { + /** + * Tests GET via non-authenticating proxy + invalid host auth + */ + public void testGetHostInvalidAuth() throws Exception { UsernamePasswordCredentials creds = new UsernamePasswordCredentials("testuser", "testpass"); @@ -106,31 +199,145 @@ handlerchain.appendHandler(new AuthRequestHandler(creds)); handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + this.httpclient.getState().setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials("testuser", "wrongstuff")); + this.httpserver.setRequestHandler(handlerchain); GetMethod get = new GetMethod("/"); try { this.httpclient.executeMethod(get); - assertEquals(200, get.getStatusCode()); + assertEquals(HttpStatus.SC_UNAUTHORIZED, get.getStatusCode()); } finally { get.releaseConnection(); } } - + + /** + * Tests GET via non-authenticating proxy + intercative host auth + connection keep-alive + */ + public void testGetInteractiveHostAuthConnKeepAlive() throws Exception { + + UsernamePasswordCredentials creds = + new UsernamePasswordCredentials("testuser", "testpass"); + + this.httpclient.getParams().setParameter(CredentialsProvider.PROVIDER, + new GetItWrongThenGetItRight()); + + HttpRequestHandlerChain handlerchain = new HttpRequestHandlerChain(); + handlerchain.appendHandler(new AuthRequestHandler(creds, "test", true)); + handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + + this.httpserver.setRequestHandler(handlerchain); + + GetMethod get = new GetMethod("/"); + try { + this.httpclient.executeMethod(get); + assertEquals(HttpStatus.SC_OK, get.getStatusCode()); + } finally { + get.releaseConnection(); + } + } + + /** + * Tests GET via non-authenticating proxy + intercative host auth + connection close + */ + public void testGetInteractiveHostAuthConnClose() throws Exception { + + UsernamePasswordCredentials creds = + new UsernamePasswordCredentials("testuser", "testpass"); + + this.httpclient.getParams().setParameter(CredentialsProvider.PROVIDER, + new GetItWrongThenGetItRight()); + + HttpRequestHandlerChain handlerchain = new HttpRequestHandlerChain(); + handlerchain.appendHandler(new AuthRequestHandler(creds, "test", false)); + handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + + this.httpserver.setRequestHandler(handlerchain); + + GetMethod get = new GetMethod("/"); + try { + this.httpclient.executeMethod(get); + assertEquals(HttpStatus.SC_OK, get.getStatusCode()); + } finally { + get.releaseConnection(); + } + } + + /** + * Tests POST via non-authenticating proxy + */ public void testSimplePost() throws Exception { this.httpserver.setHttpService(new FeedbackService()); PostMethod post = new PostMethod("/"); post.setRequestEntity(new StringRequestEntity("Like tons of stuff")); try { this.httpclient.executeMethod(post); - assertEquals(200, post.getStatusCode()); + assertEquals(HttpStatus.SC_OK, post.getStatusCode()); assertNotNull(post.getResponseBodyAsString()); } finally { post.releaseConnection(); } } - public void testAuthPost() throws Exception { + /** + * Tests POST via non-authenticating proxy + host auth + connection keep-alive + */ + public void testPostHostAuthConnKeepAlive() throws Exception { + UsernamePasswordCredentials creds = + new UsernamePasswordCredentials("testuser", "testpass"); + + this.httpclient.getState().setCredentials(AuthScope.ANY, creds); + + HttpRequestHandlerChain handlerchain = new HttpRequestHandlerChain(); + handlerchain.appendHandler(new AuthRequestHandler(creds, "test", true)); + handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + + this.httpserver.setRequestHandler(handlerchain); + + PostMethod post = new PostMethod("/"); + post.setRequestEntity(new StringRequestEntity("Like tons of stuff")); + try { + this.httpclient.executeMethod(post); + assertEquals(HttpStatus.SC_OK, post.getStatusCode()); + assertNotNull(post.getResponseBodyAsString()); + } finally { + post.releaseConnection(); + } + } + + /** + * Tests POST via non-authenticating proxy + host auth + connection close + */ + public void testPostHostAuthConnClose() throws Exception { + UsernamePasswordCredentials creds = + new UsernamePasswordCredentials("testuser", "testpass"); + + this.httpclient.getState().setCredentials(AuthScope.ANY, creds); + + HttpRequestHandlerChain handlerchain = new HttpRequestHandlerChain(); + handlerchain.appendHandler(new AuthRequestHandler(creds, "test", false)); + handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + + this.httpserver.setRequestHandler(handlerchain); + + PostMethod post = new PostMethod("/"); + post.setRequestEntity(new StringRequestEntity("Like tons of stuff")); + try { + this.httpclient.executeMethod(post); + assertEquals(HttpStatus.SC_OK, post.getStatusCode()); + assertNotNull(post.getResponseBodyAsString()); + } finally { + post.releaseConnection(); + } + } + + /** + * Tests POST via non-authenticating proxy + invalid host auth + */ + public void testPostHostInvalidAuth() throws Exception { + UsernamePasswordCredentials creds = new UsernamePasswordCredentials("testuser", "testpass"); @@ -140,17 +347,72 @@ handlerchain.appendHandler(new AuthRequestHandler(creds)); handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + this.httpclient.getState().setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials("testuser", "wrongstuff")); + + this.httpserver.setRequestHandler(handlerchain); + + PostMethod post = new PostMethod("/"); + post.setRequestEntity(new StringRequestEntity("Like tons of stuff")); + try { + this.httpclient.executeMethod(post); + assertEquals(HttpStatus.SC_UNAUTHORIZED, post.getStatusCode()); + } finally { + post.releaseConnection(); + } + } + + /** + * Tests POST via non-authenticating proxy + interactive host auth + connection keep-alive + */ + public void testPostInteractiveHostAuthConnKeepAlive() throws Exception { + UsernamePasswordCredentials creds = + new UsernamePasswordCredentials("testuser", "testpass"); + + this.httpclient.getParams().setParameter(CredentialsProvider.PROVIDER, + new GetItWrongThenGetItRight()); + + HttpRequestHandlerChain handlerchain = new HttpRequestHandlerChain(); + handlerchain.appendHandler(new AuthRequestHandler(creds, "test", true)); + handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + this.httpserver.setRequestHandler(handlerchain); PostMethod post = new PostMethod("/"); post.setRequestEntity(new StringRequestEntity("Like tons of stuff")); try { this.httpclient.executeMethod(post); - assertEquals(200, post.getStatusCode()); + assertEquals(HttpStatus.SC_OK, post.getStatusCode()); assertNotNull(post.getResponseBodyAsString()); } finally { post.releaseConnection(); } } + /** + * Tests POST via non-authenticating proxy + interactive host auth + connection close + */ + public void testPostInteractiveHostAuthConnClose() throws Exception { + UsernamePasswordCredentials creds = + new UsernamePasswordCredentials("testuser", "testpass"); + + this.httpclient.getParams().setParameter(CredentialsProvider.PROVIDER, + new GetItWrongThenGetItRight()); + + HttpRequestHandlerChain handlerchain = new HttpRequestHandlerChain(); + handlerchain.appendHandler(new AuthRequestHandler(creds, "test", false)); + handlerchain.appendHandler(new HttpServiceHandler(new FeedbackService())); + + this.httpserver.setRequestHandler(handlerchain); + + PostMethod post = new PostMethod("/"); + post.setRequestEntity(new StringRequestEntity("Like tons of stuff")); + try { + this.httpclient.executeMethod(post); + assertEquals(HttpStatus.SC_OK, post.getStatusCode()); + assertNotNull(post.getResponseBodyAsString()); + } finally { + post.releaseConnection(); + } + } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]