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 | Richard Evans | ||||
Rick Beton | Rick Beton | ||||
Robert Anderson | Robert Anderson | ||||
Robert Clark | |||||
Robert Flaherty | Robert Flaherty | ||||
Robert Shaw | Robert Shaw | ||||
Robert Streich | Robert Streich | ||||
@@ -800,6 +800,10 @@ Other changes: | |||||
and Ant is running on Java5 or more recent. | and Ant is running on Java5 or more recent. | ||||
Bugzilla Issue 46752. | 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 | Changes from Ant 1.7.0 TO Ant 1.7.1 | ||||
============================================= | ============================================= | ||||
@@ -299,6 +299,7 @@ | |||||
<patternset id="onlinetests"> | <patternset id="onlinetests"> | ||||
<exclude name="**/GetTest.java" if="offline"/> | <exclude name="**/GetTest.java" if="offline"/> | ||||
<exclude name="**/HttpTest.java" if="offline"/> | |||||
</patternset> | </patternset> | ||||
<patternset id="teststhatfail"> | <patternset id="teststhatfail"> | ||||
@@ -1012,6 +1012,10 @@ | |||||
<first>Robert</first> | <first>Robert</first> | ||||
<last>Anderson</last> | <last>Anderson</last> | ||||
</name> | </name> | ||||
<name> | |||||
<first>Robert</first> | |||||
<last>Clark</last> | |||||
</name> | |||||
<name> | <name> | ||||
<first>Robert</first> | <first>Robert</first> | ||||
<last>Flaherty</last> | <last>Flaherty</last> | ||||
@@ -213,6 +213,15 @@ of 400 or greater are viewed as invalid.</p> | |||||
are detected</td> | are detected</td> | ||||
<td align="center">No</td> | <td align="center">No</td> | ||||
</tr> | </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> | </table> | ||||
<h4>socket</h4> | <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; | package org.apache.tools.ant.taskdefs.condition; | ||||
import java.util.Locale; | |||||
import java.net.HttpURLConnection; | import java.net.HttpURLConnection; | ||||
import java.net.MalformedURLException; | import java.net.MalformedURLException; | ||||
import java.net.URL; | 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: | * Condition to wait for a HTTP request to succeed. Its attribute(s) are: | ||||
* url - the URL of the request. | * url - the URL of the request. | ||||
* errorsBeginAt - number at which errors begin at; default=400. | * errorsBeginAt - number at which errors begin at; default=400. | ||||
* requestMethod - HTTP request method to use; GET, HEAD, etc. default=GET | |||||
* @since Ant 1.5 | * @since Ant 1.5 | ||||
*/ | */ | ||||
public class Http extends ProjectComponent implements Condition { | public class Http extends ProjectComponent implements Condition { | ||||
private static final int ERROR_BEGINS = 400; | private static final int ERROR_BEGINS = 400; | ||||
private static final String DEFAULT_REQUEST_METHOD = "GET"; | |||||
private String spec = null; | private String spec = null; | ||||
private String requestMethod = DEFAULT_REQUEST_METHOD; | |||||
/** | /** | ||||
* Set the url attribute | * Set the url attribute | ||||
@@ -55,6 +61,23 @@ public class Http extends ProjectComponent implements Condition { | |||||
this.errorsBeginAt = errorsBeginAt; | 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 | * @return true if the HTTP request succeeds | ||||
* @exception BuildException if an error occurs | * @exception BuildException if an error occurs | ||||
@@ -70,6 +93,7 @@ public class Http extends ProjectComponent implements Condition { | |||||
URLConnection conn = url.openConnection(); | URLConnection conn = url.openConnection(); | ||||
if (conn instanceof HttpURLConnection) { | if (conn instanceof HttpURLConnection) { | ||||
HttpURLConnection http = (HttpURLConnection) conn; | HttpURLConnection http = (HttpURLConnection) conn; | ||||
http.setRequestMethod(requestMethod); | |||||
int code = http.getResponseCode(); | int code = http.getResponseCode(); | ||||
log("Result code for " + spec + " was " + code, | log("Result code for " + spec + " was " + code, | ||||
Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
@@ -78,6 +102,9 @@ public class Http extends ProjectComponent implements Condition { | |||||
} | } | ||||
return false; | return false; | ||||
} | } | ||||
} catch (java.net.ProtocolException pe) { | |||||
throw new BuildException("Invalid HTTP protocol: " | |||||
+ requestMethod, pe); | |||||
} catch (java.io.IOException e) { | } catch (java.io.IOException e) { | ||||
return false; | 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); | |||||
} | |||||
} |