You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/08/02 00:55:48 UTC

svn commit: r681887 [8/10] - in /maven/sandbox/trunk/mercury: mercury-artifact/ mercury-artifact/src/ mercury-artifact/src/main/ mercury-artifact/src/main/java/ mercury-artifact/src/main/java/org/ mercury-artifact/src/main/java/org/apache/ mercury-arti...

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,445 @@
+/**
+ * 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.maven.mercury.spi.http.client;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.mercury.spi.http.client.deploy.DefaultDeployer;
+import org.apache.maven.mercury.spi.http.client.deploy.DeployRequest;
+import org.apache.maven.mercury.spi.http.client.deploy.DeployResponse;
+import org.apache.maven.mercury.spi.http.server.SimplePutServer;
+import org.apache.maven.mercury.spi.http.validate.Validator;
+import org.apache.maven.mercury.transport.SHA1VerifierFactory;
+import org.apache.maven.mercury.transport.api.Binding;
+import org.apache.maven.mercury.transport.api.StreamObserverFactory;
+import org.mortbay.util.IO;
+
+public class JettyDeployerTest extends TestCase
+{
+    public String _HOST_FRAGMENT = "http://localhost:";
+    public static final String __PATH_FRAGMENT = "/maven2/repo/";
+    protected DefaultDeployer _deployer;
+    protected SimplePutServer _putServer;
+    protected String _port;
+    File _baseDir;
+    File _file0;
+    File _file1;
+    File _file2;
+    File _file3;
+    File _file4;
+    File _file5;
+
+    org.apache.maven.mercury.transport.api.Server remoteServerType;
+    HashSet<StreamObserverFactory> factories;
+    
+    private class DeployRequestImpl implements DeployRequest
+    {
+        private Set<Binding> _bindings = new HashSet<Binding>();
+        private boolean _failFast;
+        
+        public Set<Validator> getValidators()
+        {
+            return null;
+        }
+        public void setBindings(Set<Binding> bindings)
+        {
+            _bindings=bindings;
+        }
+        public Set<Binding> getBindings()
+        {
+            return _bindings;
+        }
+
+        public boolean isFailFast()
+        {
+            return _failFast;
+        }
+        
+        public void setFailFast (boolean f)
+        {
+            _failFast=f;
+        }
+    };
+    
+    public JettyDeployerTest () throws Exception
+    {
+        //copy the test files from the classpath to disk
+        _baseDir = File.createTempFile("deployerTestFiles",null);
+        _baseDir.delete();
+        _baseDir.mkdir();
+        _baseDir.deleteOnExit();       
+        URL list = JettyDeployerTest.class.getResource("/testRepo/");
+        LineNumberReader in = new LineNumberReader(new InputStreamReader(list.openStream()));
+        String file=null;
+        while ((file=in.readLine())!=null)
+        {
+            if (!file.startsWith("file"))
+                continue;
+            OutputStream out=new FileOutputStream(new File(_baseDir,file));
+            IO.copy(JettyDeployerTest.class.getResource("/testRepo/"+file).openStream(),out);
+            out.close();
+        }
+    }
+
+    protected void setUp() throws Exception
+    {        
+
+        _deployer = new DefaultDeployer();
+        _putServer = new SimplePutServer();
+        _putServer.start();
+        _port = String.valueOf(_putServer.getPort());
+        setUpVerifiers();
+        super.setUp();
+    }
+    
+    protected void setUpVerifiers () throws Exception
+    {
+        HashSet<org.apache.maven.mercury.transport.api.Server> remoteServerTypes = new HashSet<org.apache.maven.mercury.transport.api.Server>();
+        remoteServerType = new org.apache.maven.mercury.transport.api.Server( "test", new URL(_HOST_FRAGMENT+_port));
+        factories = new HashSet<StreamObserverFactory>();       
+        remoteServerTypes.add(remoteServerType);
+        _deployer.setServers(remoteServerTypes);
+    }
+
+    protected void tearDown() throws Exception
+    {
+        _putServer.stop();
+        _putServer.destroy();
+        super.tearDown();
+    }
+    
+    public void testUploadOKWithChecksums () throws Exception
+    {
+        HashSet<Binding> bindings = new HashSet<Binding>();
+        DeployRequestImpl request = new DeployRequestImpl();
+        factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        
+        _file0 = new File(_baseDir, "file0.txt");
+        _file1 = new File(_baseDir, "file1.txt");
+        _file2 = new File(_baseDir, "file2.txt");
+        _file3 = new File(_baseDir, "file3.jar");
+        _file4 = new File(_baseDir, "file4.so");
+        _file5 = new File(_baseDir, "file5.jpg");
+        Binding binding0 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), _file0);
+        Binding binding3 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), _file3);
+        Binding binding4 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), _file4);
+        Binding binding5 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), _file5);      
+
+        bindings.add(binding0);
+        bindings.add(binding3);
+        bindings.add(binding4);
+        bindings.add(binding5);
+          
+        request.setBindings(bindings);
+        
+        DeployResponse response = _deployer.deploy(request);
+
+        for (HttpClientException t:response.getExceptions())
+            t.printStackTrace();
+        
+        assertEquals(0, response.getExceptions().size());
+        File f0 = new File(_putServer.getPutDir(), "file0.txt");
+        File f0cs = new File (_putServer.getPutDir(), "file0.txt.sha1");
+        assertTrue (f0.exists());
+        assertTrue (f0cs.exists());
+        
+        File f3 = new File(_putServer.getPutDir(), "file3.jar");
+        File f3cs = new File (_putServer.getPutDir(), "file3.jar.sha1");
+        assertTrue(f3.exists());
+        assertTrue(f3cs.exists());
+        
+        File f4 = new File(_putServer.getPutDir(), "file4.so");
+        File f4cs = new File (_putServer.getPutDir(), "file4.so.sha1");
+        assertTrue (f4.exists());
+        assertTrue (f4cs.exists());
+        
+        File f5 = new File(_putServer.getPutDir(), "file5.jpg");
+        File f5cs = new File (_putServer.getPutDir(), "file5.jpg.sha1");
+        assertTrue (f5.exists());
+        assertTrue (f5cs.exists());
+    }
+    /* This test duplicates the one above unless we allow for checksum files to
+     * be pre-existing
+     
+    public void testUploadOKMissingChecksum () throws Exception
+    {
+        HashSet<Binding> bindings = new HashSet<Binding>();
+        DeployRequestImpl request = new DeployRequestImpl();
+        
+        _file0 = new File(_baseDir, "file0.txt");
+        _file1 = new File(_baseDir, "file1.txt");
+        _file2 = new File(_baseDir, "file2.txt");
+        _file3 = new File(_baseDir, "file3.jar");
+        _file4 = new File(_baseDir, "file4.so");
+        _file5 = new File(_baseDir, "file5.jpg");
+        
+        _binding0.setRemoteResource(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt");
+        _binding0.setLocalFile(_file0);
+        bindings.add(_binding0);
+        
+        //TODO Test Lenient
+        _binding1.setRemoteResource(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file1.txt"); //has no sha file
+        _binding1.setLocalFile(_file1);
+        //_binding1.setLenientChecksum(true);
+        bindings.add(_binding1);
+      
+        _binding3.setRemoteResource(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar");
+        _binding3.setLocalFile(_file3);
+        bindings.add(_binding3);
+        
+        _binding4.setRemoteResource(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so");
+        _binding4.setLocalFile(_file4);
+        bindings.add(_binding4);
+       
+        _binding5.setRemoteResource(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg");
+        _binding5.setLocalFile(_file5);
+        bindings.add(_binding5);
+          
+        request.setBindings(bindings);
+        
+        DeployResponse response = _deployer.deploy(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+        
+        assertEquals(10, _putServer.getPutDir().list().length);
+        assertEquals(0, response.getExceptions().size());
+        File f0 = new File(_putServer.getPutDir(), "file0.txt");
+        File f0cs = new File (_putServer.getPutDir(), "file0.txt.sha1");
+        assertTrue (f0.exists());
+        assertTrue (f0cs.exists());
+        
+        File f1 = new File(_putServer.getPutDir(), "file1.txt");
+        File f1cs = new File(_putServer.getPutDir(), "file1.txt.sha1");
+        assertTrue(f1.exists());
+        assertTrue(f1cs.exists());
+        
+        File f3 = new File(_putServer.getPutDir(), "file3.jar");
+        File f3cs = new File (_putServer.getPutDir(), "file3.jar.sha1");
+        assertTrue(f3.exists());
+        assertTrue(f3cs.exists());
+        
+        File f4 = new File(_putServer.getPutDir(), "file4.so");
+        File f4cs = new File (_putServer.getPutDir(), "file4.so.sha1");
+        assertTrue (f4.exists());
+        assertTrue (f4cs.exists());
+        
+        File f5 = new File(_putServer.getPutDir(), "file5.jpg");
+        File f5cs = new File (_putServer.getPutDir(), "file5.jpg.sha1");
+        assertTrue (f5.exists());
+        assertTrue (f5cs.exists());
+    }
+    */
+    
+    
+
+    public void testUploadFail () throws Exception 
+    {        
+        factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        HashSet<Binding> bindings = new HashSet<Binding>();
+        DeployRequestImpl request = new DeployRequestImpl();
+
+        _file0 = new File(_baseDir, "file0.txt");
+        _file1 = new File(_baseDir, "file1.txt");
+        _file2 = new File(_baseDir, "file2.txt");
+        _file3 = new File(_baseDir, "file3.jar");
+        _file4 = new File(_baseDir, "file4.so");
+        _file5 = new File(_baseDir, "file5.jpg");
+        File file6 = new File(_baseDir, "file6.txt");//doesn't exist
+        File file7 = new File(_baseDir, "file7.txt");//doesn't exist
+        
+        Binding binding0 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), _file0);
+        bindings.add(binding0);
+
+        Binding binding3 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), _file3);
+        bindings.add(binding3);
+
+        Binding binding4 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), _file4);
+        bindings.add(binding4);
+
+        Binding binding5 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), _file5);
+        bindings.add(binding5);
+
+        Binding binding6 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file6.txt"), file6);
+        bindings.add(binding6);
+        
+        Binding binding7 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file7.txt"), file7);
+        bindings.add(binding7);
+        
+        request.setBindings(bindings);            
+        DeployResponse response = _deployer.deploy(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+
+        //as the serverside is not running the mercury enhancements to the put filter, then
+        //all the files except for the 2 which don't exists should have been uploaded
+        assertEquals(2, response.getExceptions().size());
+        File f0 = new File(_putServer.getPutDir(), "file0.txt");
+        File f0cs = new File (_putServer.getPutDir(), "file0.txt.sha1");
+        assertTrue (f0.exists());
+        assertTrue (f0cs.exists());
+
+        File f3 = new File(_putServer.getPutDir(), "file3.jar");
+        File f3cs = new File (_putServer.getPutDir(), "file3.jar.sha1");
+        assertTrue(f3.exists());
+        assertTrue(f3cs.exists());
+
+        File f4 = new File(_putServer.getPutDir(), "file4.so");
+        File f4cs = new File (_putServer.getPutDir(), "file4.so.sha1");
+        assertTrue (f4.exists());
+        assertTrue (f4cs.exists());
+
+        File f5 = new File(_putServer.getPutDir(), "file5.jpg");
+        File f5cs = new File (_putServer.getPutDir(), "file5.jpg.sha1");
+        assertTrue (f5.exists());
+        assertTrue (f5cs.exists());
+
+        File f6 = new File(_putServer.getPutDir(), "file6.txt");
+        File f6cs = new File (_putServer.getPutDir(), "file6.txt.sha1");
+        assertFalse (f6.exists());
+        assertFalse (f6cs.exists());        
+        
+        File f7 = new File(_putServer.getPutDir(), "file7.txt");
+        File f7cs = new File (_putServer.getPutDir(), "file7.txt.sha1");
+        assertFalse (f7.exists());
+        assertFalse (f7cs.exists());
+    }
+  
+    public void testUploadFailFast () throws Exception 
+    {
+        factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        HashSet<Binding> bindings = new HashSet<Binding>();
+        DeployRequestImpl request = new DeployRequestImpl();
+
+        _file0 = new File(_baseDir, "file0.txt");
+        _file1 = new File(_baseDir, "file1.txt");
+        _file2 = new File(_baseDir, "file2.txt");
+        _file3 = new File(_baseDir, "file3.jar");
+        _file4 = new File(_baseDir, "file4.so");
+        _file5 = new File(_baseDir, "file5.jpg");
+        File file6 = new File(_baseDir, "file6.txt");//doesn't exist
+        File file7 = new File(_baseDir, "file7.txt");//doesn't exist
+
+        Binding binding0 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), _file0);
+        bindings.add(binding0);
+
+        Binding binding3 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), _file3);
+        bindings.add(binding3);
+
+        Binding binding4 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), _file4);
+        bindings.add(binding4);
+
+        Binding binding5 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), _file5);
+        bindings.add(binding5);
+
+        Binding binding6 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file6.txt"), file6);
+        bindings.add(binding6);
+        
+        Binding binding7 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file7.txt"), file7);
+        bindings.add(binding7);
+
+        request.setBindings(bindings);     
+        request.setFailFast(true);
+        DeployResponse response = _deployer.deploy(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+        
+        //with failfast==true and the server side not running the mercury enhancements, we have no way to know
+        //how many files actually did get uploaded, but the first exception should cause it to stop
+        assertEquals(1, response.getExceptions().size());
+
+        File f6 = new File(_putServer.getPutDir(), "file6.txt");
+        File f6cs = new File (_putServer.getPutDir(), "file6.txt.sha1");
+        assertFalse (f6.exists());
+        assertFalse (f6cs.exists());        
+        File f7 = new File(_putServer.getPutDir(), "file7.txt");
+        File f7cs = new File (_putServer.getPutDir(), "file7.txt.sha1");
+        assertFalse (f7.exists());
+        assertFalse (f7cs.exists());
+        
+        
+        Thread.sleep(500);
+    }
+    
+    public void testMemoryDeployment () throws Exception
+    {
+        factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        HashSet<Binding> bindings = new HashSet<Binding>();
+        DeployRequestImpl request = new DeployRequestImpl();
+
+        String s0 = "memory contents0";
+        InputStream is0 = new ByteArrayInputStream(s0.getBytes());
+        Binding binding0 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), is0);
+        bindings.add(binding0);
+
+        String s5 = "memory contents5";
+        InputStream is5 = new ByteArrayInputStream(s5.getBytes());
+        Binding binding5 = new Binding(new URL(_HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), is5);
+        bindings.add(binding5);
+
+        request.setBindings(bindings);     
+        request.setFailFast(true);
+        DeployResponse response = _deployer.deploy(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+        
+  
+        assertEquals(0, response.getExceptions().size());
+
+        
+        File f0 = new File(_putServer.getPutDir(), "file0.txt");
+        File f0cs = new File (_putServer.getPutDir(), "file0.txt.sha1");
+        assertTrue (f0.exists());
+        BufferedReader reader = new BufferedReader(new FileReader(f0));
+        String s = reader.readLine();
+        assertEquals(s0, s.trim());
+        assertTrue (f0cs.exists()); 
+        
+        File f5 = new File(_putServer.getPutDir(), "file5.jpg");
+        File f5cs = new File (_putServer.getPutDir(), "file5.jpg.sha1");
+        assertTrue (f5.exists());
+        reader = new BufferedReader(new FileReader(f5));
+        s = reader.readLine();
+        assertEquals(s5, s.trim());
+        assertTrue (f5cs.exists());  
+    }
+    
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,492 @@
+/**
+ * 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.maven.mercury.spi.http.client;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetrievalRequest;
+import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetriever;
+import org.apache.maven.mercury.spi.http.client.retrieve.RetrievalResponse;
+import org.apache.maven.mercury.spi.http.server.SimpleTestServer;
+import org.apache.maven.mercury.spi.http.validate.Validator;
+import org.apache.maven.mercury.transport.SHA1VerifierFactory;
+import org.apache.maven.mercury.transport.api.Binding;
+import org.apache.maven.mercury.transport.api.Server;
+import org.apache.maven.mercury.transport.api.StreamObserverFactory;
+import org.mortbay.util.IO;
+
+public class JettyRetrieverTest extends TestCase
+{
+    public static final String __HOST_FRAGMENT = "http://localhost:";
+    public static final String __PATH_FRAGMENT = "/maven2/repo/";
+    public String _port;
+    File file0;
+    File file1;
+    File file2;
+    File file3;
+    File file4;
+    File file5;
+    DefaultRetriever retriever;
+    SimpleTestServer server;
+    Server remoteServerType;
+    HashSet<StreamObserverFactory> factories;
+    
+
+    public class TxtValidator implements Validator 
+    {
+
+        public String getFileExtension()
+        {
+            return "txt";
+        }
+
+        public boolean validate(String stagedFile, List<String> errors)
+        {
+            if (stagedFile==null)
+                return true;
+            int i = stagedFile.lastIndexOf(".");
+            String ext = (i>=0?stagedFile.substring(i+1):"");
+            if ("txt".equalsIgnoreCase(ext))
+            {
+                //just accept any file contents
+                File f = new File(stagedFile);
+                return f.isFile();
+            }
+            
+            return false;
+        }
+        
+    }
+    
+    public class AlwaysFalseTxtValidator extends TxtValidator
+    {
+        public String getFileExtension()
+        {
+            return "txt";
+        }
+
+        public boolean validate(String stagedFile, List<String> errors)
+        {
+            errors.add("Always false");
+            return false;
+        }
+    }
+    
+    public void setUp ()
+    throws Exception
+    {
+        server = new SimpleTestServer();
+        server.start();
+        _port=String.valueOf(server.getPort()); 
+        
+        HashSet<Server> remoteServerTypes = new HashSet<Server>();
+        remoteServerType = new Server( "test", new URL(__HOST_FRAGMENT+_port));
+        factories = new HashSet<StreamObserverFactory>();
+            
+        remoteServerTypes.add(remoteServerType);
+        
+        retriever = new DefaultRetriever();
+        retriever.setServers(remoteServerTypes);
+    }
+    
+    
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+        server.stop();
+        server.destroy();
+    }
+
+
+
+    public File mkTempDir()
+    throws Exception
+    {
+        File dir = File.createTempFile("mercury", "tmp");
+        dir.delete();
+        dir.mkdir();
+        dir.deleteOnExit();
+        assert dir.exists();
+        assert dir.isDirectory();
+        assert dir.canWrite();
+        return dir;
+    }
+    
+    public void testSyncRetrievalAllGood()
+    throws Exception
+    {
+        factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        
+        //make local dir to put stuff in
+        final File dir = mkTempDir();
+        DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+        HashSet<Binding> bindings = new HashSet<Binding>();
+
+        file0 = new File(dir, "file0.txt");
+        file1 = new File(dir, "file1.txt");
+        file2 = new File(dir, "file2.txt");
+        file3 = new File(dir, "file3.jar");
+        file4 = new File(dir, "file4.so");
+        file5 = new File(dir, "file5.jpg");
+        Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), file0);
+        bindings.add(binding0);
+        
+        Binding binding1 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file1.txt"),file1); //has no sha file
+        bindings.add(binding1);
+       
+        Binding binding2 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file2.txt"), file2); //has wrong sha file
+        bindings.add(binding2);
+      
+        Binding binding3 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), file3);
+        bindings.add(binding3);
+        
+        Binding binding4 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), file4);
+        bindings.add(binding4);
+       
+        Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), file5);
+        bindings.add(binding5);
+          
+        request.setBindings(bindings);
+        
+        RetrievalResponse response = retriever.retrieve(request);
+        
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+        
+        assertEquals(2,response.getExceptions().size());
+        assertTrue(!file0.exists());
+        assertTrue(!file1.exists());
+        assertTrue(!file2.exists());
+        assertTrue(!file3.exists());
+        assertTrue(!file4.exists());
+        assertTrue(!file5.exists());
+
+    }
+
+
+    public void testSyncRetrievalFailFast()
+        throws Exception
+    {
+        factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        
+        //make local dir to put stuff in
+        final File dir = mkTempDir();
+        DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+        HashSet<Binding> bindings = new HashSet<Binding>();
+
+        file0 = new File(dir, "file0.txt");
+        file1 = new File(dir, "file1.txt");
+        file2 = new File(dir, "file2.txt");
+        file3 = new File(dir, "file3.jar");
+        file4 = new File(dir, "file4.so");
+        file5 = new File(dir, "file5.jpg");
+        
+        Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), file0);
+        bindings.add(binding0);
+
+        Binding binding1 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file1.txt"), file1); //has no sha file
+        bindings.add(binding1);
+
+        Binding binding2 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file2.txt"), file2); //has wrong sha file
+        bindings.add(binding2);
+
+        Binding binding3 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), file3);
+        bindings.add(binding3);
+
+        Binding binding4 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), file4);
+        bindings.add(binding4);
+
+        Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), file5);
+        bindings.add(binding5);
+
+
+        request = new DefaultRetrievalRequest();
+        request.setBindings(bindings);
+        request.setFailFast(true);
+
+        request.setBindings(bindings);
+        
+        RetrievalResponse response = retriever.retrieve(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //   t.printStackTrace();
+
+        assertTrue(!file0.exists());
+        assertTrue(!file1.exists());
+        assertTrue(!file2.exists());
+        assertTrue(!file3.exists());
+        assertTrue(!file4.exists());
+        assertTrue(!file5.exists());
+        
+        Thread.sleep(100);
+    }
+
+    public void testSyncRetrievalLenient0()
+        throws Exception
+    {
+        factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        
+        //make local dir to put stuff in
+        final File dir = mkTempDir();
+        DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+        HashSet<Binding> bindings = new HashSet<Binding>();
+
+        file0 = new File(dir, "file0.txt");
+        file1 = new File(dir, "file1.txt");
+        file2 = new File(dir, "file2.txt");
+        file3 = new File(dir, "file3.jar");
+        file4 = new File(dir, "file4.so");
+        file5 = new File(dir, "file5.jpg");
+        Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), file0);
+        bindings.add(binding0);
+
+        Binding binding1 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file1.txt"), file1); //has no sha file
+        bindings.add(binding1);
+
+        Binding binding2 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file2.txt"), file2); //has wrong sha file
+        bindings.add(binding2);
+
+        Binding binding3 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"),file3 );
+        bindings.add(binding3);
+
+        Binding binding4 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), file4);
+        bindings.add(binding4);
+
+        Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), file5);
+        bindings.add(binding5);
+
+        request.setBindings(bindings);
+        request.setFailFast(false);
+        RetrievalResponse response = retriever.retrieve(request);
+
+        assertEquals(1,response.getExceptions().size());
+        assertEquals(binding2,response.getExceptions().iterator().next().getBinding());
+        assertTrue(!file0.exists());
+        assertTrue(!file1.exists());
+        assertTrue(!file2.exists());
+        assertTrue(!file3.exists());
+        assertTrue(!file4.exists());
+        assertTrue(!file5.exists());
+    }
+
+    public void testSyncRetrievalLenient1()
+    throws Exception
+    {
+        factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        //make local dir to put stuff in
+        final File dir = mkTempDir();
+        DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+        HashSet<Binding> bindings = new HashSet<Binding>();
+
+        file0 = new File(dir, "file0.txt");
+        file1 = new File(dir, "file1.txt");
+        file2 = new File(dir, "file2.txt");
+        file3 = new File(dir, "file3.jar");
+        file4 = new File(dir, "file4.so");
+        file5 = new File(dir, "file5.jpg");
+        Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), file0);
+        bindings.add(binding0);
+
+        Binding binding1 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file1.txt"), file1); //has no sha file
+        bindings.add(binding1);
+
+        Binding binding3 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), file3);
+        bindings.add(binding3);
+
+        Binding binding4 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), file4);
+        bindings.add(binding4);
+
+        Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), file5);
+        bindings.add(binding5);
+
+        request.setBindings(bindings);
+        request.setFailFast(false);
+        RetrievalResponse response = retriever.retrieve(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+
+        assertEquals(0,response.getExceptions().size());
+        assertTrue(file0.exists());
+        assertTrue(file1.exists());
+        assertTrue(!file2.exists());
+        assertTrue(file3.exists());
+        assertTrue(file4.exists());
+        assertTrue(file5.exists());
+
+    }
+    
+    public void testValidatorSuccess() throws Exception
+    {
+        factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+
+        //make local dir to put stuff in
+        final File dir = mkTempDir();
+        DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+        HashSet<Binding> bindings = new HashSet<Binding>();
+        HashSet<Validator> validators = new HashSet<Validator>();
+        validators.add(new TxtValidator());
+        request.setValidators(validators);
+
+        file0 = new File(dir, "file0.txt");
+        file1 = new File(dir, "file1.txt");
+        file2 = new File(dir, "file2.txt");
+        file3 = new File(dir, "file3.jar");
+        file4 = new File(dir, "file4.so");
+        file5 = new File(dir, "file5.jpg");
+        
+        Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), file0);
+        bindings.add(binding0);
+
+        Binding binding1 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file1.txt"), file1); //has no sha file
+        bindings.add(binding1);
+
+        Binding binding3 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), file3);
+        bindings.add(binding3);
+
+        Binding binding4 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), file4);
+        bindings.add(binding4);
+
+        Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), file5);
+        bindings.add(binding5);
+
+        request.setFailFast(false);
+
+        request.setBindings(bindings);
+        RetrievalResponse response = retriever.retrieve(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+
+        assertEquals(0,response.getExceptions().size());
+        assertTrue(file0.exists());
+        assertTrue(file1.exists());
+        assertTrue(!file2.exists());
+        assertTrue(file3.exists());
+        assertTrue(file4.exists());
+        assertTrue(file5.exists());
+    }
+    
+    public void testValidatorFailure () throws Exception
+    {
+        factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+        
+        //make local dir to put stuff in
+        final File dir = mkTempDir();
+        DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+        HashSet<Binding> bindings = new HashSet<Binding>();
+        HashSet<Validator> validators = new HashSet<Validator>();
+        validators.add(new AlwaysFalseTxtValidator());
+        request.setValidators(validators);
+
+        file0 = new File(dir, "file0.txt");
+        file1 = new File(dir, "file1.txt");
+        file2 = new File(dir, "file2.txt");
+        file3 = new File(dir, "file3.jar");
+        file4 = new File(dir, "file4.so");
+        file5 = new File(dir, "file5.jpg");
+        
+        Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), file0);
+        bindings.add(binding0);
+
+        Binding binding1 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file1.txt"), file1); //has no sha file
+        bindings.add(binding1);
+
+        Binding binding3 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), file3);
+        bindings.add(binding3);
+
+        Binding binding4 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), file4);
+        bindings.add(binding4);
+
+        Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), file5);
+        bindings.add(binding5);
+
+        request.setFailFast(false);
+
+        request.setBindings(bindings);
+        RetrievalResponse response = retriever.retrieve(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+
+        assertEquals(2,response.getExceptions().size());
+        assertTrue(!file0.exists());
+        assertTrue(!file1.exists());
+        assertTrue(!file2.exists());
+        assertTrue(!file3.exists());
+        assertTrue(!file4.exists());
+        assertTrue(!file5.exists());
+    }
+    
+
+    public void testMemoryRetrieval () throws Exception
+    {
+        factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient
+        remoteServerType.setStreamObserverFactories(factories);
+
+        //make local dir to put stuff in
+        final File dir = mkTempDir();
+        DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+        HashSet<Binding> bindings = new HashSet<Binding>();
+        HashSet<Validator> validators = new HashSet<Validator>();
+        validators.add(new TxtValidator());
+        request.setValidators(validators);
+        
+        Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"));
+        bindings.add(binding0);
+
+        Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"));
+        bindings.add(binding5);
+
+        request.setFailFast(false);
+
+        request.setBindings(bindings);
+        RetrievalResponse response = retriever.retrieve(request);
+
+        //for (MercuryException t:response.getExceptions())
+        //    t.printStackTrace();
+
+        assertEquals(0,response.getExceptions().size());
+        
+        
+        InputStream is = this.getClass().getResourceAsStream("/testRepo/file0.txt");
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        IO.copy(is, os);
+        assertEquals(os.toByteArray().length, binding0.getInboundContent().length);
+
+        is = this.getClass().getResourceAsStream("/testRepo/file5.jpg");
+        os.reset();
+        IO.copy(is,os);
+        assertEquals(os.toByteArray().length, binding5.getInboundContent().length);
+    }
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/SecureJettyDeployerTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/SecureJettyDeployerTest.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/SecureJettyDeployerTest.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/SecureJettyDeployerTest.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,45 @@
+/**
+ * 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.maven.mercury.spi.http.client;
+
+import org.apache.maven.mercury.spi.http.client.deploy.DefaultDeployer;
+import org.apache.maven.mercury.spi.http.server.SecurePutServer;
+
+public class SecureJettyDeployerTest extends JettyDeployerTest
+{
+    public SecureJettyDeployerTest() throws Exception
+    {
+        super();
+    }
+    
+    protected void setUp() throws Exception
+    {        
+        _HOST_FRAGMENT = "https://localhost:";
+        
+        _deployer = new DefaultDeployer();
+        _putServer = new SecurePutServer();
+        _putServer.start();
+        _port = String.valueOf(_putServer.getPort());
+        setUpVerifiers();
+        //super.setUp();
+    }
+
+   
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilterTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilterTest.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilterTest.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/BatchFilterTest.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,213 @@
+/**
+ * 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.maven.mercury.spi.http.server;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.mercury.spi.http.server.StagingBatchFilter;
+import org.mortbay.jetty.servlet.FilterHolder;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.jetty.testing.HttpTester;
+import org.mortbay.jetty.testing.ServletTester;
+import org.mortbay.util.IO;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+
+public class BatchFilterTest extends TestCase
+{
+    File _baseDir;
+    File _stagingDir;
+    
+    ServletTester tester;
+    
+
+    public void setUp () throws Exception
+    {
+        _baseDir = File.createTempFile("testBatchFilter",null);
+        _baseDir.delete();
+        _baseDir.mkdir();
+        _baseDir.deleteOnExit();
+        assertTrue(_baseDir.isDirectory());
+        
+        _stagingDir = new File(System.getProperty("java.io.tmpdir"));
+
+        super.setUp();
+        tester=new ServletTester();
+        tester.setContextPath("/context");
+        tester.setResourceBase(_baseDir.getCanonicalPath());
+        tester.addServlet( DefaultServlet.class, "/");
+        FilterHolder holder = tester.addFilter( StagingBatchFilter.class,"/*",0);
+        holder.setInitParameter("stagingDirURI", _stagingDir.toURI().toString());
+        tester.start();
+        System.err.println("Set up tester, basedir="+tester.getResourceBase()+" exists?"+_baseDir.exists());
+        System.err.println("Set up tester, stagingdir="+_stagingDir.toURI().toString());
+    }
+    
+    protected void tearDown() throws Exception
+    {
+        super.tearDown();
+    }
+    
+
+    public void testHandlePutWithoutBatching() throws Exception
+    {
+        // generated and parsed test
+        HttpTester request = new HttpTester();
+        HttpTester response = new HttpTester();
+        
+        request.setMethod("PUT");
+        request.setVersion("HTTP/1.1");
+        request.setHeader("Host","tester");
+        request.setURI("/context/file.txt");
+        request.setHeader("Content-Type","text/plain");
+        String data0="Now is the time for all good men to come to the aid of the party";
+        request.setContent(data0);
+        response.parse(tester.getResponses(request.generate()));
+        assertTrue(response.getMethod()==null);
+        assertEquals(HttpServletResponse.SC_CREATED,response.getStatus());
+        
+        File file=new File(_baseDir,"file.txt");
+        assertTrue(file.exists());
+        assertEquals(data0,IO.toString(new FileInputStream(file)));
+    }
+    
+    public void testBatchingCommit() throws Exception
+    {
+        // generated and parsed test
+        HttpTester request = new HttpTester();
+        HttpTester response = new HttpTester();
+        
+        request.setMethod("PUT");
+        request.setVersion("HTTP/1.1");
+        request.setHeader("Host","tester");
+        request.setURI("/context/file1.txt");
+        request.setHeader("Content-Type","text/plain");
+        request.setHeader("Jetty-Batch-Id", "999999");
+        String data1="How Now BROWN COW!!!!";
+        request.setContent(data1);
+        response.parse(tester.getResponses(request.generate()));
+        assertTrue(response.getMethod()==null);
+        assertEquals(HttpServletResponse.SC_CREATED,response.getStatus());
+        
+        File batchDir = new File (_stagingDir, "999999");
+        File stagedFile = new File (batchDir, "file1.txt");
+        System.err.println("Checking existence of "+stagedFile.getCanonicalPath());
+        assertTrue(stagedFile.exists());
+        assertEquals(data1,IO.toString(new FileInputStream(stagedFile)));
+
+        request.setMethod("PUT");
+        request.setURI("/context/file2.txt");
+        request.setHeader("Content-Type","text/plain");
+        String data2="Blah blah blah Blah blah";
+        request.setHeader("Jetty-Batch-Id", "999999");
+        request.setContent(data2);
+        response.parse(tester.getResponses(request.generate()));
+        assertEquals(HttpServletResponse.SC_CREATED,response.getStatus());
+        
+        batchDir = new File (_stagingDir, "999999");
+        stagedFile = new File (batchDir, "file2.txt");
+        assertTrue(stagedFile.exists());
+        assertEquals(data2,IO.toString(new FileInputStream(stagedFile)));
+
+        // test POST commit
+        request = new HttpTester();
+        request.setMethod("POST");
+        request.setVersion("HTTP/1.1");
+        request.setHeader("Content-Type","text/plain");
+        request.setHeader("Host","tester");
+        request.setHeader("Jetty-Batch-Commit", "999999");
+        request.setURI("/context/");
+        response.parse(tester.getResponses(request.generate()));
+        assertTrue(response.getMethod()==null);
+        assertEquals(HttpServletResponse.SC_OK,response.getStatus());
+
+        File finalFile1 = new File(_baseDir, "file1.txt");
+        assertTrue(finalFile1.exists());
+        File finalFile2 = new File(_baseDir, "file2.txt");
+        assertTrue(finalFile2.exists());
+    }
+    
+    
+    public void testBatchingDiscard () 
+    throws Exception 
+    {
+        // generated and parsed test
+        HttpTester request = new HttpTester();
+        HttpTester response = new HttpTester();
+   
+        request.setMethod("PUT");
+        request.setVersion("HTTP/1.1");
+        request.setHeader("Host","tester");
+        request.setURI("/context/org/foo/file1.txt");
+        request.setHeader("Content-Type","text/plain");
+        request.setHeader("Jetty-Batch-Id", "999999");
+        String data1="How Now BROWN COW!!!!";
+        request.setContent(data1);
+        response.parse(tester.getResponses(request.generate()));
+        assertTrue(response.getMethod()==null);
+        assertEquals(HttpServletResponse.SC_CREATED,response.getStatus());
+        
+        File batchDir = new File (_stagingDir, "999999");
+        File stagedFile = new File(batchDir, "org");
+        stagedFile = new File(stagedFile, "foo");
+        stagedFile = new File (stagedFile, "file1.txt");
+        System.err.println("Checking existence of "+stagedFile.getCanonicalPath());
+        assertTrue(stagedFile.exists());
+        assertEquals(data1,IO.toString(new FileInputStream(stagedFile)));
+
+        request.setMethod("PUT");
+        request.setVersion("HTTP/1.1");
+        request.setHeader("Host","tester");
+        request.setURI("/context/file2.txt");
+        request.setHeader("Content-Type","text/plain");
+        String data2="Blah blah blah Blah blah";
+        request.setHeader("Jetty-Batch-Id", "999999");
+        request.setContent(data2);
+        response.parse(tester.getResponses(request.generate()));
+        assertEquals(HttpServletResponse.SC_CREATED,response.getStatus());
+        
+        batchDir = new File (_stagingDir, "999999");
+        stagedFile = new File (batchDir, "file2.txt");
+        assertTrue(stagedFile.exists());
+        assertEquals(data2,IO.toString(new FileInputStream(stagedFile)));
+
+        // test POST discard
+        request = new HttpTester();
+        request.setMethod("POST");
+        request.setVersion("HTTP/1.1");
+        request.setHeader("Content-Type","text/plain");
+        request.setHeader("Host","tester");
+        request.setHeader("Jetty-Batch-Discard", "999999");
+        request.setURI("/context/");
+        response.parse(tester.getResponses(request.generate()));
+        assertTrue(response.getMethod()==null);
+        assertEquals(HttpServletResponse.SC_OK,response.getStatus());
+
+        File finalFile1 = new File(_baseDir, "org");
+        finalFile1 = new File(finalFile1, "foo");
+        finalFile1 = new File(finalFile1, "file1.txt");
+        assertFalse(finalFile1.exists());
+        File finalFile2 = new File(_baseDir, "file2.txt");
+        assertFalse(finalFile2.exists());
+    }
+    
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/HttpTestServer.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,61 @@
+/**
+ * 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.maven.mercury.spi.http.server;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.io.OutputStream;
+import java.net.URL;
+
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.handler.DefaultHandler;
+import org.mortbay.jetty.handler.HandlerCollection;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.util.IO;
+
+public class HttpTestServer
+    extends Server
+{
+    public HttpTestServer( File base, String remotePathFragment )
+        throws Exception
+    {
+        super( 0 );
+
+        System.out.println( base );
+        
+        if ( !base.exists() )
+        {
+            throw new IllegalArgumentException( "Specified base directory does not exist: " + base.getCanonicalPath() );
+        }
+        
+        HandlerCollection handlers = new HandlerCollection();
+        setHandler( handlers );
+
+        Context context = new Context( handlers, remotePathFragment );
+        handlers.addHandler( new DefaultHandler() );
+
+        context.addServlet( DefaultServlet.class, "/" );               
+        context.setResourceBase( base.getCanonicalPath() );
+    }
+
+    public int getPort()
+    {
+        return getConnectors()[0].getLocalPort();
+    }
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SecurePutServer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SecurePutServer.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SecurePutServer.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SecurePutServer.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,94 @@
+/**
+ * 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.maven.mercury.spi.http.server;
+
+import java.io.File;
+
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.Connector;
+import org.mortbay.jetty.handler.DefaultHandler;
+import org.mortbay.jetty.handler.HandlerCollection;
+import org.mortbay.jetty.security.SslSocketConnector;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.jetty.servlet.FilterHolder;
+import org.mortbay.servlet.PutFilter;
+
+public class SecurePutServer extends SimplePutServer
+{
+    private File _base;
+    
+    public SecurePutServer() throws Exception
+    {       
+        SslSocketConnector connector = new SslSocketConnector();
+        String keystore = System.getProperty("user.dir") + File.separator + "src" + File.separator + "test" + File.separator + "resources" + File.separator
+        + "secureServer" + File.separator + "keystore";
+
+        connector.setPort(0);
+        connector.setKeystore(keystore);
+        connector.setPassword("storepwd");
+        connector.setKeyPassword("keypwd");
+
+        setConnectors(new Connector[] { connector });        
+        
+        HandlerCollection handlers = new HandlerCollection();
+        setHandler(handlers);
+        
+        Context context = new Context(handlers,"/maven2/repo");
+        handlers.addHandler(new DefaultHandler());
+
+        _base = File.createTempFile("securePutServer",null);
+        _base.delete();
+        _base.mkdir();
+        _base.deleteOnExit();
+        FilterHolder holder = context.addFilter(PutFilter.class, "/*", 0);
+        holder.setInitParameter("delAllowed","true");
+        context.addServlet(DefaultServlet.class,"/");
+        context.setResourceBase(_base.getCanonicalPath());
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.maven.mercury.spi.http.server.PutServer#getPutDir()
+     */
+    public File getPutDir ()
+    {
+        return _base;
+    }
+    
+    public void destroy ()
+    {
+        super.destroy();
+        File[] files = _base.listFiles();
+        for (int i=0;files!=null && i>0; i++)
+        {
+            files[i].delete();
+        }
+        _base.delete();
+    }
+    
+    public static void main(String[] args)
+    throws Exception
+    {
+        SecurePutServer server = new SecurePutServer();
+        server.start();
+        server.join();
+    }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SimplePutServer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SimplePutServer.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SimplePutServer.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SimplePutServer.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,92 @@
+/**
+ * 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.maven.mercury.spi.http.server;
+
+import java.io.File;
+
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.handler.DefaultHandler;
+import org.mortbay.jetty.handler.HandlerCollection;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.jetty.servlet.FilterHolder;
+import org.mortbay.servlet.PutFilter;
+
+public class SimplePutServer extends Server
+{
+    private File _base;
+    
+    public SimplePutServer()
+    throws Exception
+    {
+        super(0);
+
+        HandlerCollection handlers = new HandlerCollection();
+        setHandler(handlers);
+
+        Context context = new Context(handlers,"/maven2/repo");
+        handlers.addHandler(new DefaultHandler());
+
+        _base = File.createTempFile("simplePutServer",null);
+        _base.delete();
+        _base.mkdir();
+        _base.deleteOnExit();
+        FilterHolder holder = context.addFilter(PutFilter.class, "/*", 0);
+        holder.setInitParameter("delAllowed","true");
+        context.addServlet(DefaultServlet.class,"/");
+        context.setResourceBase(_base.getCanonicalPath());
+    }
+    
+    public void destroy ()
+    {
+        super.destroy();
+        File[] files = _base.listFiles();
+        for (int i=0;files!=null && i>0; i++)
+        {
+            files[i].delete();
+        }
+        _base.delete();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.apache.maven.mercury.spi.http.server.PutServer#getPutDir()
+     */
+    public File getPutDir ()
+    {
+        return _base;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.maven.mercury.spi.http.server.PutServer#getPort()
+     */
+    public int getPort()
+    {
+        return getConnectors()[0].getLocalPort();
+    }
+
+    public static void main(String[] args)
+    throws Exception
+    {
+        SimplePutServer server = new SimplePutServer();
+        server.start();
+        server.join();
+    }
+
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SimpleTestServer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SimpleTestServer.java?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SimpleTestServer.java (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/server/SimpleTestServer.java Fri Aug  1 15:55:40 2008
@@ -0,0 +1,86 @@
+/**
+ * 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.maven.mercury.spi.http.server;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.io.OutputStream;
+import java.net.URL;
+
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.handler.DefaultHandler;
+import org.mortbay.jetty.handler.HandlerCollection;
+import org.mortbay.jetty.servlet.Context;
+import org.mortbay.jetty.servlet.DefaultServlet;
+import org.mortbay.util.IO;
+
+public class SimpleTestServer
+    extends Server
+{
+    public SimpleTestServer()
+        throws Exception
+    {
+        this( "/testRepo/", "/maven2/repo" );
+    }
+
+    public SimpleTestServer( String localPathFragment, String remotePathFragment )
+        throws Exception
+    {
+        super( 0 );
+
+        HandlerCollection handlers = new HandlerCollection();
+        setHandler( handlers );
+
+        Context context = new Context( handlers, remotePathFragment );
+        handlers.addHandler( new DefaultHandler() );
+
+        File base = File.createTempFile( "simpleTestServer", null );
+        base.delete();
+        base.mkdir();
+        base.deleteOnExit();
+
+        URL list = SimpleTestServer.class.getResource( localPathFragment );
+        LineNumberReader in = new LineNumberReader( new InputStreamReader( list.openStream() ) );
+        String file = null;
+        while ( ( file = in.readLine() ) != null )
+        {
+            if ( !file.startsWith( "file" ) )
+            {
+                continue;
+            }
+            OutputStream out = new FileOutputStream( new File( base, file ) );
+            IO.copy( SimpleTestServer.class.getResource( localPathFragment + file ).openStream(), out );
+            out.close();
+        }
+        context.addServlet( DefaultServlet.class, "/" );
+        context.setResourceBase( base.getCanonicalPath() );
+    }
+
+    public int getPort()
+    {
+        return getConnectors()[0].getLocalPort();
+    }
+
+    public static void main( String[] args )
+        throws Exception
+    {
+        SimpleTestServer server = new SimpleTestServer();
+        server.start();
+        server.join();
+    }
+}

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/a-1.0.txt
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/a-1.0.txt?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/a-1.0.txt (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/a-1.0.txt Fri Aug  1 15:55:40 2008
@@ -0,0 +1,3 @@
+b:1.0
+c:1.0
+d:1.0

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/a-1.0.txt.sha1
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/a-1.0.txt.sha1?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/a-1.0.txt.sha1 (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/a-1.0.txt.sha1 Fri Aug  1 15:55:40 2008
@@ -0,0 +1 @@
+3bd410a48b894266feb4bc4d90a1b609093a66eb

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/b-1.0.txt
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/b-1.0.txt?rev=681887&view=auto
==============================================================================
    (empty)

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/b-1.0.txt.sha1
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/b-1.0.txt.sha1?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/b-1.0.txt.sha1 (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/b-1.0.txt.sha1 Fri Aug  1 15:55:40 2008
@@ -0,0 +1 @@
+da39a3ee5e6b4b0d3255bfef95601890afd80709

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/c-1.0.txt
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/c-1.0.txt?rev=681887&view=auto
==============================================================================
    (empty)

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/c-1.0.txt.sha1
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/c-1.0.txt.sha1?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/c-1.0.txt.sha1 (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/c-1.0.txt.sha1 Fri Aug  1 15:55:40 2008
@@ -0,0 +1 @@
+da39a3ee5e6b4b0d3255bfef95601890afd80709

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/d-1.0.txt
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/d-1.0.txt?rev=681887&view=auto
==============================================================================
    (empty)

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/d-1.0.txt.sha1
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/d-1.0.txt.sha1?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/d-1.0.txt.sha1 (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/repo/d-1.0.txt.sha1 Fri Aug  1 15:55:40 2008
@@ -0,0 +1 @@
+da39a3ee5e6b4b0d3255bfef95601890afd80709

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/secureServer/keystore
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/secureServer/keystore?rev=681887&view=auto
==============================================================================
Binary file - no diff available.

Propchange: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/secureServer/keystore
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/secureServer/realm.properties
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/secureServer/realm.properties?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/secureServer/realm.properties (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/secureServer/realm.properties Fri Aug  1 15:55:40 2008
@@ -0,0 +1,22 @@
+#
+# This file defines users passwords and roles for a HashUserRealm
+#
+# The format is
+#  <username>: <password>[,<rolename> ...]
+#
+# Passwords may be clear text, obfuscated or checksummed.  The class 
+# org.mortbay.util.Password should be used to generate obfuscated
+# passwords or password checksums
+#
+# If DIGEST Authentication is used, the password must be in a recoverable
+# format, either plain text or OBF:.
+#
+# if using digest authentication, do not MD5-hash the password
+jetty: jetty,user
+admin: CRYPT:ad1ks..kc.1Ug,server-administrator,content-administrator,admin
+other: OBF:1xmk1w261u9r1w1c1xmq
+plain: plain
+user: password
+
+# This entry is for digest auth.  The credential is a MD5 hash of username:realmname:password
+digest: MD5:6e120743ad67abfbc385bc2bb754e297

Added: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/testRepo/README.TXT
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/testRepo/README.TXT?rev=681887&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/testRepo/README.TXT (added)
+++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/resources/testRepo/README.TXT Fri Aug  1 15:55:40 2008
@@ -0,0 +1,3 @@
+These are the test files for the batch tests
+file1 lacks an SHA1 file
+file2 has a wrong SHA1