You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wagon-commits@maven.apache.org by br...@apache.org on 2006/11/20 14:16:25 UTC

svn commit: r477167 - in /maven/wagon/trunk/wagon-providers/wagon-ssh/src: main/java/org/apache/maven/wagon/providers/ssh/ main/java/org/apache/maven/wagon/providers/ssh/knownhost/ test/java/org/apache/maven/wagon/providers/ssh/knownhost/ test/resource...

Author: brett
Date: Mon Nov 20 05:16:22 2006
New Revision: 477167

URL: http://svn.apache.org/viewvc?view=rev&rev=477167
Log:
Factor out jsch specifics

Added:
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostChangedException.java   (with props)
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/UnknownHostException.java   (with props)
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/changed.knownhosts
Removed:
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/ok.knownhosts
Modified:
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProvider.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProvider.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostsProvider.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/NullKnownHostProvider.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostProvider.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProvider.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProviderTest.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostsProviderTest.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProviderTest.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/fail.knownhosts

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java Mon Nov 20 05:16:22 2006
@@ -17,6 +17,8 @@
  */
 
 import com.jcraft.jsch.ChannelExec;
+import com.jcraft.jsch.HostKey;
+import com.jcraft.jsch.HostKeyRepository;
 import com.jcraft.jsch.JSch;
 import com.jcraft.jsch.JSchException;
 import com.jcraft.jsch.Proxy;
@@ -40,10 +42,13 @@
 import org.apache.maven.wagon.providers.ssh.interactive.NullInteractiveUserInfo;
 import org.apache.maven.wagon.providers.ssh.interactive.UserInfoUIKeyboardInteractiveProxy;
 import org.apache.maven.wagon.providers.ssh.knownhost.KnownHostsProvider;
+import org.apache.maven.wagon.providers.ssh.knownhost.UnknownHostException;
+import org.apache.maven.wagon.providers.ssh.knownhost.KnownHostChangedException;
 import org.apache.maven.wagon.repository.RepositoryPermissions;
 import org.apache.maven.wagon.resource.Resource;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringInputStream;
 import org.codehaus.plexus.util.StringUtils;
 
 import java.io.BufferedReader;
@@ -52,7 +57,9 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.io.PrintWriter;
 import java.io.StringReader;
+import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
@@ -140,21 +147,16 @@
             }
         }
 
-        Properties config = new Properties();
-        config.setProperty( "BatchMode", interactive ? "no" : "yes" );
-
         if ( !interactive )
         {
             interactiveUserInfo = new NullInteractiveUserInfo();
             uIKeyboardInteractive = null;
         }
 
-        knownHostsProvider.addConfiguration( config );
-
-        initJsch( privateKey, host, port, config );
+        initJsch( privateKey, host, port );
     }
 
-    private void initJsch( File privateKey, String host, int port, Properties config )
+    private void initJsch( File privateKey, String host, int port )
         throws AuthenticationException
     {
         JSch sch = new JSch();
@@ -217,37 +219,80 @@
             ui = new UserInfoUIKeyboardInteractiveProxy( ui, uIKeyboardInteractive );
         }
 
+        Properties config = new Properties();
         if ( knownHostsProvider != null )
         {
             try
             {
-                knownHostsProvider.addKnownHosts( sch, ui );
+                String contents = knownHostsProvider.getContents();
+                if ( contents != null )
+                {
+                    sch.setKnownHosts( new StringInputStream( contents ) );
+                }
             }
             catch ( JSchException e )
             {
                 fireSessionError( e );
                 // continue without known_hosts
             }
+            config.setProperty( "StrictHostKeyChecking", knownHostsProvider.getHostKeyChecking() );
         }
 
+        config.setProperty( "BatchMode", interactive ? "no" : "yes" );
+
         session.setConfig( config );
 
         session.setUserInfo( ui );
 
+        StringWriter stringWriter = new StringWriter();
         try
         {
             session.connect();
 
             if ( knownHostsProvider != null )
             {
-                knownHostsProvider.storeKnownHosts( sch );
+                PrintWriter w = new PrintWriter( stringWriter );
+
+                HostKeyRepository hkr = sch.getHostKeyRepository();
+                HostKey[] keys = hkr.getHostKey();
+
+                for ( int i = 0; i < keys.length; i++ )
+                {
+                    HostKey key = keys[i];
+                    w.println( key.getHost() + " " + key.getType() + " " + key.getKey() );
+                }
             }
         }
         catch ( JSchException e )
         {
             fireSessionError( e );
 
-            throw new AuthenticationException( "Cannot connect. Reason: " + e.getMessage(), e );
+            if ( e.getMessage().startsWith( "UnknownHostKey:" ) || e.getMessage().startsWith( "reject HostKey:") )
+            {
+                throw new UnknownHostException( host, e );
+            }
+            else if ( e.getMessage().indexOf( "HostKey has been changed" ) >= 0 )
+            {
+                throw new KnownHostChangedException( host, e );
+            }
+            else
+            {
+                throw new AuthenticationException( "Cannot connect. Reason: " + e.getMessage(), e );
+            }
+        }
+
+        try
+        {
+            knownHostsProvider.storeKnownHosts( stringWriter.toString() );
+        }
+        catch ( IOException e )
+        {
+            closeConnection();
+
+            fireSessionError( e );
+
+            throw new AuthenticationException(
+                "Connection aborted - failed to write to known_hosts. Reason: " + e.getMessage(), e );
         }
     }
 

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProvider.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProvider.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProvider.java Mon Nov 20 05:16:22 2006
@@ -16,9 +16,6 @@
  * limitations under the License.
  */
 
-import com.jcraft.jsch.JSch;
-
-import java.util.Properties;
 import java.io.IOException;
 
 /**
@@ -30,12 +27,15 @@
 public abstract class AbstractKnownHostsProvider
     implements KnownHostsProvider
 {
-    private String hostKeyChecking;
-
-    public void addConfiguration( Properties config )
-    {
-        config.setProperty( HOST_KEY_CHECKING, hostKeyChecking );
-    }
+    /**
+     * Valid values are ask, yes, no.
+     */
+    private String hostKeyChecking = "yes";
+
+    /**
+     * the known hosts, in the openssh format
+     */
+    protected String contents;
 
     public void setHostKeyChecking( String hostKeyChecking )
     {
@@ -47,7 +47,13 @@
         return hostKeyChecking;
     }
 
-    public void storeKnownHosts( JSch sch )
+    public String getContents()
+    {
+        return contents;
+    }
+
+    public void storeKnownHosts( String contents )
+        throws IOException
     {
     }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProvider.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProvider.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProvider.java Mon Nov 20 05:16:22 2006
@@ -2,7 +2,6 @@
 
 import com.jcraft.jsch.HostKey;
 import com.jcraft.jsch.HostKeyRepository;
-import com.jcraft.jsch.JSch;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
@@ -13,6 +12,7 @@
 import java.io.PrintWriter;
 
 import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.FileUtils;
 
 /*
  * Copyright 2001-2005 The Apache Software Foundation.
@@ -66,32 +66,11 @@
         this( new File( System.getProperty( "user.home" ), ".ssh/known_hosts" ) );
     }
 
-    public void storeKnownHosts( JSch sch )
+    public void storeKnownHosts( String contents )
+        throws IOException
     {
-        PrintWriter w = null;
-        try
-        {
-            w = new PrintWriter( new FileWriter( file ) );
-
-            HostKeyRepository hkr = sch.getHostKeyRepository();
-            HostKey[] keys = hkr.getHostKey();
-
-            for ( int i = 0; i < keys.length; i++ )
-            {
-                HostKey key = keys[i];
-                w.println( key.getHost() + " " + key.getType() + " " + key.getKey() );
-            }
-        }
-        catch ( IOException e )
-        {
-            // TODO: log it
-        }
-        finally
-        {
-            IOUtil.close( w );
-        }
-
-        super.storeKnownHosts( sch );
+        file.getParentFile().mkdirs();
+        FileUtils.fileWrite( file.getAbsolutePath(), contents );
     }
 
     public File getFile()

Added: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostChangedException.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostChangedException.java?view=auto&rev=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostChangedException.java (added)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostChangedException.java Mon Nov 20 05:16:22 2006
@@ -0,0 +1,15 @@
+package org.apache.maven.wagon.providers.ssh.knownhost;
+
+import org.apache.maven.wagon.authentication.AuthenticationException;
+
+/**
+ * Exception related to known_host check failures.
+ */
+public class KnownHostChangedException
+    extends AuthenticationException
+{
+    public KnownHostChangedException( String host, Throwable cause )
+    {
+        super( "The host key was different to that in the known_hosts configuration for host: " + host, cause );
+    }
+}

Propchange: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostChangedException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostsProvider.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostsProvider.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostsProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostsProvider.java Mon Nov 20 05:16:22 2006
@@ -21,6 +21,7 @@
 import com.jcraft.jsch.UserInfo;
 
 import java.util.Properties;
+import java.io.IOException;
 
 /**
  * Provides a way to add Known Hosts fingerprints to the JSch transport
@@ -32,21 +33,12 @@
 {
     String ROLE = KnownHostsProvider.class.getName();
 
-    String HOST_KEY_CHECKING = "StrictHostKeyChecking";
-
-    /**
-     * Adds to the session all the known hosts
-     * 
-     * @param sch JSch transport
-     */
-    void addKnownHosts( JSch sch, UserInfo userInfo )
-        throws JSchException;
-
-    void addConfiguration( Properties config );
-
-    void storeKnownHosts( JSch sch );
+    void storeKnownHosts( String contents )
+        throws IOException;
 
     void setHostKeyChecking( String hostKeyChecking );
 
     String getHostKeyChecking();
+
+    String getContents();
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/NullKnownHostProvider.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/NullKnownHostProvider.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/NullKnownHostProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/NullKnownHostProvider.java Mon Nov 20 05:16:22 2006
@@ -31,11 +31,4 @@
 public final class NullKnownHostProvider
     extends AbstractKnownHostsProvider
 {
-    /**
-     * @see KnownHostsProvider#addKnownHosts(com.jcraft.jsch.JSch, com.jcraft.jsch.UserInfo)
-     */
-    public void addKnownHosts( JSch sch, UserInfo userInfo )
-    {
-        // nothing to do ;-)
-    }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostProvider.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostProvider.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostProvider.java Mon Nov 20 05:16:22 2006
@@ -31,34 +31,10 @@
     extends AbstractKnownHostsProvider
 {
     /**
-     * the host ...
-     */
-    private String host;
-
-    /**
-     * the key ...
-     */
-    private String key;
-
-    public SingleKnownHostProvider()
-    {
-    }
-
-    /**
      * Creates the SingleKnownHostProvider.
      */
     public SingleKnownHostProvider( String host, String key )
     {
-        this.host = host;
-        this.key = key;
-    }
-
-    /**
-     * @see KnownHostsProvider#addKnownHosts(com.jcraft.jsch.JSch, UserInfo)
-     */
-    public void addKnownHosts( JSch sch, UserInfo userInfo )
-    {
-        HostKeyRepository hkr = sch.getHostKeyRepository();
-        hkr.add( host, Base64.decodeBase64( key.getBytes() ), userInfo );
+        this.contents = host + " ssh-rsa " + key + "\n";
     }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProvider.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProvider.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProvider.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProvider.java Mon Nov 20 05:16:22 2006
@@ -35,10 +35,6 @@
 public class StreamKnownHostsProvider
     extends AbstractKnownHostsProvider
 {
-    /**
-     * the known hosts, in the openssh format
-     */
-    private final String contents;
 
     public StreamKnownHostsProvider( InputStream stream )
         throws IOException
@@ -53,14 +49,5 @@
         {
             IOUtil.close( stream );
         }
-    }
-
-    /**
-     * @see KnownHostsProvider#addKnownHosts(com.jcraft.jsch.JSch, UserInfo)
-     */
-    public void addKnownHosts( JSch sch, UserInfo userInfo )
-        throws JSchException
-    {
-        sch.setKnownHosts( new StringInputStream( contents ) );
     }
 }

Added: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/UnknownHostException.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/UnknownHostException.java?view=auto&rev=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/UnknownHostException.java (added)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/UnknownHostException.java Mon Nov 20 05:16:22 2006
@@ -0,0 +1,31 @@
+package org.apache.maven.wagon.providers.ssh.knownhost;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import org.apache.maven.wagon.authentication.AuthenticationException;
+
+/**
+ * Exception related to known_host check failures.
+ */
+public class UnknownHostException
+    extends AuthenticationException
+{
+    public UnknownHostException( String host, Throwable cause )
+    {
+        super( "The host was not known and was not accepted by the configuration: " + host, cause );
+    }
+}

Propchange: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/UnknownHostException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProviderTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProviderTest.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProviderTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProviderTest.java Mon Nov 20 05:16:22 2006
@@ -16,12 +16,11 @@
  * limitations under the License.
  */
 
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
-import junit.framework.TestCase;
-import org.apache.maven.wagon.providers.ssh.knownhost.KnownHostsProvider;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.providers.ssh.AbstractSshWagon;
 import org.apache.maven.wagon.providers.ssh.TestData;
+import org.apache.maven.wagon.repository.Repository;
+import org.codehaus.plexus.PlexusTestCase;
 
 /**
  * Generic Unit test for <code>KnownHostsProvider</code>
@@ -31,15 +30,17 @@
  * @since Sep 12, 2005
  */
 public abstract class AbstractKnownHostsProviderTest
-    extends TestCase
+    extends PlexusTestCase
 {
     protected KnownHostsProvider okHostsProvider;
 
     protected KnownHostsProvider failHostsProvider;
 
-    protected final String user = TestData.getUserName();
+    protected KnownHostsProvider changedHostsProvider;
 
-    protected String host;
+    private AbstractSshWagon wagon;
+
+    private Repository source;
 
     /**
      * tests what happens if the remote host has a different key than the one
@@ -50,43 +51,63 @@
     public void testIncorrectKey()
         throws Exception
     {
-        final JSch sch = new JSch();
+        wagon.setKnownHostsProvider( failHostsProvider );
 
-        failHostsProvider.addKnownHosts( sch, null );
         try
         {
-            sch.getSession( user, host ).connect();
+            wagon.connect( source );
 
             fail( "Should not have successfully connected - host is not known" );
         }
-        catch ( JSchException e )
+        catch ( UnknownHostException e )
         {
-            assertTrue( e.getMessage().startsWith( "UnknownHostKey:" ) );
+            // ok
         }
     }
 
     /**
-     * tests what happens if the remote host has the expected key
+     * tests what happens if the remote host has changed since being recorded.
      *
      * @throws Exception on error
      */
-    public void testCorrectKey()
+    public void testChangedKey()
         throws Exception
     {
-        final JSch sch = new JSch();
-        sch.addIdentity( TestData.getPrivateKey().getAbsolutePath(), "" );
-
-        okHostsProvider.addKnownHosts( sch, null );
-
-        final Session session = sch.getSession( user, host );
+        wagon.setKnownHostsProvider( changedHostsProvider );
 
         try
         {
-            session.connect();
+            wagon.connect( source );
+
+            fail( "Should not have successfully connected - host is changed" );
         }
-        catch ( JSchException e )
+        catch ( KnownHostChangedException e )
         {
-            assertFalse( e.getMessage().indexOf( "UnknownHostKey") >= 0 );
+            // ok
         }
+    }
+
+    /**
+     * tests what happens if the remote host has the expected key
+     *
+     * @throws Exception on error
+     */
+    public void testCorrectKey()
+        throws Exception
+    {
+        wagon.setKnownHostsProvider( okHostsProvider );
+
+        wagon.connect( source );
+    }
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        source =
+            new Repository( "test", "scp://" + TestData.getUserName() + "@" + TestData.getHostname() + "/tmp/foo" );
+
+        wagon = (AbstractSshWagon) lookup( Wagon.ROLE, "scp" );
+        wagon.setInteractive( false );
     }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostsProviderTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostsProviderTest.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostsProviderTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/SingleKnownHostsProviderTest.java Mon Nov 20 05:16:22 2006
@@ -1,7 +1,5 @@
 package org.apache.maven.wagon.providers.ssh.knownhost;
 
-import org.apache.maven.wagon.providers.ssh.TestData;
-
 /*
  * Copyright 2001-2005 The Apache Software Foundation.
  *
@@ -18,6 +16,8 @@
  * limitations under the License.
  */
 
+import org.apache.maven.wagon.providers.ssh.TestData;
+
 /**
  * Unit test for <code>SingleKnownHostProvider</code>
  *
@@ -28,17 +28,18 @@
 public class SingleKnownHostsProviderTest
     extends AbstractKnownHostsProviderTest
 {
-    private final String correctKey = TestData.getHostKey();
+    private final String CORRECT_KEY = TestData.getHostKey();
 
-    private final String incorrectKey = "thisisawrongkey=";
+    private static final String CHANGED_KEY =
+        "AAAAB3NzaC1yc2EAAAABIwAAAQEA8VLKkfHl2CNqW+m0603z07dyweWzzdVGQlMPUX4z1264E7M/h+6lPKiOo+u49CL7eQVA+FtWTZoJ3oBAMABcKnHx41TnSpQUkbdR6rzyC6IG1lXiVtEjG2w7DUnxpCtVo5PaQuJobwoXv5NNL3vx03THPgcDJquLPWvGnDWhnXoEh3/6c7rprwT+PrjZ6LIT35ZCUGajoehhF151oNbFMQHllfR6EAiZIP0z0nIVI+Jiv6g+XZapumVPVYjdOfxvLKQope1H9HJamT3bDIm8mkebUB10DzQJYxFt4/0wiNH3L4jsIFn+CiW1/IQm5yyff1CUO87OqVbtp9BlaXZNmw==";
 
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
-        this.host = TestData.getHostname();
-        this.okHostsProvider = new SingleKnownHostProvider( host, correctKey );
-        this.failHostsProvider = new SingleKnownHostProvider( host, incorrectKey );
+        this.okHostsProvider = new SingleKnownHostProvider( TestData.getHostname(), CORRECT_KEY );
+        this.failHostsProvider = new SingleKnownHostProvider( "beaver.codehaus.org", CORRECT_KEY );
+        this.changedHostsProvider = new SingleKnownHostProvider( TestData.getHostname(), CHANGED_KEY );
     }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProviderTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProviderTest.java?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProviderTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProviderTest.java Mon Nov 20 05:16:22 2006
@@ -16,8 +16,11 @@
  * limitations under the License.
  */
 
-import java.io.InputStream;
+import org.apache.maven.wagon.providers.ssh.TestData;
+import org.codehaus.plexus.util.StringInputStream;
+
 import java.io.IOException;
+import java.io.InputStream;
 
 /**
  * Unit test for <code>StreamKnownHostsProviderTest</code>
@@ -34,9 +37,10 @@
     {
         super.setUp();
 
-        host = "beaver.codehaus.org";
-        okHostsProvider = getProvider( "ok.knownhosts" );
+        okHostsProvider = new StreamKnownHostsProvider(
+            new StringInputStream( TestData.getHostname() + " ssh-rsa " + TestData.getHostKey() + "\n" ) );
         failHostsProvider = getProvider( "fail.knownhosts" );
+        changedHostsProvider = getProvider( "changed.knownhosts" );
     }
 
     private StreamKnownHostsProvider getProvider( String s )

Added: maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/changed.knownhosts
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/changed.knownhosts?view=auto&rev=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/changed.knownhosts (added)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/changed.knownhosts Mon Nov 20 05:16:22 2006
@@ -0,0 +1 @@
+localhost ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA8VLKkfHl2CNqW+m0603z07dyweWzzdVGQlMPUX4z1264E7M/h+6lPKiOo+u49CL7eQVA+FtWTZoJ3oBAMABcKnHx41TnSpQUkbdR6rzyC6IG1lXiVtEjG2w7DUnxpCtVo5PaQuJobwoXv5NNL3vx03THPgcDJquLPWvGnDWhnXoEh3/6c7rprwT+PrjZ6LIT35ZCUGajoehhF151oNbFMQHllfR6EAiZIP0z0nIVI+Jiv6g+XZapumVPVYjdOfxvLKQope1H9HJamT3bDIm8mkebUB10DzQJYxFt4/0wiNH3L4jsIFn+CiW1/IQm5yyff1CUO87OqVbtp9BlaXZNmw==

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/fail.knownhosts
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/fail.knownhosts?view=diff&rev=477167&r1=477166&r2=477167
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/fail.knownhosts (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/test/resources/org/apache/maven/wagon/providers/ssh/knownhost/fail.knownhosts Mon Nov 20 05:16:22 2006
@@ -1 +1 @@
-beaver.codehaus.org,64.7.141.17 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwps9EL+UKFG6Fb9spvV6YSOiyLFwVGAgtyQ5r6xdADZRw0AdcCE87uwlVgUgMjGm0D/kifVEYFZu1DQUaKfg+6B3LEz7Dgq5Ir8eJJXq62mIVqHnXKPOqGIp1TPrtc2BMhSHk5z+4puun6Nbi0hw+g7b0/ywHVbs+7wb01SMREU=
\ No newline at end of file
+beaver.codehaus.org ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwps9EL+UKFG6Fb9spvV6YSOiyLFwVGAgtyQ5r6xdADZRw0AdcCE87uwlVgUgMjGm0D/kifVEYFZu1DQUaKfg+6B3LEz7Dgq5Ir8eJJXq62mIVqHnXKPOqGIp1TPrtc2BMhSHk5z+4puun6Nbi0hw+g7b0/ywHVbs+7wb01SMREU=



---------------------------------------------------------------------
To unsubscribe, e-mail: wagon-commits-unsubscribe@maven.apache.org
For additional commands, e-mail: wagon-commits-help@maven.apache.org