You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by bf...@apache.org on 2011/10/06 20:00:58 UTC

svn commit: r1179726 - in /oodt/trunk/protocol/protocol-sftp: ./ src/test/org/apache/oodt/cas/protocol/sftp/ src/testdata/ src/testdata/sshTestDir/

Author: bfoster
Date: Thu Oct  6 18:00:58 2011
New Revision: 1179726

URL: http://svn.apache.org/viewvc?rev=1179726&view=rev
Log:
- fixed test failing problem... made test not depend on source path... and made port used to bring up server verified as unused before being used.

Removed:
    oodt/trunk/protocol/protocol-sftp/src/testdata/sshTestDir/
Modified:
    oodt/trunk/protocol/protocol-sftp/pom.xml
    oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/DummyAuthenticationProvider.java
    oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/TestJschSftpProtocol.java
    oodt/trunk/protocol/protocol-sftp/src/testdata/server.xml

Modified: oodt/trunk/protocol/protocol-sftp/pom.xml
URL: http://svn.apache.org/viewvc/oodt/trunk/protocol/protocol-sftp/pom.xml?rev=1179726&r1=1179725&r2=1179726&view=diff
==============================================================================
--- oodt/trunk/protocol/protocol-sftp/pom.xml (original)
+++ oodt/trunk/protocol/protocol-sftp/pom.xml Thu Oct  6 18:00:58 2011
@@ -85,6 +85,21 @@
 		  <scope>test</scope>
 		</dependency>
 		<dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>1.4</version>
+    </dependency>
+		<dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>1.0.3</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.mina</groupId>
+      <artifactId>mina-core</artifactId>
+      <version>2.0.4</version>
+    </dependency>
+		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
 			<version>3.8.2</version>

Modified: oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/DummyAuthenticationProvider.java
URL: http://svn.apache.org/viewvc/oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/DummyAuthenticationProvider.java?rev=1179726&r1=1179725&r2=1179726&view=diff
==============================================================================
--- oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/DummyAuthenticationProvider.java (original)
+++ oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/DummyAuthenticationProvider.java Thu Oct  6 18:00:58 2011
@@ -18,9 +18,14 @@ package org.apache.oodt.cas.protocol.sft
 
 //JDK imports
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.PrintStream;
+import java.util.HashMap;
+import java.util.UUID;
 
 //Apache imports
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -38,8 +43,11 @@ public class DummyAuthenticationProvider
 
 	Log log = LogFactory.getLog(DummyAuthenticationProvider.class);
 
+	private HashMap<String, String> userHomeDirs;
+
 	public DummyAuthenticationProvider() {
 		log.error("DummyAuthenticationProvider is in use. This is only for testing.");
+		userHomeDirs = new HashMap<String, String>();
 	}
 
 	@Override
@@ -50,7 +58,11 @@ public class DummyAuthenticationProvider
 
 	@Override
 	public String getHomeDirectory(String username) throws IOException {
-		return new File("src/testdata").getAbsolutePath();
+		String homeDir = userHomeDirs.get(username);
+		if (homeDir != null) {
+			return homeDir;
+		}
+		return setupHomeDir(username);
 	}
 
 	@Override
@@ -69,4 +81,27 @@ public class DummyAuthenticationProvider
 		return true;
 	}
 
+	private String setupHomeDir(String username) throws IOException {
+		File tempFile = File.createTempFile("bogus", "bogus");
+		File tmpDir = tempFile.getParentFile();
+		tempFile.delete();
+		FileUtils.forceDeleteOnExit(tmpDir);
+		File homeDirFile = new File(tmpDir, "JschSftpTest/" + UUID.randomUUID());
+		File sshTestDir = new File(homeDirFile, "sshTestDir");
+		sshTestDir.mkdirs();
+		PrintStream ps = null;
+		try {
+			ps = new PrintStream(new FileOutputStream(new File(sshTestDir, "sshTestFile")));
+			ps.println("This is a ");
+			ps.println("test");
+			ps.println("file to test SFTP GET");
+		} catch (IOException e) {
+			throw e;
+		} finally {
+			try { ps.close(); } catch (Exception ignore) {}
+		}
+		System.out.println("HOME: " + homeDirFile.getAbsolutePath());
+		userHomeDirs.put(username, homeDirFile.getAbsolutePath());
+		return homeDirFile.getAbsolutePath();
+	}
 }

Modified: oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/TestJschSftpProtocol.java
URL: http://svn.apache.org/viewvc/oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/TestJschSftpProtocol.java?rev=1179726&r1=1179725&r2=1179726&view=diff
==============================================================================
--- oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/TestJschSftpProtocol.java (original)
+++ oodt/trunk/protocol/protocol-sftp/src/test/org/apache/oodt/cas/protocol/sftp/TestJschSftpProtocol.java Thu Oct  6 18:00:58 2011
@@ -19,19 +19,26 @@ package org.apache.oodt.cas.protocol.sft
 //JUnit imports
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Executors;
 
+import javax.xml.parsers.ParserConfigurationException;
+
 //OODT imports
 import org.apache.commons.io.FileUtils;
+import org.apache.mina.util.AvailablePortFinder;
 import org.apache.oodt.cas.protocol.ProtocolFile;
 import org.apache.oodt.cas.protocol.exceptions.ProtocolException;
 import org.apache.oodt.cas.protocol.sftp.auth.HostKeyAuthentication;
 import org.apache.oodt.cas.protocol.util.ProtocolFileFilter;
+import org.xml.sax.SAXException;
 
 //SshTools imports
 import com.sshtools.daemon.SshDaemon;
+import com.sshtools.daemon.configuration.PlatformConfiguration;
+import com.sshtools.daemon.configuration.ServerConfiguration;
 import com.sshtools.daemon.configuration.XmlServerConfigurationContext;
 import com.sshtools.j2ssh.configuration.ConfigurationException;
 import com.sshtools.j2ssh.configuration.ConfigurationLoader;
@@ -46,15 +53,51 @@ import junit.framework.TestCase;
  */
 public class TestJschSftpProtocol extends TestCase {
 
-	private static final int PORT = 2022;
-	
-	public void testPass() { }
-	
+	private TestServerConfiguration serverConfig;
+	private PlatformConfiguration platformConfig;
+
 	@Override
 	public void setUp() {
-    XmlServerConfigurationContext context = new XmlServerConfigurationContext();
-    context.setServerConfigurationResource("src/testdata/server.xml");
-    context.setPlatformConfigurationResource("src/testdata/platform.xml");
+    XmlServerConfigurationContext context = new XmlServerConfigurationContext() {
+
+    	@Override
+    	public void initialize() throws ConfigurationException {
+    		try {
+    			serverConfig = new TestServerConfiguration(ConfigurationLoader.loadFile("src/testdata/server.xml"));
+    		} catch (Exception e) {
+    			throw new ConfigurationException(e.getMessage());
+    		}
+    		try {
+          platformConfig = new PlatformConfiguration(ConfigurationLoader.loadFile("src/testdata/platform.xml")) {};
+    		} catch (Exception e) {
+    			throw new ConfigurationException(e.getMessage());
+    		}
+    	}
+
+    	@Override
+      public boolean isConfigurationAvailable(@SuppressWarnings("rawtypes") Class cls) {
+        try {
+        	getConfiguration(cls);
+        	return true;
+        } catch (Exception e) {
+        	return false;
+        }
+      }
+
+			@Override
+    	public Object getConfiguration(@SuppressWarnings("rawtypes") Class cls) throws ConfigurationException {
+    		if (ServerConfiguration.class.equals(cls)) {
+    			return serverConfig;
+    		} else if (PlatformConfiguration.class.equals(cls)) {
+    			return platformConfig;
+    		} else {
+    			throw new ConfigurationException(cls.getName()
+    					+ " configuration not available");
+    		}
+    	}
+    };
+//    context.setServerConfigurationResource("src/testdata/server.xml");
+//    context.setPlatformConfigurationResource("src/testdata/platform.xml");
     try {
 			ConfigurationLoader.initialize(false, context);
 		} catch (ConfigurationException e1) {
@@ -67,14 +110,14 @@ public class TestJschSftpProtocol extend
 				try {
 					SshDaemon.start();
 				} catch (Exception e) {
-					try { SshDaemon.stop(); } catch (Exception ignore) {}
+					try { SshDaemon.stop(); } catch (Exception ignore) { e.printStackTrace(); }
 					fail("Failed to start SSH daemon");
 				}
 			}
     	
     });
 	}
-	
+
 	@Override
 	public void tearDown() {
 		try {
@@ -83,29 +126,32 @@ public class TestJschSftpProtocol extend
 			fail("Failed to stop SSH daemon");
 		}
 	}
-	
-	public void XtestCDandPWDandLS() throws IOException, ProtocolException {
-		JschSftpProtocol sftpProtocol = new JschSftpProtocol(PORT);
+
+	public void testCDandPWDandLS() throws IOException, ProtocolException {
+		JschSftpProtocol sftpProtocol = new JschSftpProtocol(serverConfig.getPort());
 		sftpProtocol.connect("localhost", new HostKeyAuthentication("bfoster", "",
-				new File("src/testdata/sample-dsa.pub").getAbsoluteFile().getAbsolutePath()));
+				new File("src/testdata/sample-dsa.pub").getAbsoluteFile()
+						.getAbsolutePath()));
 		ProtocolFile homeDir = sftpProtocol.pwd();
 		ProtocolFile testDir = new ProtocolFile(homeDir, "sshTestDir", true);
 		sftpProtocol.cd(testDir);
 		assertEquals(testDir, sftpProtocol.pwd());
-		List<ProtocolFile> lsResults = new ArrayList<ProtocolFile>(sftpProtocol.ls(new ProtocolFileFilter() {
-			public boolean accept(ProtocolFile file) {
-				return file.getName().equals("sshTestFile");
-			}
-		}));
+		List<ProtocolFile> lsResults = new ArrayList<ProtocolFile>(
+				sftpProtocol.ls(new ProtocolFileFilter() {
+					public boolean accept(ProtocolFile file) {
+						return file.getName().equals("sshTestFile");
+					}
+				}));
 		assertEquals(1, lsResults.size());
 		ProtocolFile testFile = lsResults.get(0);
 		assertEquals(new ProtocolFile(testDir, "sshTestFile", false), testFile);
 	}
-	
-	public void XtestGET() throws ProtocolException, IOException {
-		JschSftpProtocol sftpProtocol = new JschSftpProtocol(PORT);
+
+	public void testGET() throws ProtocolException, IOException {
+		JschSftpProtocol sftpProtocol = new JschSftpProtocol(serverConfig.getPort());
 		sftpProtocol.connect("localhost", new HostKeyAuthentication("bfoster", "",
-				new File("src/testdata/sample-dsa.pub").getAbsoluteFile().getAbsolutePath()));
+				new File("src/testdata/sample-dsa.pub").getAbsoluteFile()
+						.getAbsolutePath()));
 		File bogusFile = File.createTempFile("bogus", "bogus");
 		File tmpFile = new File(bogusFile.getParentFile(), "TestJschSftpProtocol");
 		bogusFile.delete();
@@ -113,7 +159,36 @@ public class TestJschSftpProtocol extend
 		sftpProtocol.cd(new ProtocolFile("sshTestDir", true));
 		File testDownloadFile = new File(tmpFile, "testDownloadFile");
 		sftpProtocol.get(new ProtocolFile("sshTestFile", false), testDownloadFile);
-		assertTrue(FileUtils.contentEquals(new File("src/testdata/sshTestDir/sshTestFile"), testDownloadFile));
+		assertTrue(FileUtils.contentEquals(new File(
+				"src/testdata/sshTestDir/sshTestFile"), testDownloadFile));
 		FileUtils.forceDelete(tmpFile);
 	}
+
+	private class TestServerConfiguration extends ServerConfiguration {
+		
+		int commandPort = -1;
+		int port = -1;
+
+		public TestServerConfiguration(InputStream is) throws SAXException, ParserConfigurationException, IOException {
+			super(is);
+		}
+
+		@Override
+		public int getCommandPort() {
+			if (commandPort == -1) {
+				return commandPort = AvailablePortFinder.getNextAvailable(12222);
+			} else {
+				return commandPort;
+			}
+		}
+
+		@Override
+		public int getPort() {
+			if (port == -1) {
+				return port = AvailablePortFinder.getNextAvailable(2022);
+			} else {
+				return port;
+			}
+		}
+	}
 }

Modified: oodt/trunk/protocol/protocol-sftp/src/testdata/server.xml
URL: http://svn.apache.org/viewvc/oodt/trunk/protocol/protocol-sftp/src/testdata/server.xml?rev=1179726&r1=1179725&r2=1179726&view=diff
==============================================================================
--- oodt/trunk/protocol/protocol-sftp/src/testdata/server.xml (original)
+++ oodt/trunk/protocol/protocol-sftp/src/testdata/server.xml Thu Oct  6 18:00:58 2011
@@ -2,7 +2,7 @@
 <ServerConfiguration>
         <!-- this key needs generating by the provided keygen tool -->
         <ServerHostKey PrivateKeyFile="src/testdata/sample-dsa.key"/>
-        <Port>2022</Port>
+        <Port>2323</Port>
         <!--  UserConfigDirectory>src/testdata</UserConfigDirectory -->
         <!-- add other authentication methods as desired -->
         <AllowedAuthentication>password</AllowedAuthentication>