]> source.dussan.org Git - archiva.git/commitdiff
[MRM-577] Metadata aren't generated by archiva.
authorJoakim Erdfelt <joakime@apache.org>
Wed, 31 Oct 2007 20:20:02 +0000 (20:20 +0000)
committerJoakim Erdfelt <joakime@apache.org>
Wed, 31 Oct 2007 20:20:02 +0000 (20:20 +0000)
Adding unit tests to replicate conditions around maven-metadata.xml requests presented in Jira ticket.
Not able to reproduce bug (yet).

git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@590808 13f79535-47bb-0310-9956-ffa450edef68

archiva-web/archiva-webapp/pom.xml
archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/AbstractRepositoryServletProxiedMetadataTestCase.java [new file with mode: 0644]
archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/AbstractRepositoryServletProxiedTestCase.java
archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletNoProxyMetadataTest.java [new file with mode: 0644]
archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletProxiedMetadataLocalOnlyTest.java [new file with mode: 0644]
archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletProxiedMetadataRemoteOnlyTest.java [new file with mode: 0644]

index 159a4129455140e891902522326812abee803ef6..db05ca8fa141bb6fabbef42b8f71fec7382fe961 100644 (file)
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-xwork-integration</artifactId>
     </dependency>
-    <!--
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-    </dependency>
-     -->
     <dependency>
       <groupId>org.apache.derby</groupId>
       <artifactId>derby</artifactId>
       <version>1.6.2</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>xmlunit</groupId>
+      <artifactId>xmlunit</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.codehaus.plexus.redback</groupId>
       <artifactId>redback-keys-memory</artifactId>
diff --git a/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/AbstractRepositoryServletProxiedMetadataTestCase.java b/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/AbstractRepositoryServletProxiedMetadataTestCase.java
new file mode 100644 (file)
index 0000000..1ad6e20
--- /dev/null
@@ -0,0 +1,226 @@
+package org.apache.maven.archiva.web.repository;
+
+/*
+ * 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.
+ */
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.HttpUnitOptions;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.custommonkey.xmlunit.DetailedDiff;
+import org.custommonkey.xmlunit.Diff;
+
+/**
+ * Abstract TestCase for RepositoryServlet Tests, Proxied, Get of Metadata. 
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractRepositoryServletProxiedMetadataTestCase
+    extends AbstractRepositoryServletProxiedTestCase
+{
+    protected RemoteRepoInfo remotePrivateSnapshots;
+
+    protected void assertExpectedMetadata( String expectedMetadata, String actualMetadata )
+        throws Exception
+    {
+        DetailedDiff detailedDiff = new DetailedDiff( new Diff( expectedMetadata, actualMetadata ) );
+        if ( !detailedDiff.similar() )
+        {
+            // If it isn't similar, dump the difference.
+            assertEquals( expectedMetadata, actualMetadata );
+        }
+        // XMLAssert.assertXMLEqual( "Expected Metadata:", expectedMetadata, actualMetadata );
+    }
+
+    protected String requestMetadataOK( String path )
+        throws Exception
+    {
+        // process the response code later, not via an exception.
+        HttpUnitOptions.setExceptionsThrownOnErrorStatus( false );
+
+        WebRequest request = new GetMethodWebRequest( "http://machine.com/repository/internal/" + path );
+        WebResponse response = sc.getResponse( request );
+        assertResponseOK( response );
+        return response.getText();
+    }
+
+    protected String createVersionMetadata( String groupId, String artifactId, String version )
+    {
+        return createVersionMetadata( groupId, artifactId, version, null, null, null );
+    }
+
+    protected String createVersionMetadata( String groupId, String artifactId, String version, String timestamp,
+                                          String buildNumber, String lastUpdated )
+    {
+        StringBuffer buf = new StringBuffer();
+
+        buf.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n" );
+        buf.append( "<metadata>\n" );
+        buf.append( "  <groupId>" ).append( groupId ).append( "</groupId>\n" );
+        buf.append( "  <artifactId>" ).append( artifactId ).append( "</artifactId>\n" );
+        buf.append( "  <version>" ).append( version ).append( "</version>\n" );
+
+        boolean hasSnapshot = StringUtils.isNotBlank( timestamp ) || StringUtils.isNotBlank( buildNumber );
+        boolean hasLastUpdated = StringUtils.isNotBlank( lastUpdated );
+
+        if ( hasSnapshot || hasLastUpdated )
+        {
+            buf.append( "  <versioning>\n" );
+            if ( hasSnapshot )
+            {
+                buf.append( "    <snapshot>\n" );
+                buf.append( "      <buildNumber>" ).append( buildNumber ).append( "</buildNumber>\n" );
+                buf.append( "      <timestamp>" ).append( timestamp ).append( "</timestamp>\n" );
+                buf.append( "    </snapshot>\n" );
+            }
+            if ( hasLastUpdated )
+            {
+                buf.append( "    <lastUpdated>" ).append( lastUpdated ).append( "</lastUpdated>\n" );
+            }
+            buf.append( "  </versioning>\n" );
+        }
+        buf.append( "</metadata>" );
+
+        return buf.toString();
+    }
+
+    protected String createProjectMetadata( String groupId, String artifactId, String latest, String release,
+                                          String[] versions )
+    {
+        StringBuffer buf = new StringBuffer();
+
+        buf.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n" );
+        buf.append( "<metadata>\n" );
+        buf.append( "  <groupId>" ).append( groupId ).append( "</groupId>\n" );
+        buf.append( "  <artifactId>" ).append( artifactId ).append( "</artifactId>\n" );
+
+        boolean hasLatest = StringUtils.isNotBlank( latest );
+        boolean hasRelease = StringUtils.isNotBlank( release );
+        boolean hasVersions = !ArrayUtils.isEmpty( versions );
+
+        if ( hasLatest || hasRelease || hasVersions )
+        {
+            buf.append( "  <versioning>\n" );
+            if ( hasLatest )
+            {
+                buf.append( "    <latest>" ).append( latest ).append( "</latest>\n" );
+            }
+            if ( hasRelease )
+            {
+                buf.append( "    <release>" ).append( release ).append( "</release>\n" );
+            }
+            if ( hasVersions )
+            {
+                buf.append( "    <versions>\n" );
+                for ( String availVersion : versions )
+                {
+                    buf.append( "      <version>" ).append( availVersion ).append( "</version>\n" );
+                }
+                buf.append( "    </versions>\n" );
+            }
+            buf.append( "  </versioning>\n" );
+        }
+        buf.append( "</metadata>" );
+
+        return buf.toString();
+    }
+
+    protected void setupPrivateSnapshotsRemoteRepo()
+        throws Exception
+    {
+        remotePrivateSnapshots = createServer( "private-snapshots" );
+
+        assertServerSetupCorrectly( remotePrivateSnapshots );
+        archivaConfiguration.getConfiguration().addRemoteRepository( remotePrivateSnapshots.config );
+        setupCleanRepo( remotePrivateSnapshots.root );
+    }
+
+//    private void assertGetProxiedSnapshotMetadata( int expectation, boolean hasManagedCopy,
+//                                                   long deltaManagedToRemoteTimestamp )
+//        throws Exception
+//    {
+//        // --- Setup
+//        setupSnapshotsRemoteRepo();
+//        setupCleanInternalRepo();
+//
+//        String resourcePath = "org/apache/archiva/archivatest-maven-plugin/4.0-alpha-1-SNAPSHOT/maven-metadata.xml";
+//        String expectedRemoteContents = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<metadata>\n"
+//            + "  <groupId>org.apache.maven.plugins</groupId>\n" + "  <artifactId>maven-assembly-plugin</artifactId>\n"
+//            + "  <version>2.2-beta-2-SNAPSHOT</version>\n" + "  <versioning>\n" + "    <snapshot>\n"
+//            + "      <timestamp>20071017.162810</timestamp>\n" + "      <buildNumber>20</buildNumber>\n"
+//            + "    </snapshot>\n" + "    <lastUpdated>20071017162814</lastUpdated>\n" + "  </versioning>\n"
+//            + "</metadata>";
+//        String expectedManagedContents = null;
+//        File remoteFile = populateRepo( remoteSnapshots, resourcePath, expectedRemoteContents );
+//
+//        if ( hasManagedCopy )
+//        {
+//            expectedManagedContents = "<metadata>\n" + "  <groupId>org.apache.maven.plugins</groupId>\n"
+//                + "  <artifactId>maven-assembly-plugin</artifactId>\n" + "  <version>2.2-beta-2-SNAPSHOT</version>\n"
+//                + "</metadata>";
+//
+//            File managedFile = populateRepo( repoRootInternal, resourcePath, expectedManagedContents );
+//            managedFile.setLastModified( remoteFile.lastModified() + deltaManagedToRemoteTimestamp );
+//        }
+//
+//        setupConnector( REPOID_INTERNAL, remoteSnapshots );
+//        saveConfiguration();
+//
+//        // --- Execution
+//        // process the response code later, not via an exception.
+//        HttpUnitOptions.setExceptionsThrownOnErrorStatus( false );
+//
+//        WebRequest request = new GetMethodWebRequest( "http://machine.com/repository/internal/" + resourcePath );
+//        WebResponse response = sc.getResponse( request );
+//
+//        // --- Verification
+//
+//        switch ( expectation )
+//        {
+//            case EXPECT_MANAGED_CONTENTS:
+//                assertResponseOK( response );
+//                assertTrue( "Invalid Test Case: Can't expect managed contents with "
+//                    + "test that doesn't have a managed copy in the first place.", hasManagedCopy );
+//                String actualContents = response.getText();
+//                XMLAssert.assertXMLEqual( expectedManagedContents, actualContents );
+//                // assertEquals( "Expected managed file contents", expectedManagedContents, response.getText() );
+//                break;
+//            case EXPECT_REMOTE_CONTENTS:
+//                assertResponseOK( response );
+//                assertEquals( "Expected remote file contents", expectedRemoteContents, response.getText() );
+//                break;
+//            case EXPECT_NOT_FOUND:
+//                assertResponseNotFound( response );
+//                assertManagedFileNotExists( repoRootInternal, resourcePath );
+//                break;
+//        }
+//    }
+
+    protected void tearDown()
+        throws Exception
+    {
+        shutdownServer( remotePrivateSnapshots );
+
+        super.tearDown();
+    }
+}
index af811ed480316c6d12433f56f07353fbc2a623b2..067ba0e9ed2e43ee22ad1a65a0d92c2e0973e6ea 100644 (file)
@@ -93,6 +93,8 @@ public abstract class AbstractRepositoryServletProxiedTestCase
 
     protected RemoteRepoInfo remoteSnapshots;
     
+    protected RemoteRepoInfo remotePrivateSnapshots;
+    
     @Override
     protected void setUp()
         throws Exception
@@ -100,58 +102,57 @@ public abstract class AbstractRepositoryServletProxiedTestCase
         super.setUp();
     }
 
-    public RemoteRepoInfo createSnapshotsRepo()
+    protected RemoteRepoInfo createServer( String id )
         throws Exception
     {
-        RemoteRepoInfo snapshots = new RemoteRepoInfo();
-        snapshots.id = "snapshots";
-        snapshots.context = "/snapshots";
-        snapshots.root = getTestFile( "target/remote-repos/snapshots/" );
+        RemoteRepoInfo repo = new RemoteRepoInfo();
+        repo.id = id;
+        repo.context = "/" + id;
+        repo.root = getTestFile( "target/remote-repos/" + id + "/" );
 
         // Remove exising root contents.
-        if ( snapshots.root.exists() )
+        if ( repo.root.exists() )
         {
-            FileUtils.deleteDirectory( snapshots.root );
+            FileUtils.deleteDirectory( repo.root );
         }
 
         // Establish root directory.
-        if ( !snapshots.root.exists() )
+        if ( !repo.root.exists() )
         {
-            snapshots.root.mkdirs();
+            repo.root.mkdirs();
         }
 
-        snapshots.server = new Server();
+        repo.server = new Server();
         ContextHandlerCollection contexts = new ContextHandlerCollection();
-        snapshots.server.setHandler( contexts );
+        repo.server.setHandler( contexts );
 
         SocketConnector connector = new SocketConnector();
         connector.setPort( 0 ); // 0 means, choose and empty port. (we'll find out which, later)
 
-        snapshots.server.setConnectors( new Connector[] { connector } );
+        repo.server.setConnectors( new Connector[] { connector } );
 
         ContextHandler context = new ContextHandler();
-        context.setContextPath( snapshots.context );
+        context.setContextPath( repo.context );
+        context.setResourceBase( repo.root.getAbsolutePath() );
         context.setAttribute( "dirAllowed", true );
         context.setAttribute( "maxCacheSize", 0 );
-        context.setResourceBase( snapshots.root.getAbsolutePath() );
         ServletHandler servlet = new ServletHandler();
         servlet.addServletWithMapping( DefaultServlet.class.getName(), "/" );
         context.setHandler( servlet );
         contexts.addHandler( context );
 
-        snapshots.server.start();
+        repo.server.start();
 
         int port = connector.getLocalPort();
-        snapshots.url = "http://localhost:" + port + snapshots.context;
-        System.out.println( "Snapshot HTTP Server started on " + snapshots.url );
+        repo.url = "http://localhost:" + port + repo.context;
+        System.out.println( "Remote HTTP Server started on " + repo.url );
 
-        snapshots.config = createRemoteRepository( snapshots.id, "Testable [" + snapshots.id + "] Remote Repo",
-                                                   snapshots.url );
+        repo.config = createRemoteRepository( repo.id, "Testable [" + repo.id + "] Remote Repo", repo.url );
 
-        return snapshots;
+        return repo;
     }
 
-    private void assertServerSetupCorrectly( RemoteRepoInfo remoteRepo )
+    protected void assertServerSetupCorrectly( RemoteRepoInfo remoteRepo )
         throws Exception
     {
         WebConversation wc = new WebConversation();
@@ -159,56 +160,6 @@ public abstract class AbstractRepositoryServletProxiedTestCase
         assertResponseOK( response );
     }
 
-    private RemoteRepoInfo createCentralRepo()
-        throws Exception
-    {
-        RemoteRepoInfo central = new RemoteRepoInfo();
-        central.id = "central";
-        central.context = "/central";
-        central.root = getTestFile( "target/remote-repos/central/" );
-
-        // Remove exising root contents.
-        if ( central.root.exists() )
-        {
-            FileUtils.deleteDirectory( central.root );
-        }
-
-        // Establish root directory.
-        if ( !central.root.exists() )
-        {
-            central.root.mkdirs();
-        }
-
-        central.server = new Server();
-        ContextHandlerCollection contexts = new ContextHandlerCollection();
-        central.server.setHandler( contexts );
-
-        SocketConnector connector = new SocketConnector();
-        connector.setPort( 0 ); // 0 means, choose and empty port. (we'll find out which, later)
-
-        central.server.setConnectors( new Connector[] { connector } );
-
-        ContextHandler context = new ContextHandler();
-        context.setContextPath( central.context );
-        context.setResourceBase( central.root.getAbsolutePath() );
-        context.setAttribute( "dirAllowed", true );
-        context.setAttribute( "maxCacheSize", 0 );
-        ServletHandler servlet = new ServletHandler();
-        servlet.addServletWithMapping( DefaultServlet.class.getName(), "/" );
-        context.setHandler( servlet );
-        contexts.addHandler( context );
-
-        central.server.start();
-
-        int port = connector.getLocalPort();
-        central.url = "http://localhost:" + port + central.context;
-        System.out.println( "Central HTTP Server started on " + central.url );
-
-        central.config = createRemoteRepository( central.id, "Testable [" + central.id + "] Remote Repo", central.url );
-
-        return central;
-    }
-
     private void setupConnector( String repoId, RemoteRepoInfo remoteRepo, String releasesPolicy, String snapshotsPolicy )
     {
         ProxyConnectorConfiguration connector = new ProxyConnectorConfiguration();
@@ -222,7 +173,7 @@ public abstract class AbstractRepositoryServletProxiedTestCase
         archivaConfiguration.getConfiguration().addProxyConnector( connector );
     }
 
-    private void shutdownServer( RemoteRepoInfo remoteRepo )
+    protected void shutdownServer( RemoteRepoInfo remoteRepo )
     {
         if ( remoteRepo != null )
         {
@@ -258,7 +209,7 @@ public abstract class AbstractRepositoryServletProxiedTestCase
     protected void setupCentralRemoteRepo()
         throws Exception
     {
-        remoteCentral = createCentralRepo();
+        remoteCentral = createServer( "central" );
 
         assertServerSetupCorrectly( remoteCentral );
         archivaConfiguration.getConfiguration().addRemoteRepository( remoteCentral.config );
@@ -283,7 +234,7 @@ public abstract class AbstractRepositoryServletProxiedTestCase
     protected void setupSnapshotsRemoteRepo()
         throws Exception
     {
-        remoteSnapshots = createSnapshotsRepo();
+        remoteSnapshots = createServer( "snapshots" );
 
         assertServerSetupCorrectly( remoteSnapshots );
         archivaConfiguration.getConfiguration().addRemoteRepository( remoteSnapshots.config );
diff --git a/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletNoProxyMetadataTest.java b/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletNoProxyMetadataTest.java
new file mode 100644 (file)
index 0000000..2db6fa3
--- /dev/null
@@ -0,0 +1,93 @@
+package org.apache.maven.archiva.web.repository;
+
+/*
+ * 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.
+ */
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+import org.apache.commons.io.FileUtils;
+
+import java.io.File;
+
+/**
+ * RepositoryServletTest 
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryServletNoProxyMetadataTest
+    extends AbstractRepositoryServletTestCase
+{
+    public void testGetVersionMetadataDefaultLayout()
+        throws Exception
+    {
+        String commonsLangMetadata = "commons-lang/commons-lang/2.1/maven-metadata.xml";
+        String expectedMetadataContents = "metadata-for-commons-lang-version-2.1";
+
+        File checksumFile = new File( repoRootInternal, commonsLangMetadata );
+        checksumFile.getParentFile().mkdirs();
+
+        FileUtils.writeStringToFile( checksumFile, expectedMetadataContents, null );
+
+        WebRequest request = new GetMethodWebRequest( "http://machine.com/repository/internal/" + commonsLangMetadata );
+        WebResponse response = sc.getResponse( request );
+        assertResponseOK( response );
+
+        assertEquals( "Expected file contents", expectedMetadataContents, response.getText() );
+    }
+
+    public void testGetProjectMetadataDefaultLayout()
+        throws Exception
+    {
+        String commonsLangMetadata = "commons-lang/commons-lang/maven-metadata.xml";
+        String expectedMetadataContents = "metadata-for-commons-lang-version-for-project";
+
+        File checksumFile = new File( repoRootInternal, commonsLangMetadata );
+        checksumFile.getParentFile().mkdirs();
+
+        FileUtils.writeStringToFile( checksumFile, expectedMetadataContents, null );
+
+        WebRequest request = new GetMethodWebRequest( "http://machine.com/repository/internal/" + commonsLangMetadata );
+        WebResponse response = sc.getResponse( request );
+        assertResponseOK( response );
+
+        assertEquals( "Expected file contents", expectedMetadataContents, response.getText() );
+    }
+
+    public void testGetSnapshotVersionMetadataDefaultLayout()
+        throws Exception
+    {
+        String assemblyPluginMetadata = "org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2-SNAPSHOT/maven-metadata.xml";
+        String expectedMetadataContents = "metadata-for-assembly-plugin-version-2.2-beta-2-SNAPSHOT";
+
+        File checksumFile = new File( repoRootInternal, assemblyPluginMetadata );
+        checksumFile.getParentFile().mkdirs();
+
+        FileUtils.writeStringToFile( checksumFile, expectedMetadataContents, null );
+
+        WebRequest request = new GetMethodWebRequest( "http://machine.com/repository/internal/" + assemblyPluginMetadata );
+        WebResponse response = sc.getResponse( request );
+        assertResponseOK( response );
+
+        assertEquals( "Expected file contents", expectedMetadataContents, response.getText() );
+    }
+
+}
diff --git a/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletProxiedMetadataLocalOnlyTest.java b/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletProxiedMetadataLocalOnlyTest.java
new file mode 100644 (file)
index 0000000..c04fbf0
--- /dev/null
@@ -0,0 +1,98 @@
+package org.apache.maven.archiva.web.repository;
+
+/*
+ * 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.
+ */
+
+/**
+ * RepositoryServlet Tests, Proxied, Get of Metadata, exists on local managed repository only. 
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryServletProxiedMetadataLocalOnlyTest
+    extends AbstractRepositoryServletProxiedMetadataTestCase
+{
+    public void testGetProxiedSnapshotVersionMetadataLocalOnly()
+        throws Exception
+    {
+        // --- Setup
+        setupSnapshotsRemoteRepo();
+        setupPrivateSnapshotsRemoteRepo();
+        setupCleanInternalRepo();
+
+        String path = "org/apache/archiva/archivatest-maven-plugin/4.0-alpha-1-SNAPSHOT/maven-metadata.xml";
+        String expectedMetadata = createVersionMetadata( "org.apache.archiva", "archivatest-maven-plugin",
+                                                         "4.0-alpha-1-SNAPSHOT" );
+
+        populateRepo( repoRootInternal, path, expectedMetadata );
+
+        setupConnector( REPOID_INTERNAL, remoteSnapshots );
+        setupConnector( REPOID_INTERNAL, remotePrivateSnapshots );
+
+        // --- Execution
+        String actualMetadata = requestMetadataOK( path );
+
+        // --- Verification
+        assertExpectedMetadata( expectedMetadata, actualMetadata );
+    }
+
+    public void testGetProxiedVersionMetadataLocalOnly()
+        throws Exception
+    {
+        // --- Setup
+        setupSnapshotsRemoteRepo();
+        setupPrivateSnapshotsRemoteRepo();
+        setupCleanInternalRepo();
+
+        String path = "org/apache/archiva/archivatest-maven-plugin/4.0-alpha-2/maven-metadata.xml";
+        String expectedMetadata = createVersionMetadata( "org.apache.archiva", "archivatest-maven-plugin",
+                                                         "4.0-alpha-2" );
+
+        populateRepo( repoRootInternal, path, expectedMetadata );
+
+        // --- Execution
+        String actualMetadata = requestMetadataOK( path );
+
+        // --- Verification
+        assertExpectedMetadata( expectedMetadata, actualMetadata );
+    }
+
+    public void testGetProxiedProjectMetadataLocalOnly()
+        throws Exception
+    {
+        // --- Setup
+        setupSnapshotsRemoteRepo();
+        setupPrivateSnapshotsRemoteRepo();
+        setupCleanInternalRepo();
+
+        String path = "org/apache/archiva/archivatest-maven-plugin/maven-metadata.xml";
+        String version = "1.0-alpha-4";
+        String release = "1.0-alpha-4";
+        String expectedMetadata = createProjectMetadata( "org.apache.archiva", "archivatest-maven-plugin", version,
+                                                         release, new String[] { "1.0-alpha-4" } );
+
+        populateRepo( repoRootInternal, path, expectedMetadata );
+
+        // --- Execution
+        String actualMetadata = requestMetadataOK( path );
+
+        // --- Verification
+        assertExpectedMetadata( expectedMetadata, actualMetadata );
+    }
+}
diff --git a/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletProxiedMetadataRemoteOnlyTest.java b/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletProxiedMetadataRemoteOnlyTest.java
new file mode 100644 (file)
index 0000000..63eaf24
--- /dev/null
@@ -0,0 +1,142 @@
+package org.apache.maven.archiva.web.repository;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+
+/**
+ * RepositoryServlet Tests, Proxied, Get of Metadata, exists on remote repository only. 
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryServletProxiedMetadataRemoteOnlyTest
+    extends AbstractRepositoryServletProxiedMetadataTestCase
+{
+    public void testGetProxiedSnapshotVersionMetadataRemoteOnly()
+        throws Exception
+    {
+        // --- Setup
+        setupSnapshotsRemoteRepo();
+        setupPrivateSnapshotsRemoteRepo();
+        setupCleanInternalRepo();
+
+        String path = "org/apache/archiva/archivatest-maven-plugin/4.0-alpha-1-SNAPSHOT/maven-metadata.xml";
+        String version = "4.0-alpha-1-SNAPSHOT";
+        String timestamp = "20040305.112233";
+        String buildNumber = "2";
+        String lastUpdated = "20040305112233";
+        String expectedMetadata = createVersionMetadata( "org.apache.archiva", "archivatest-maven-plugin",
+                                                         version, timestamp, buildNumber, lastUpdated);
+
+        File metadataFile = populateRepo( remoteSnapshots, path, expectedMetadata );
+
+        setupConnector( REPOID_INTERNAL, remoteSnapshots );
+        setupConnector( REPOID_INTERNAL, remotePrivateSnapshots );
+        saveConfiguration();
+
+        // --- Execution
+        String actualMetadata = requestMetadataOK( path );
+
+        // --- Verification
+        assertExpectedMetadata( expectedMetadata, actualMetadata );
+    }
+    
+    public void testGetProxiedPluginSnapshotVersionMetadataRemoteOnly()
+        throws Exception
+    {
+        // --- Setup
+        setupSnapshotsRemoteRepo();
+        setupPrivateSnapshotsRemoteRepo();
+        setupCleanInternalRepo();
+        
+        String path = "org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-2-SNAPSHOT/maven-metadata.xml";
+        String version = "2.2-beta-2-SNAPSHOT";
+        String timestamp = "20071017.162810";
+        String buildNumber = "20";
+        String lastUpdated = "20071017162810";
+        String expectedMetadata = createVersionMetadata( "org.apache.maven.plugins", "maven-assembly-plugin", version,
+                                                         timestamp, buildNumber, lastUpdated );
+
+        File metadataFile = populateRepo( remoteSnapshots, path, expectedMetadata );
+
+        setupConnector( REPOID_INTERNAL, remoteSnapshots );
+        setupConnector( REPOID_INTERNAL, remotePrivateSnapshots );
+        saveConfiguration();
+
+        // --- Execution
+        String actualMetadata = requestMetadataOK( path );
+
+        // --- Verification
+        assertExpectedMetadata( expectedMetadata, actualMetadata );
+    }
+
+    public void testGetProxiedVersionMetadataRemoteOnly()
+        throws Exception
+    {
+        // --- Setup
+        setupSnapshotsRemoteRepo();
+        setupPrivateSnapshotsRemoteRepo();
+        setupCleanInternalRepo();
+
+        String path = "org/apache/archiva/archivatest-maven-plugin/4.0-alpha-2/maven-metadata.xml";
+        String expectedMetadata = createVersionMetadata( "org.apache.archiva", "archivatest-maven-plugin",
+                                                         "4.0-alpha-2" );
+
+        File managedFile = populateRepo( remoteSnapshots, path, expectedMetadata );
+
+        setupConnector( REPOID_INTERNAL, remoteSnapshots );
+        setupConnector( REPOID_INTERNAL, remotePrivateSnapshots );
+        saveConfiguration();
+
+        // --- Execution
+        String actualMetadata = requestMetadataOK( path );
+
+        // --- Verification
+        assertExpectedMetadata( expectedMetadata, actualMetadata );
+    }
+
+    public void testGetProxiedProjectMetadataRemoteOnly()
+        throws Exception
+    {
+        // --- Setup
+        setupSnapshotsRemoteRepo();
+        setupPrivateSnapshotsRemoteRepo();
+        setupCleanInternalRepo();
+
+        String path = "org/apache/archiva/archivatest-maven-plugin/maven-metadata.xml";
+        String latest = "1.0-alpha-4";
+        String release = "1.0-alpha-4";
+        String expectedMetadata = createProjectMetadata( "org.apache.archiva", "archivatest-maven-plugin",
+                                                         latest, release, new String[] { "1.0-alpha-4" } );
+
+        File managedFile = populateRepo( remoteSnapshots, path, expectedMetadata );
+
+        setupConnector( REPOID_INTERNAL, remoteSnapshots );
+        setupConnector( REPOID_INTERNAL, remotePrivateSnapshots );
+        saveConfiguration();
+
+        // --- Execution
+        String actualMetadata = requestMetadataOK( path );
+
+        // --- Verification
+        assertExpectedMetadata( expectedMetadata, actualMetadata );
+    }
+}