diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java index c1c136ff8..2d9f763ef 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java @@ -1,206 +1,206 @@ -/* - * 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.optional.ssh; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -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; -import org.apache.tools.ant.types.selectors.FilenameSelector; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -/** - * This is a unit test for the Scp task in Ant. It must be - * configured with command line options in order for it to work. - * Here are the options: - * - * scp.tmp This is a local path to a temporary - * directory for this task to use. - * scp.host This is the remote location of the form: - * "user:password@host:/path/to/directory" - * scp.port The port of the listening SSH service. - * Defaults to 22. (optional) - * scp.known.hosts The file containing the public keys of known - * hosts. Must be a SSH2 version file, but - * supports RSA and DSA keys. If it is not present - * this task setTrust() to true. (optional) - */ -public class ScpTest { - - 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"); - - private List cleanUpList = new ArrayList(); - - public ScpTest() { - if (System.getProperty("scp.tmp") != null) { - tempDir = new File(System.getProperty("scp.tmp")); - } - } - - @Before - public void setUp() { - cleanUpList.clear(); - } - - @After - public void tearDown() { - for( Iterator i = cleanUpList.iterator(); i.hasNext(); ) { - File file = (File) i.next(); - file.delete(); - } - } - - @Test - 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 ); - scpTask.execute(); - - File testFile = new File( tempDir.getPath() + File.separator + - "download-testSingleFileUploadAndDownload.test" ); - addCleanup(testFile ); - assertFalse("Assert that the testFile does not exist.", testFile.exists()); - - // download - scpTask = createTask(); - scpTask.setFile( sshHostUri + "/" + uploadFile.getName() ); - scpTask.setTodir( testFile.getPath() ); - scpTask.execute(); - - assertTrue( "Assert that the testFile exists.", testFile.exists() ); - compareFiles( uploadFile, testFile ); - } - - @Test - 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() ); - } - - Scp scp = createTask(); - FilenameSelector selector = new FilenameSelector(); - selector.setName( "scp*" ); - FileSet fileset = new FileSet(); - fileset.setDir( tempDir ); - fileset.addFilename( selector ); - scp.addFileset( fileset ); - scp.setTodir( sshHostUri ); - scp.execute(); - - File multi = new File( tempDir, "multi" ); - multi.mkdir(); - addCleanup( multi ); - - Scp scp2 = createTask(); - scp2.setFile( sshHostUri + "/scp*" ); - scp2.setTodir( multi.getPath() ); - scp2.execute(); - - FilesMatch match = new FilesMatch(); - for( Iterator i = uploadList.iterator(); i.hasNext(); ) { - File f = (File)i.next(); - match.setFile1( f ); - File f2 = new File( multi, f.getName() ); - match.setFile2( f2 ); - assertTrue("Assert file '" + f.getPath() + "' and file '" + - f2.getPath() + "'", match.eval() ); - } - } - - @Test - 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 - //TODO we should be asserting a value in here - } - - // 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 ); - } - - private void compareFiles(File src, File dest) { - FilesMatch match = new FilesMatch(); - match.setFile1( src ); - match.setFile2( dest ); - - assertTrue( "Assert files are equal.", match.eval() ); - } - - private File createTemporaryFile() throws IOException { - File uploadFile; - uploadFile = File.createTempFile( "scp", "test", tempDir ); - FileWriter writer = new FileWriter( uploadFile ); - writer.write("Can you hear me now?\n"); - writer.close(); - addCleanup( uploadFile ); - return uploadFile; - } - - private Scp createTask() { - Scp scp = new Scp(); - Project p = new Project(); - p.init(); - scp.setProject( p ); - if( knownHosts != null ) { - scp.setKnownhosts( knownHosts ); - } else { - scp.setTrust( true ); - } - scp.setPort( port ); - return scp; - } -} +/* + * 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.optional.ssh; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +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; +import org.apache.tools.ant.types.selectors.FilenameSelector; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * This is a unit test for the Scp task in Ant. It must be + * configured with command line options in order for it to work. + * Here are the options: + * + * scp.tmp This is a local path to a temporary + * directory for this task to use. + * scp.host This is the remote location of the form: + * "user:password@host:/path/to/directory" + * scp.port The port of the listening SSH service. + * Defaults to 22. (optional) + * scp.known.hosts The file containing the public keys of known + * hosts. Must be a SSH2 version file, but + * supports RSA and DSA keys. If it is not present + * this task setTrust() to true. (optional) + */ +public class ScpTest { + + 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"); + + private List cleanUpList = new ArrayList(); + + public ScpTest() { + if (System.getProperty("scp.tmp") != null) { + tempDir = new File(System.getProperty("scp.tmp")); + } + } + + @Before + public void setUp() { + cleanUpList.clear(); + } + + @After + public void tearDown() { + for( Iterator i = cleanUpList.iterator(); i.hasNext(); ) { + File file = (File) i.next(); + file.delete(); + } + } + + @Test + 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 ); + scpTask.execute(); + + File testFile = new File( tempDir.getPath() + File.separator + + "download-testSingleFileUploadAndDownload.test" ); + addCleanup(testFile ); + assertFalse("Assert that the testFile does not exist.", testFile.exists()); + + // download + scpTask = createTask(); + scpTask.setFile( sshHostUri + "/" + uploadFile.getName() ); + scpTask.setTodir( testFile.getPath() ); + scpTask.execute(); + + assertTrue( "Assert that the testFile exists.", testFile.exists() ); + compareFiles( uploadFile, testFile ); + } + + @Test + 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() ); + } + + Scp scp = createTask(); + FilenameSelector selector = new FilenameSelector(); + selector.setName( "scp*" ); + FileSet fileset = new FileSet(); + fileset.setDir( tempDir ); + fileset.addFilename( selector ); + scp.addFileset( fileset ); + scp.setTodir( sshHostUri ); + scp.execute(); + + File multi = new File( tempDir, "multi" ); + multi.mkdir(); + addCleanup( multi ); + + Scp scp2 = createTask(); + scp2.setFile( sshHostUri + "/scp*" ); + scp2.setTodir( multi.getPath() ); + scp2.execute(); + + FilesMatch match = new FilesMatch(); + for( Iterator i = uploadList.iterator(); i.hasNext(); ) { + File f = (File)i.next(); + match.setFile1( f ); + File f2 = new File( multi, f.getName() ); + match.setFile2( f2 ); + assertTrue("Assert file '" + f.getPath() + "' and file '" + + f2.getPath() + "'", match.eval() ); + } + } + + @Test + 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 + //TODO we should be asserting a value in here + } + + // 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 ); + } + + private void compareFiles(File src, File dest) { + FilesMatch match = new FilesMatch(); + match.setFile1( src ); + match.setFile2( dest ); + + assertTrue( "Assert files are equal.", match.eval() ); + } + + private File createTemporaryFile() throws IOException { + File uploadFile; + uploadFile = File.createTempFile( "scp", "test", tempDir ); + FileWriter writer = new FileWriter( uploadFile ); + writer.write("Can you hear me now?\n"); + writer.close(); + addCleanup( uploadFile ); + return uploadFile; + } + + private Scp createTask() { + Scp scp = new Scp(); + Project p = new Project(); + p.init(); + scp.setProject( p ); + if( knownHosts != null ) { + scp.setKnownhosts( knownHosts ); + } else { + scp.setTrust( true ); + } + scp.setPort( port ); + return scp; + } +}