1 29 package org.apache.commons.httpclient; 30 31 import java.io.IOException ; 32 33 import junit.framework.Test; 34 import junit.framework.TestSuite; 35 36 import org.apache.commons.httpclient.auth.AuthScope; 37 import org.apache.commons.httpclient.methods.GetMethod; 38 import org.apache.commons.httpclient.server.RequestLine; 39 import org.apache.commons.httpclient.server.SimpleRequest; 40 import org.apache.commons.httpclient.server.SimpleResponse; 41 42 48 public class TestProxyWithRedirect extends HttpClientTestBase { 49 50 public TestProxyWithRedirect(String testName) throws IOException { 51 super(testName); 52 setUseProxy(true); 53 } 54 55 public static Test suite() { 56 return new TestSuite(TestProxyWithRedirect.class); 57 } 58 59 private class BasicRedirectService extends EchoService { 60 61 private String location = null; 62 63 public BasicRedirectService(final String location) { 64 super(); 65 this.location = location; 66 } 67 68 public boolean process(final SimpleRequest request, final SimpleResponse response) 69 throws IOException 70 { 71 RequestLine reqline = request.getRequestLine(); 72 HttpVersion ver = reqline.getHttpVersion(); 73 if (reqline.getUri().equals("/redirect/")) { 74 response.setStatusLine(ver, HttpStatus.SC_MOVED_TEMPORARILY); 75 response.addHeader(new Header("Location", this.location)); 76 response.addHeader(new Header("Connection", "Close")); 77 return true; 78 } else { 79 return super.process(request, response); 80 } 81 } 82 } 83 84 public void testAuthProxyWithRedirect() throws Exception { 85 UsernamePasswordCredentials creds = 86 new UsernamePasswordCredentials("testuser", "testpass"); 87 88 this.client.getState().setProxyCredentials(AuthScope.ANY, creds); 89 this.server.setHttpService(new BasicRedirectService("/")); 90 this.proxy.requireAuthentication(creds, "test", true); 91 92 GetMethod get = new GetMethod("/redirect/"); 93 try { 94 this.client.executeMethod(get); 95 assertEquals(HttpStatus.SC_OK, get.getStatusCode()); 96 } finally { 97 get.releaseConnection(); 98 } 99 } 100 101 public void testAuthProxyWithCrossSiteRedirect() throws Exception { 102 UsernamePasswordCredentials creds = 103 new UsernamePasswordCredentials("testuser", "testpass"); 104 105 this.client.getState().setProxyCredentials(AuthScope.ANY, creds); 106 this.server.setHttpService(new BasicRedirectService( 107 "http://127.0.0.1:" + this.server.getLocalPort())); 108 109 this.proxy.requireAuthentication(creds, "test", true); 110 111 GetMethod get = new GetMethod("/redirect/"); 112 try { 113 this.client.executeMethod(get); 114 assertEquals(HttpStatus.SC_OK, get.getStatusCode()); 115 } finally { 116 get.releaseConnection(); 117 } 118 } 119 120 public void testPreemptiveAuthProxyWithCrossSiteRedirect() throws Exception { 121 UsernamePasswordCredentials creds = 122 new UsernamePasswordCredentials("testuser", "testpass"); 123 124 this.client.getState().setProxyCredentials(AuthScope.ANY, creds); 125 this.client.getParams().setAuthenticationPreemptive(true); 126 this.server.setHttpService(new BasicRedirectService( 127 "http://127.0.0.1:" + this.server.getLocalPort())); 128 129 this.proxy.requireAuthentication(creds, "test", true); 130 131 GetMethod get = new GetMethod("/redirect/"); 132 try { 133 this.client.executeMethod(get); 134 assertEquals(HttpStatus.SC_OK, get.getStatusCode()); 135 } finally { 136 get.releaseConnection(); 137 } 138 } 139 140 } 141 | Popular Tags |