You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2008/07/16 11:17:44 UTC

svn commit: r677206 - in /ant/core/trunk: CONTRIBUTORS contributors.xml src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java

Author: bodewig
Date: Wed Jul 16 02:17:42 2008
New Revision: 677206

URL: http://svn.apache.org/viewvc?rev=677206&view=rev
Log:
fail with a meaningful error of remoteDir is not parseable.  PR 42770.  Submitted by Scott Johnson

Modified:
    ant/core/trunk/CONTRIBUTORS
    ant/core/trunk/contributors.xml
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java
    ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java

Modified: ant/core/trunk/CONTRIBUTORS
URL: http://svn.apache.org/viewvc/ant/core/trunk/CONTRIBUTORS?rev=677206&r1=677205&r2=677206&view=diff
==============================================================================
Binary files - no diff available.

Modified: ant/core/trunk/contributors.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/contributors.xml?rev=677206&r1=677205&r2=677206&view=diff
==============================================================================
--- ant/core/trunk/contributors.xml (original)
+++ ant/core/trunk/contributors.xml Wed Jul 16 02:17:42 2008
@@ -969,6 +969,10 @@
   </name>
   <name>
     <first>Scott</first>
+    <last>Johnson</last>
+  </name>
+  <name>
+    <first>Scott</first>
     <middle>M.</middle>
     <last>Stirling</last>
   </name>

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java?rev=677206&r1=677205&r2=677206&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java Wed Jul 16 02:17:42 2008
@@ -101,6 +101,7 @@
      * @since Ant 1.6.2
      */
     public void setRemoteFile(String aFromUri) {
+        validateRemoteUri("remoteFile", aFromUri);
         setFromUri(aFromUri);
         this.isFromRemote = true;
      }
@@ -133,10 +134,21 @@
      * @since Ant 1.6.2
      */
     public void setRemoteTodir(String aToUri) {
+        validateRemoteUri("remoteToDir", aToUri);
         setToUri(aToUri);
         this.isToRemote = true;
     }
 
+    private static void validateRemoteUri(String type, String aToUri) {
+    	if (!isRemoteUri(aToUri)) {
+            throw new BuildException(type + " '" + aToUri + "' is invalid. "
+                                     + "The 'remoteToDir' attribute must "
+                                     + "have syntax like the "
+                                     + "following: user:password@host:/path"
+                                     + " - the :password part is optional");
+    	}
+    } 
+
     /**
      * Changes the file name to the given name while receiving it,
      * only useful if receiving a single file.
@@ -155,6 +167,7 @@
      * @since Ant 1.6.2
      */
     public void setRemoteTofile(String aToUri) {
+        validateRemoteUri("remoteToFile", aToUri);
         setToUri(aToUri);
         this.isToRemote = true;
     }
@@ -339,9 +352,11 @@
             }
             setUsername(uri.substring(0, indexOfColon));
             setPassword(uri.substring(indexOfColon + 1, indexOfAt));
-        } else {
+        } else if (indexOfAt > -1) {
             // no password, will require passphrase
             setUsername(uri.substring(0, indexOfAt));
+        } else {
+            throw new BuildException("no username was given.  Can't authenticate."); 
         }
 
         if (getUserInfo().getPassword() == null
@@ -364,7 +379,7 @@
         return remotePath;
     }
 
-    private boolean isRemoteUri(String uri) {
+    private static boolean isRemoteUri(String uri) {
         boolean isRemote = true;
         int indexOfAt = uri.indexOf('@');
         if (indexOfAt < 0) {

Modified: ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java?rev=677206&r1=677205&r2=677206&view=diff
==============================================================================
--- ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java (original)
+++ ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java Wed Jul 16 02:17:42 2008
@@ -25,6 +25,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 
+import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
 import org.apache.tools.ant.taskdefs.condition.FilesMatch;
 import org.apache.tools.ant.types.FileSet;
@@ -48,7 +49,7 @@
  */
 public class ScpTest extends TestCase {
 
-    private File tempDir = new File( System.getProperty("scp.tmp") );
+    private File tempDir;
     private String sshHostUri = System.getProperty("scp.host");
     private int port = Integer.parseInt( System.getProperty( "scp.port", "22" ) );
     private String knownHosts = System.getProperty("scp.known.hosts");
@@ -57,6 +58,9 @@
 
     public ScpTest(String testname) {
         super(testname);
+        if (System.getProperty("scp.tmp") != null) {
+            tempDir = new File(System.getProperty("scp.tmp"));
+        }
     }
 
     protected void setUp() {
@@ -71,8 +75,10 @@
     }
 
     public void testSingleFileUploadAndDownload() throws IOException {
+        assertNotNull("system property scp.tmp must be set", tempDir);
         File uploadFile = createTemporaryFile();
 
+        // upload
         Scp scpTask = createTask();
         scpTask.setFile( uploadFile.getPath() );
         scpTask.setTodir( sshHostUri );
@@ -84,6 +90,8 @@
         assertTrue( "Assert that the testFile does not exist.",
                 !testFile.exists() );
 
+        // download
+        scpTask = createTask(); 
         scpTask.setFile( sshHostUri + "/" + uploadFile.getName() );
         scpTask.setTodir( testFile.getPath() );
         scpTask.execute();
@@ -93,6 +101,7 @@
     }
 
     public void testMultiUploadAndDownload() throws IOException {
+        assertNotNull("system property scp.tmp must be set", tempDir);
         List uploadList = new ArrayList();
         for( int i = 0; i < 5; i++ ) {
             uploadList.add( createTemporaryFile() );
@@ -128,6 +137,25 @@
         }
     }
 
+    public void testRemoteToDir() throws IOException {
+        Scp scpTask = createTask();
+        
+        // first try an invalid URI
+        try {
+            scpTask.setRemoteTodir( "host:/a/path/without/an/at" );
+            fail("Expected a BuildException to be thrown due to invalid"
+                    + " remoteToDir"); 
+        }
+        catch (BuildException e)
+        {
+            // expected
+        }
+        
+        // And this one should work
+        scpTask.setRemoteTodir( "user:password@host:/a/path/with/an/at" );
+        // no exception
+    }
+    
     public void addCleanup( File file ) {
         cleanUpList.add( file );
     }