Author: oching
Date: Sun Nov 22 10:51:07 2009
New Revision: 883057

URL: http://svn.apache.org/viewvc?rev=883057&view=rev
Log:
[MRM-747] Archiva should prevent re-deployment of released or non-snapshot 
versioned artifacts
o block re-deployment of released artifacts to repository of configured using 
web upload form
o added unit test

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java?rev=883057&r1=883056&r2=883057&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java
 Sun Nov 22 10:51:07 2009
@@ -351,8 +351,17 @@
             
             try
             {   
-                copyFile( artifactFile, targetPath, filename, fixChecksums );
-                queueRepositoryTask( repository.getId(), repository.toFile( 
artifactReference ) );
+                File targetFile = new File( targetPath, filename );
+                if( targetFile.exists() && !VersionUtil.isSnapshot( version ) 
&& repoConfig.isBlockRedeployments() )
+                {
+                    addActionError( "Overwriting released artifacts in 
repository '" + repoConfig.getId() + "' is not allowed." );
+                    return ERROR;
+                }
+                else
+                {
+                    copyFile( artifactFile, targetPath, filename, fixChecksums 
);
+                    queueRepositoryTask( repository.getId(), 
repository.toFile( artifactReference ) );                    
+                }
             }
             catch ( IOException ie )
             {

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java?rev=883057&r1=883056&r2=883057&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/UploadActionTest.java
 Sun Nov 22 10:51:07 2009
@@ -97,6 +97,7 @@
         repoConfig.setLayout( "default" );
         repoConfig.setLocation( testRepo.getPath() );
         repoConfig.setName( REPOSITORY_ID );
+        repoConfig.setBlockRedeployments( true );
         config.addManagedRepository( repoConfig );
         
         RepositoryScanningConfiguration repoScanning = new 
RepositoryScanningConfiguration();
@@ -336,7 +337,7 @@
 
     public void testArtifactUploadFailedRepositoryNotFound()
         throws Exception
-    {
+    {        
         setUploadParameters( "1.0", null,
                              new File( getBasedir(),
                                        
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), null,
@@ -405,9 +406,9 @@
                              true );
 
         ManagedRepositoryContent content = new 
ManagedDefaultRepositoryContent();
-        content.setRepository( config.findManagedRepositoryById( REPOSITORY_ID 
) );
-
-        
+        ManagedRepositoryConfiguration repoConfig = 
config.findManagedRepositoryById( REPOSITORY_ID );
+        repoConfig.setBlockRedeployments( false );        
+        content.setRepository( repoConfig );      
         
         archivaConfigControl.expectAndReturn( 
archivaConfig.getConfiguration(), config );
         repoFactoryControl.expectAndReturn( 
repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content );
@@ -451,5 +452,81 @@
         assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation );
 
         verifyChecksums( repoLocation );
-    }    
+    }
+    
+    public void testUploadArtifactAlreadyExistingRedeploymentsBlocked()
+        throws Exception
+    {   
+        setUploadParameters( "1.0", null,
+                             new File( getBasedir(),
+                                       
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), null,
+                             true );
+
+        ManagedRepositoryContent content = new 
ManagedDefaultRepositoryContent();
+        content.setRepository( config.findManagedRepositoryById( REPOSITORY_ID 
) );
+
+        archivaConfigControl.expectAndReturn( 
archivaConfig.getConfiguration(), config, 2 );
+        repoFactoryControl.expectAndReturn( 
repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content, 2 );
+
+        archivaConfigControl.replay();
+        repoFactoryControl.replay();
+
+        String returnString = uploadAction.doUpload();
+        assertEquals( Action.SUCCESS, returnString );
+        
+        setUploadParameters( "1.0", null,
+                             new File( getBasedir(),
+                                       
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), null,
+                             true );
+        
+        returnString = uploadAction.doUpload();
+        assertEquals( Action.ERROR, returnString );
+
+        archivaConfigControl.verify();
+        repoFactoryControl.verify();
+
+        String repoLocation = config.findManagedRepositoryById( REPOSITORY_ID 
).getLocation();
+        assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation );
+
+        verifyChecksums( repoLocation );
+    }
+    
+    public void testUploadArtifactAlreadyExistingRedeploymentsAllowed()
+        throws Exception
+    {                
+        setUploadParameters( "1.0", null,
+                             new File( getBasedir(),
+                                       
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), null,
+                             true );
+    
+        ManagedRepositoryContent content = new 
ManagedDefaultRepositoryContent();
+        ManagedRepositoryConfiguration repoConfig = 
config.findManagedRepositoryById( REPOSITORY_ID );
+        repoConfig.setBlockRedeployments( false );        
+        content.setRepository( repoConfig );        
+    
+        archivaConfigControl.expectAndReturn( 
archivaConfig.getConfiguration(), config, 2 );
+        repoFactoryControl.expectAndReturn( 
repoFactory.getManagedRepositoryContent( REPOSITORY_ID ), content, 2 );
+    
+        archivaConfigControl.replay();
+        repoFactoryControl.replay();
+    
+        String returnString = uploadAction.doUpload();
+        assertEquals( Action.SUCCESS, returnString );
+    
+        setUploadParameters( "1.0", null,
+                             new File( getBasedir(),
+                                       
"target/test-classes/upload-artifact-test/artifact-to-be-uploaded.jar" ), null,
+                             true );
+        
+        returnString = uploadAction.doUpload();
+        assertEquals( Action.SUCCESS, returnString );
+        
+        archivaConfigControl.verify();
+        repoFactoryControl.verify();
+    
+        String repoLocation = config.findManagedRepositoryById( REPOSITORY_ID 
).getLocation();
+        assertAllArtifactsIncludingSupportArtifactsArePresent( repoLocation );
+    
+        verifyChecksums( repoLocation );
+    }
 }


Reply via email to