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); | |||||
| } | |||||
| } | |||||