This seems to have broken the unit tests... are they working for you?

- Brett

On 03/01/2009, at 10:35 AM, [email protected] wrote:

Author: dantran
Date: Fri Jan  2 15:35:51 2009
New Revision: 730869

URL: http://svn.apache.org/viewvc?rev=730869&view=rev
Log:
WAGON-254: rewritten known_hosts file only if its contents are changed

Added:
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/KnownHostEntry.java maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/ org/apache/maven/wagon/providers/ssh/knownhost/ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/ org/apache/maven/wagon/providers/ssh/knownhost/ FileKnownHostsProviderTest.java maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/known_hosts maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/known_hosts_same
Modified:
maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ AbstractKnownHostsProvider.java maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ FileKnownHostsProvider.java maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ StreamKnownHostsProvider.java

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-common/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-common/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/AbstractKnownHostsProvider.java?rev=730869&r1=730868&r2=730869&view=diff
= = = = = = = = ====================================================================== --- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ AbstractKnownHostsProvider.java (original) +++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ AbstractKnownHostsProvider.java Fri Jan 2 15:35:51 2009
@@ -20,6 +20,8 @@
 */

import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;

/**
 * Common base for known hosts providers.
@@ -41,6 +43,8 @@
     * the known hosts, in the openssh format
     */
    protected String contents;
+
+    protected Set knownHosts = new HashSet();

    public void setHostKeyChecking( String hostKeyChecking )
    {
@@ -56,14 +60,11 @@
    {
        return contents;
    }
-
-    public void setContents( String contents )
-    {
-        this.contents = contents;
-    }

    public void storeKnownHosts( String contents )
        throws IOException
    {
    }
+
+
}

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-common/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-common/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProvider.java?rev=730869&r1=730868&r2=730869&view=diff
= = = = = = = = ====================================================================== --- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ FileKnownHostsProvider.java (original) +++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ FileKnownHostsProvider.java Fri Jan 2 15:35:51 2009
@@ -19,13 +19,14 @@
 * under the License.
 */

-import org.codehaus.plexus.util.FileUtils;
-
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Set;
+
+import org.codehaus.plexus.util.FileUtils;

/**
 * Provides known hosts from a file
@@ -70,10 +71,16 @@
    public void storeKnownHosts( String contents )
        throws IOException
    {
-        file.getParentFile().mkdirs();
-        FileUtils.fileWrite( file.getAbsolutePath(), contents );
+        Set hosts = this.loadKnownHosts( contents );
+
+        if ( ! this.knownHosts.equals( hosts ) )
+        {
+            file.getParentFile().mkdirs();
+            FileUtils.fileWrite( file.getAbsolutePath(), contents );
+            this.knownHosts = hosts;
+        }
    }
-
+
    public File getFile()
    {
        return file;

Added: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/ java/org/apache/maven/wagon/providers/ssh/knownhost/ KnownHostEntry.java
URL: 
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/KnownHostEntry.java?rev=730869&view=auto
= = = = = = = = ====================================================================== --- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/KnownHostEntry.java (added) +++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/KnownHostEntry.java Fri Jan 2 15:35:51 2009
@@ -0,0 +1,97 @@
+package org.apache.maven.wagon.providers.ssh.knownhost;
+
+public class KnownHostEntry
+{
+
+    private String hostName;
+
+    private String keyType;
+
+    private String keyValue;
+
+    public KnownHostEntry()
+    {
+
+    }
+
+ public KnownHostEntry( String hostName, String keyType, String keyValue )
+    {
+        this.hostName = hostName;
+        this.keyType = keyType;
+        this.keyValue = keyValue;
+    }
+
+    public String getHostName()
+    {
+        return hostName;
+    }
+
+    public void setHostName( String hostName )
+    {
+        this.hostName = hostName;
+    }
+
+    public String getKeyType()
+    {
+        return keyType;
+    }
+
+    public void setKeyType( String keyType )
+    {
+        this.keyType = keyType;
+    }
+
+    public String getKeyValue()
+    {
+        return keyValue;
+    }
+
+    public void setKeyValue( String keyValue )
+    {
+        this.keyValue = keyValue;
+    }
+
+    public int hashCode()
+    {
+        final int prime = 31;
+        int result = 1;
+ result = prime * result + ( ( hostName == null ) ? 0 : hostName.hashCode() ); + result = prime * result + ( ( keyType == null ) ? 0 : keyType.hashCode() ); + result = prime * result + ( ( keyValue == null ) ? 0 : keyValue.hashCode() );
+        return result;
+    }
+
+    public boolean equals( Object obj )
+    {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false;
+        if ( getClass() != obj.getClass() )
+            return false;
+        KnownHostEntry other = (KnownHostEntry) obj;
+        if ( hostName == null )
+        {
+            if ( other.hostName != null )
+                return false;
+        }
+        else if ( !hostName.equals( other.hostName ) )
+            return false;
+        if ( keyType == null )
+        {
+            if ( other.keyType != null )
+                return false;
+        }
+        else if ( !keyType.equals( other.keyType ) )
+            return false;
+        if ( keyValue == null )
+        {
+            if ( other.keyValue != null )
+                return false;
+        }
+        else if ( !keyValue.equals( other.keyValue ) )
+            return false;
+        return true;
+    }
+
+}

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-common/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-common/src/main/java/org/apache/maven/wagon/providers/ssh/knownhost/StreamKnownHostsProvider.java?rev=730869&r1=730868&r2=730869&view=diff
= = = = = = = = ====================================================================== --- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ StreamKnownHostsProvider.java (original) +++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/ org/apache/maven/wagon/providers/ssh/knownhost/ StreamKnownHostsProvider.java Fri Jan 2 15:35:51 2009
@@ -19,11 +19,16 @@
 * under the License.
 */

-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.StringOutputStream;
-
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
+import java.io.StringReader;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.codehaus.plexus.util.IOUtil;
+import org.codehaus.plexus.util.StringOutputStream;
+import org.codehaus.plexus.util.StringUtils;

/**
 * Provides known hosts from a file
@@ -43,10 +48,38 @@
StringOutputStream stringOutputStream = new StringOutputStream();
            IOUtil.copy( stream, stringOutputStream );
            this.contents = stringOutputStream.toString();
+
+            this.knownHosts = this.loadKnownHosts( this.contents );
        }
        finally
        {
            IOUtil.close( stream );
        }
    }
+
+    protected Set loadKnownHosts( String contents )
+        throws IOException
+    {
+        Set hosts = new HashSet();
+
+ BufferedReader br = new BufferedReader( new StringReader( contents ) );
+
+        String line = null;
+
+        do
+        {
+            line = br.readLine();
+            if ( line != null )
+            {
+                String tokens[] = StringUtils.split( line );
+                if ( tokens.length == 3 )
+                {
+ hosts.add( new KnownHostEntry( tokens[0], tokens[1], tokens[2] ) );
+                }
+            }
+
+        }while ( line != null );
+
+        return hosts;
+    }
}

Added: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ java/org/apache/maven/wagon/providers/ssh/knownhost/ FileKnownHostsProviderTest.java
URL: 
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/org/apache/maven/wagon/providers/ssh/knownhost/FileKnownHostsProviderTest.java?rev=730869&view=auto
= = = = = = = = ====================================================================== --- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/ org/apache/maven/wagon/providers/ssh/knownhost/ FileKnownHostsProviderTest.java (added) +++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/java/ org/apache/maven/wagon/providers/ssh/knownhost/ FileKnownHostsProviderTest.java Fri Jan 2 15:35:51 2009
@@ -0,0 +1,57 @@
+package org.apache.maven.wagon.providers.ssh.knownhost;
+
+import java.io.File;
+
+import org.codehaus.plexus.util.FileUtils;
+
+import junit.framework.TestCase;
+
+public class FileKnownHostsProviderTest
+    extends TestCase
+{
+ private File basedir = new File( System.getProperty( "basedir", "." ) );
+
+    private File testKnownHostsFile;
+
+
+    private FileKnownHostsProvider provider;
+
+    public void setUp()
+        throws Exception
+    {
+ File readonlyKnownHostFile = new File( basedir, "src/test/ resources/known_hosts" ); + testKnownHostsFile = new File( basedir, "target/ known_hosts" );
+        testKnownHostsFile.delete();
+ FileUtils.copyFile( readonlyKnownHostFile, testKnownHostsFile );
+
+        provider = new FileKnownHostsProvider( testKnownHostsFile );
+
+    }
+
+    public void testStoreKnownHostsNoChange()
+        throws Exception
+    {
+        long timestamp = this.testKnownHostsFile.lastModified();
+        //file with the same contents, but with entries swapped
+ File sameKnownHostFile = new File( basedir, "src/test/ resources/known_hosts_same" );
+        String contents = FileUtils.fileRead( sameKnownHostFile );
+
+        Thread.sleep( 50 );
+        provider.storeKnownHosts( contents );
+ assertEquals( "known_hosts file is rewritten", timestamp, testKnownHostsFile.lastModified() );
+    }
+
+    public void testStoreKnownHostsWithChange()
+        throws Exception
+    {
+        long timestamp = this.testKnownHostsFile.lastModified();
+ File sameKnownHostFile = new File( basedir, "src/test/ resources/known_hosts_same" );
+        String contents = FileUtils.fileRead( sameKnownHostFile );
+        contents += "1 2 3";
+
+        Thread.sleep( 50 );
+        provider.storeKnownHosts( contents );
+ assertTrue( "known_hosts file is not rewritten", timestamp ! = testKnownHostsFile.lastModified() );
+    }
+
+}

Added: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/known_hosts
URL: 
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/resources/known_hosts?rev=730869&view=auto
= = = = = = = = ====================================================================== --- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/known_hosts (added) +++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/known_hosts Fri Jan 2 15:35:51 2009
@@ -0,0 +1,2 @@
+server,192.168.0.10 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtnWEbH/ WTZG2aAl9gX8HtMqXidzQXgluARIOijWigbvA4/3N4fnNmckXBUHR32iqHQM/ ySIRhc9EVDanDy0JyKdm738PwP0DbWGqiIDTtukbju4DAtXtOx3LgIqHc0PD+cquO9Ut/ 68o6/GdBgN18nVOMt+8Q9Vr1VSFqfHoLEx04NI+4BbGaGKQOFU25VJ3KtM0zkoyDfu0/ MDusVoFIDVb0KtfxZVEDRmEFnySpFHOBdSdODsunftYccCNTNdsh + 58jSqChUUlP3B0bTykm7o52CrXCMWCsLzH6dDkN7GUQwLvjPG04gedeZg6tEN8vTInRmHQrp0TTW7JGNjXgw == +192.168.0.11 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtnWEbH/ WTZG2aAl9gX8HtMqXidzQXgluARIOijWigbvA4/3N4fnNmckXBUHR32iqHQM/ ySIRhc9EVDanDy0JyKdm738PwP0DbWGqiIDTtukbju4DAtXtOx3LgIqHc0PD+cquO9Ut/ 68o6/GdBgN18nVOMt+8Q9Vr1VSFqfHoLEx04NI+4BbGaGKQOFU25VJ3KtM0zkoyDfu0/ MDusVoFIDVb0KtfxZVEDRmEFnySpFHOBdSdODsunftYccCNTNdsh + 58jSqChUUlP3B0bTykm7o52CrXCMWCsLzH6dDkN7GUQwLvjPG04gedeZg6tEN8vTInRmHQrp0TTW7JGNjXgw ==

Added: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/known_hosts_same
URL: 
http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/resources/known_hosts_same?rev=730869&view=auto
= = = = = = = = ====================================================================== --- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/known_hosts_same (added) +++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/test/ resources/known_hosts_same Fri Jan 2 15:35:51 2009
@@ -0,0 +1,2 @@
+192.168.0.11 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtnWEbH/ WTZG2aAl9gX8HtMqXidzQXgluARIOijWigbvA4/3N4fnNmckXBUHR32iqHQM/ ySIRhc9EVDanDy0JyKdm738PwP0DbWGqiIDTtukbju4DAtXtOx3LgIqHc0PD+cquO9Ut/ 68o6/GdBgN18nVOMt+8Q9Vr1VSFqfHoLEx04NI+4BbGaGKQOFU25VJ3KtM0zkoyDfu0/ MDusVoFIDVb0KtfxZVEDRmEFnySpFHOBdSdODsunftYccCNTNdsh + 58jSqChUUlP3B0bTykm7o52CrXCMWCsLzH6dDkN7GUQwLvjPG04gedeZg6tEN8vTInRmHQrp0TTW7JGNjXgw == +server,192.168.0.10 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtnWEbH/ WTZG2aAl9gX8HtMqXidzQXgluARIOijWigbvA4/3N4fnNmckXBUHR32iqHQM/ ySIRhc9EVDanDy0JyKdm738PwP0DbWGqiIDTtukbju4DAtXtOx3LgIqHc0PD+cquO9Ut/ 68o6/GdBgN18nVOMt+8Q9Vr1VSFqfHoLEx04NI+4BbGaGKQOFU25VJ3KtM0zkoyDfu0/ MDusVoFIDVb0KtfxZVEDRmEFnySpFHOBdSdODsunftYccCNTNdsh + 58jSqChUUlP3B0bTykm7o52CrXCMWCsLzH6dDkN7GUQwLvjPG04gedeZg6tEN8vTInRmHQrp0TTW7JGNjXgw ==



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


--
Brett Porter
[email protected]
http://blogs.exist.com/bporter/


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to