1 28 29 package org.apache.commons.httpclient; 30 31 import java.io.IOException ; 32 import java.net.UnknownHostException ; 33 34 import junit.framework.Test; 35 import junit.framework.TestSuite; 36 37 import org.apache.commons.httpclient.methods.GetMethod; 38 import org.apache.commons.httpclient.protocol.Protocol; 39 import org.apache.commons.httpclient.server.SimpleProxy; 40 41 48 public class TestHostConfiguration extends HttpClientTestBase { 49 50 public TestHostConfiguration(final String testName) throws IOException { 51 super(testName); 52 } 53 54 public static Test suite() { 55 return new TestSuite(TestHostConfiguration.class); 56 } 57 58 public static void main(String args[]) { 59 String [] testCaseName = { TestHostConfiguration.class.getName() }; 60 junit.textui.TestRunner.main(testCaseName); 61 } 62 63 public void testRelativeURLHitWithDefaultHost() throws IOException { 64 this.server.setHttpService(new EchoService()); 65 this.client.getHostConfiguration().setHost( 67 this.server.getLocalAddress(), 68 this.server.getLocalPort(), 69 Protocol.getProtocol("http")); 70 71 GetMethod httpget = new GetMethod("/test/"); 72 try { 73 this.client.executeMethod(httpget); 74 assertEquals(HttpStatus.SC_OK, httpget.getStatusCode()); 75 } finally { 76 httpget.releaseConnection(); 77 } 78 } 79 80 public void testRelativeURLHitWithoutDefaultHost() throws IOException { 81 this.server.setHttpService(new EchoService()); 82 this.client.setHostConfiguration(new HostConfiguration()); 84 85 GetMethod httpget = new GetMethod("/test/"); 86 try { 87 this.client.executeMethod(httpget); 88 fail("IllegalArgumentException should have been thrown"); 89 } catch (IllegalArgumentException expected) { 90 } finally { 91 httpget.releaseConnection(); 92 } 93 } 94 95 public void testAbsoluteURLHitWithoutDefaultHost() throws IOException { 96 this.server.setHttpService(new EchoService()); 97 this.client.setHostConfiguration(new HostConfiguration()); 99 100 GetMethod httpget = new GetMethod("http://" + 101 this.server.getLocalAddress() + ":" + this.server.getLocalPort() + "/test/"); 102 try { 103 this.client.executeMethod(httpget); 104 assertEquals(HttpStatus.SC_OK, httpget.getStatusCode()); 105 } finally { 106 httpget.releaseConnection(); 107 } 108 } 109 110 public void testAbsoluteURLOverridesClientDefaultHost() throws IOException { 111 this.server.setHttpService(new EchoService()); 112 this.client.getHostConfiguration().setHost("somewhere.outthere.in.pampa", 9999); 114 115 GetMethod httpget = new GetMethod("http://" + 116 this.server.getLocalAddress() + ":" + this.server.getLocalPort() + "/test/"); 117 try { 118 this.client.executeMethod(httpget); 119 assertEquals(HttpStatus.SC_OK, httpget.getStatusCode()); 120 } finally { 121 httpget.releaseConnection(); 122 } 123 httpget = new GetMethod("/test/"); 124 try { 125 this.client.executeMethod(httpget); 126 fail("UnknownHostException should have been thrown"); 127 } catch (UnknownHostException expected) { 128 } finally { 129 httpget.releaseConnection(); 130 } 131 } 132 133 public void testAbsoluteURLOverridesDefaultHostParam() throws IOException { 134 135 this.proxy = new SimpleProxy(); 136 137 this.server.setHttpService(new EchoService()); 138 HostConfiguration hostconfig = new HostConfiguration(); 140 hostconfig.setHost("somehwere.outthere.in.pampa", 9999); 141 hostconfig.setProxy( 142 this.proxy.getLocalAddress(), 143 this.proxy.getLocalPort()); 144 145 GetMethod httpget = new GetMethod("http://" + 146 this.server.getLocalAddress() + ":" + this.server.getLocalPort() + "/test/"); 147 try { 148 this.client.executeMethod(hostconfig, httpget); 149 assertEquals(HttpStatus.SC_OK, httpget.getStatusCode()); 150 assertNotNull(httpget.getResponseHeader("Via")); 151 } finally { 152 httpget.releaseConnection(); 153 } 154 httpget = new GetMethod("/test/"); 155 try { 156 this.client.executeMethod(hostconfig, httpget); 157 assertEquals(HttpStatus.SC_NOT_FOUND, httpget.getStatusCode()); 158 } finally { 159 httpget.releaseConnection(); 160 } 161 } 162 163 171 public void testClientClonesHostConfiguration() throws IOException { 172 this.server.setHttpService(new EchoService()); 173 SpecialHostConfiguration configuration = new SpecialHostConfiguration(this.client 174 .getHostConfiguration()); 175 configuration.setHost(this.server.getLocalAddress(), this.server.getLocalPort(), 176 new String (HttpURL.DEFAULT_SCHEME)); 177 this.client.setHostConfiguration(configuration); 178 179 HttpMethod method = new GetMethod(configuration.getHostURL() + "/test/"); 180 try { 181 this.client.executeMethod(method); 182 fail("HostConfiguration wasn't cloned"); 183 } catch (ExpectedError e) { 184 assertNotSame("ExpectedError.configuration", configuration, e.configuration); 185 } finally { 186 method.releaseConnection(); 187 } 188 189 method = new GetMethod("/test/"); 190 try { 191 this.client.executeMethod(method); 192 fail("HostConfiguration wasn't cloned"); 193 } catch (ExpectedError e) { 194 assertNotSame("ExpectedError.configuration", configuration, e.configuration); 195 } finally { 196 method.releaseConnection(); 197 } 198 } 199 200 201 private class SpecialHostConfiguration extends HostConfiguration 202 { 203 SpecialHostConfiguration(HostConfiguration hostConfiguration) 204 { 205 super(hostConfiguration); 206 } 207 208 public Object clone() 209 { 210 return new SpecialHostConfiguration(this); 211 } 212 213 public synchronized Protocol getProtocol() 214 { 215 throw new ExpectedError(this); 216 } 217 } 218 219 private class ExpectedError extends Error 220 { 221 ExpectedError(SpecialHostConfiguration c) 222 { 223 configuration = c; 224 } 225 226 SpecialHostConfiguration configuration; 227 228 private static final long serialVersionUID = 1L; 229 230 } 231 232 } 233 | Popular Tags |