git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@796762 13f79535-47bb-0310-9956-ffa450edef68master
@@ -248,6 +248,7 @@ Ray Waldin | |||
Richard Evans | |||
Rick Beton | |||
Robert Anderson | |||
Robert Clark | |||
Robert Flaherty | |||
Robert Shaw | |||
Robert Streich | |||
@@ -800,6 +800,10 @@ Other changes: | |||
and Ant is running on Java5 or more recent. | |||
Bugzilla Issue 46752. | |||
* a new attributes can chose a different request method than GET for | |||
the http condition. | |||
Bugzilla Report 30244 | |||
Changes from Ant 1.7.0 TO Ant 1.7.1 | |||
============================================= | |||
@@ -299,6 +299,7 @@ | |||
<patternset id="onlinetests"> | |||
<exclude name="**/GetTest.java" if="offline"/> | |||
<exclude name="**/HttpTest.java" if="offline"/> | |||
</patternset> | |||
<patternset id="teststhatfail"> | |||
@@ -1012,6 +1012,10 @@ | |||
<first>Robert</first> | |||
<last>Anderson</last> | |||
</name> | |||
<name> | |||
<first>Robert</first> | |||
<last>Clark</last> | |||
</name> | |||
<name> | |||
<first>Robert</first> | |||
<last>Flaherty</last> | |||
@@ -213,6 +213,15 @@ of 400 or greater are viewed as invalid.</p> | |||
are detected</td> | |||
<td align="center">No</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">requestMethod</td> | |||
<td valign="top">The HTTP method to be used when issuing the request. | |||
Any of GET, POST, HEAD, OPTIONS, PUT, DELETEm and TRACE | |||
are valid, subject to protocol restrictions. The default if not | |||
specified is "GET".<br/> | |||
<em>since Ant 1.8.0</em></td> | |||
<td align="center">No</td> | |||
</tr> | |||
</table> | |||
<h4>socket</h4> | |||
@@ -0,0 +1,57 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- | |||
Licensed to the Apache Software Foundation (ASF) under one or more | |||
contributor license agreements. See the NOTICE file distributed with | |||
this work for additional information regarding copyright ownership. | |||
The ASF licenses this file to You under the Apache License, Version 2.0 | |||
(the "License"); you may not use this file except in compliance with | |||
the License. You may obtain a copy of the License at | |||
http://www.apache.org/licenses/LICENSE-2.0 | |||
Unless required by applicable law or agreed to in writing, software | |||
distributed under the License is distributed on an "AS IS" BASIS, | |||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
--> | |||
<project default="nope"> | |||
<target name="nope"> | |||
<fail>This build file should be run by a testcase</fail> | |||
</target> | |||
<target name="basic-no-method"> | |||
<condition property="basic-no-method"> | |||
<http url="http://ant.apache.org/"/> | |||
</condition> | |||
<condition property="basic-no-method-bad-url"> | |||
<http url="http://ant.apache.org/this-page-does-not-exist"/> | |||
</condition> | |||
</target> | |||
<target name="test-head-request"> | |||
<condition property="test-head-request"> | |||
<http url="http://ant.apache.org/" requestMethod="HEAD"/> | |||
</condition> | |||
<condition property="test-head-request-bad-url"> | |||
<http url="http://ant.apache.org/this-page-does-not-exist" requestMethod="HEAD"/> | |||
</condition> | |||
</target> | |||
<target name="test-get-request"> | |||
<condition property="test-get-request"> | |||
<http url="http://ant.apache.org/" requestMethod="GET"/> | |||
</condition> | |||
<condition property="test-get-request-bad-url"> | |||
<http url="http://ant.apache.org/this-page-does-not-exist" requestMethod="GET"/> | |||
</condition> | |||
</target> | |||
<target name="bad-request-method"> | |||
<condition property="bad-request-method"> | |||
<http url="http://ant.apache.org" requestMethod="UNKNOWN"/> | |||
</condition> | |||
</target> | |||
</project> |
@@ -18,6 +18,7 @@ | |||
package org.apache.tools.ant.taskdefs.condition; | |||
import java.util.Locale; | |||
import java.net.HttpURLConnection; | |||
import java.net.MalformedURLException; | |||
import java.net.URL; | |||
@@ -30,11 +31,16 @@ import org.apache.tools.ant.ProjectComponent; | |||
* Condition to wait for a HTTP request to succeed. Its attribute(s) are: | |||
* url - the URL of the request. | |||
* errorsBeginAt - number at which errors begin at; default=400. | |||
* requestMethod - HTTP request method to use; GET, HEAD, etc. default=GET | |||
* @since Ant 1.5 | |||
*/ | |||
public class Http extends ProjectComponent implements Condition { | |||
private static final int ERROR_BEGINS = 400; | |||
private static final String DEFAULT_REQUEST_METHOD = "GET"; | |||
private String spec = null; | |||
private String requestMethod = DEFAULT_REQUEST_METHOD; | |||
/** | |||
* Set the url attribute | |||
@@ -55,6 +61,23 @@ public class Http extends ProjectComponent implements Condition { | |||
this.errorsBeginAt = errorsBeginAt; | |||
} | |||
/** | |||
* Sets the method to be used when issuing the HTTP request. | |||
* | |||
* @param method The HTTP request method to use. Valid values are | |||
* the same as those accepted by the | |||
* HttpURLConnection.setRequestMetho d() method, | |||
* such as "GET", "HEAD", "TRACE", etc. The default | |||
* if not specified is "GET". | |||
* | |||
* @see java.net.HttpURLConnection.setRequestMethod() | |||
* @since Ant 1.8.0 | |||
*/ | |||
public void setRequestMethod(String method) { | |||
this.requestMethod = method == null ? DEFAULT_REQUEST_METHOD | |||
: method.toUpperCase(Locale.US); | |||
} | |||
/** | |||
* @return true if the HTTP request succeeds | |||
* @exception BuildException if an error occurs | |||
@@ -70,6 +93,7 @@ public class Http extends ProjectComponent implements Condition { | |||
URLConnection conn = url.openConnection(); | |||
if (conn instanceof HttpURLConnection) { | |||
HttpURLConnection http = (HttpURLConnection) conn; | |||
http.setRequestMethod(requestMethod); | |||
int code = http.getResponseCode(); | |||
log("Result code for " + spec + " was " + code, | |||
Project.MSG_VERBOSE); | |||
@@ -78,6 +102,9 @@ public class Http extends ProjectComponent implements Condition { | |||
} | |||
return false; | |||
} | |||
} catch (java.net.ProtocolException pe) { | |||
throw new BuildException("Invalid HTTP protocol: " | |||
+ requestMethod, pe); | |||
} catch (java.io.IOException e) { | |||
return false; | |||
} | |||
@@ -0,0 +1,63 @@ | |||
/* | |||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||
* contributor license agreements. See the NOTICE file distributed with | |||
* this work for additional information regarding copyright ownership. | |||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
* | |||
*/ | |||
package org.apache.tools.ant.taskdefs.condition; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.BuildFileTest; | |||
/** | |||
* Testcases for the <http> condition. All these tests require | |||
* us to be online as they attempt to get the status of various pages | |||
* on the Ant Apache web site. | |||
*/ | |||
public class HttpTest extends BuildFileTest { | |||
public HttpTest(String name) { | |||
super(name); | |||
} | |||
/** | |||
* The JUnit setup method | |||
*/ | |||
public void setUp() { | |||
configureProject("src/etc/testcases/taskdefs/conditions/http.xml"); | |||
} | |||
public void testNoMethod() { | |||
expectPropertySet("basic-no-method", "basic-no-method"); | |||
assertPropertyUnset("basic-no-method-bad-url"); | |||
} | |||
public void testHeadRequest() { | |||
expectPropertySet("test-head-request", "test-head-request"); | |||
assertPropertyUnset("test-head-request-bad-url"); | |||
} | |||
public void testGetRequest() { | |||
expectPropertySet("test-get-request", "test-get-request"); | |||
assertPropertyUnset("test-get-request-bad-url"); | |||
} | |||
public void testBadRequestMethod() { | |||
expectSpecificBuildException("bad-request-method", | |||
"invalid HTTP request method specified", | |||
null); | |||
} | |||
} |