]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1282] ensure repository metadata is deleted when repository is
authorBrett Porter <brett@apache.org>
Tue, 19 Jan 2010 07:29:54 +0000 (07:29 +0000)
committerBrett Porter <brett@apache.org>
Tue, 19 Jan 2010 07:29:54 +0000 (07:29 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@900685 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AuditEventArgumentsMatcher.java [new file with mode: 0644]
archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java
archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java

diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AuditEventArgumentsMatcher.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/AuditEventArgumentsMatcher.java
new file mode 100644 (file)
index 0000000..81bed6f
--- /dev/null
@@ -0,0 +1,49 @@
+package org.apache.maven.archiva.web.action;
+
+/*
+ * 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.util.Arrays;
+
+import org.apache.maven.archiva.repository.audit.AuditEvent;
+import org.easymock.ArgumentsMatcher;
+
+public class AuditEventArgumentsMatcher
+    implements ArgumentsMatcher
+{
+    public boolean matches( Object[] objects, Object[] objects1 )
+    {
+        if ( objects.length != 1 || objects1.length != 1 )
+        {
+            return false;
+        }
+        else
+        {
+            AuditEvent o1 = (AuditEvent) objects[0];
+            AuditEvent o2 = (AuditEvent) objects1[0];
+            o2.setTimestamp( o1.getTimestamp() ); // effectively ignore the timestamp
+            return o1.equals( o2 );
+        }
+    }
+
+    public String toString( Object[] objects )
+    {
+        return Arrays.asList( objects ).toString();
+    }
+}
index 2ac78407b98ae89a739c076b2a04c623ac37c19b..7f25503b78e047e14413d71ad40127346fe976be 100644 (file)
@@ -47,7 +47,6 @@ import org.apache.maven.archiva.repository.audit.AuditListener;
 import org.apache.maven.archiva.repository.content.ManagedDefaultRepositoryContent;
 import org.apache.maven.archiva.repository.metadata.MetadataTools;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
-import org.easymock.ArgumentsMatcher;
 import org.easymock.MockControl;
 import org.easymock.classextension.MockClassControl;
 
@@ -681,27 +680,4 @@ public class UploadActionTest
         verifyChecksums( repoLocation );
     }
 
-    private static class AuditEventArgumentsMatcher
-        implements ArgumentsMatcher
-    {
-        public boolean matches( Object[] objects, Object[] objects1 )
-        {
-            if ( objects.length != 1 || objects1.length != 1 )
-            {
-                return false;
-            }
-            else
-            {
-                AuditEvent o1 = (AuditEvent) objects[0];
-                AuditEvent o2 = (AuditEvent) objects1[0];
-                o2.setTimestamp( o1.getTimestamp() ); // effectively ignore the timestamp
-                return o1.equals( o2 );
-            }
-        }
-
-        public String toString( Object[] objects )
-        {
-            return Arrays.asList( objects ).toString();
-        }
-    }
 }
index a7bf0b97e09170160a1ee44641cd65d2151d3bcb..94f7b674e98b9da1676b22cffc7c059a87b00616 100644 (file)
@@ -21,6 +21,7 @@ package org.apache.maven.archiva.web.action.admin.repositories;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
@@ -34,7 +35,10 @@ import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.configuration.ProxyConnectorConfiguration;
 import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration;
+import org.apache.maven.archiva.repository.audit.AuditEvent;
+import org.apache.maven.archiva.repository.audit.AuditListener;
 import org.apache.maven.archiva.security.ArchivaRoleConstants;
+import org.apache.maven.archiva.web.action.AuditEventArgumentsMatcher;
 import org.codehaus.plexus.redback.role.RoleManager;
 import org.codehaus.plexus.redback.role.RoleManagerException;
 import org.codehaus.plexus.registry.RegistryException;
@@ -145,10 +149,14 @@ public class DeleteManagedRepositoryActionTest
 
         prepareRoleManagerMock();
         
-        Configuration configuration = prepDeletionTest( createRepository(), 4 );                
-        
+        Configuration configuration = prepDeletionTest( createRepository(), 4 );
+
+        MockControl control = mockAuditListeners();
+
+        MockControl metadataRepositoryControl = mockMetadataRepository();
+
         String status = action.deleteEntry();
-                
+
         assertEquals( Action.SUCCESS, status );
 
         assertTrue( configuration.getManagedRepositories().isEmpty() );
@@ -156,6 +164,29 @@ public class DeleteManagedRepositoryActionTest
         assertTrue( location.exists() );
 
         repositoryStatisticsManagerControl.verify();
+        control.verify();
+        metadataRepositoryControl.verify();
+    }
+
+    private MockControl mockMetadataRepository()
+    {
+        MockControl metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
+        MetadataRepository metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
+        metadataRepository.deleteRepository( REPO_ID );
+        metadataRepositoryControl.replay();
+        action.setMetadataRepository( metadataRepository );
+        return metadataRepositoryControl;
+    }
+
+    private MockControl mockAuditListeners()
+    {
+        MockControl control = MockControl.createControl( AuditListener.class );
+        AuditListener listener = (AuditListener) control.getMock();
+        listener.auditEvent( new AuditEvent( REPO_ID, "guest", null, AuditEvent.DELETE_MANAGED_REPO ) );
+        control.setMatcher( new AuditEventArgumentsMatcher() );
+        control.replay();
+        action.setAuditListeners( Arrays.asList( listener ) );
+        return control;
     }
 
     public void testDeleteRepositoryDeleteContent()
@@ -168,6 +199,10 @@ public class DeleteManagedRepositoryActionTest
         
         Configuration configuration = prepDeletionTest( createRepository(), 4 );              
         
+        MockControl control = mockAuditListeners();
+
+        MockControl metadataRepositoryControl = mockMetadataRepository();
+
         String status = action.deleteContents();
         
         assertEquals( Action.SUCCESS, status );
@@ -177,6 +212,8 @@ public class DeleteManagedRepositoryActionTest
         assertFalse( location.exists() );
 
         repositoryStatisticsManagerControl.verify();
+        control.verify();
+        metadataRepositoryControl.verify();
     }
     
     public void testDeleteRepositoryAndAssociatedProxyConnectors()
@@ -194,6 +231,8 @@ public class DeleteManagedRepositoryActionTest
 
         assertEquals( 1, configuration.getProxyConnectors().size() );
         
+        MockControl control = mockAuditListeners();
+        MockControl metadataRepositoryControl = mockMetadataRepository();
         String status = action.deleteContents();
         
         assertEquals( Action.SUCCESS, status );
@@ -204,6 +243,8 @@ public class DeleteManagedRepositoryActionTest
         assertFalse( location.exists() );
 
         repositoryStatisticsManagerControl.verify();
+        control.verify();
+        metadataRepositoryControl.verify();
     }
     
     public void testDeleteRepositoryCancelled()
@@ -241,15 +282,19 @@ public class DeleteManagedRepositoryActionTest
 
         assertEquals( 1, configuration.getRepositoryGroups().size() );
         
+        MockControl control = mockAuditListeners();
+        MockControl metadataRepositoryControl = mockMetadataRepository();
         String status = action.deleteContents();
         assertEquals( Action.SUCCESS, status );
 
         assertTrue( configuration.getManagedRepositories().isEmpty() );
-        assertEquals( 0, ( ( RepositoryGroupConfiguration ) configuration.getRepositoryGroups().get( 0 ) ).getRepositories().size() );
+        assertEquals( 0, configuration.getRepositoryGroups().get( 0 ).getRepositories().size() );
 
         assertFalse( location.exists() );
 
         repositoryStatisticsManagerControl.verify();
+        control.verify();
+        metadataRepositoryControl.verify();
     }
 
     private Configuration prepDeletionTest( ManagedRepositoryConfiguration originalRepository, int expectCountGetConfig )
index aa58820073c0c010fbafcd5750c404fb6cc6366c..4379723909a2e2cfa30465cdbd41de6afdb11b23 100644 (file)
@@ -69,5 +69,9 @@ public interface MetadataRepository
 
     void deleteArtifact( String repositoryId, String namespace, String project, String version, String id );
 
+    /**
+     * Delete a repository's metadata. This includes all associated metadata facets.
+     * @param repoId the repository to delete
+     */
     void deleteRepository( String repoId );
 }