]> source.dussan.org Git - archiva.git/blob
dcf370ba3dcce0395dce1255dc0337bcf2e0d660
[archiva.git] /
1 package org.apache.archiva.web.action;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *   http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import com.opensymphony.xwork2.Action;
23 import net.sf.beanlib.provider.replicator.BeanReplicator;
24 import org.apache.archiva.admin.model.beans.ManagedRepository;
25 import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
26 import org.apache.archiva.configuration.ArchivaConfiguration;
27 import org.apache.archiva.configuration.Configuration;
28 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
29 import org.apache.archiva.metadata.model.ArtifactMetadata;
30 import org.apache.archiva.metadata.repository.MetadataRepository;
31 import org.apache.archiva.metadata.repository.RepositorySession;
32 import org.apache.archiva.repository.ManagedRepositoryContent;
33 import org.apache.archiva.repository.RepositoryContentFactory;
34 import org.apache.archiva.repository.content.ManagedDefaultRepositoryContent;
35 import org.apache.archiva.rest.services.DefaultRepositoriesService;
36 import org.apache.archiva.webtest.memory.TestRepositorySessionFactory;
37 import org.apache.commons.lang.StringUtils;
38 import org.apache.struts2.StrutsSpringTestCase;
39 import org.easymock.MockControl;
40 import org.easymock.classextension.MockClassControl;
41
42 import java.io.File;
43 import java.util.ArrayList;
44
45 import static org.mockito.Mockito.mock;
46 import static org.mockito.Mockito.when;
47
48 public class DeleteArtifactActionTest
49     extends StrutsSpringTestCase
50 {
51     private DeleteArtifactAction action;
52
53     private ArchivaConfiguration configuration;
54
55     private MockControl configurationControl;
56
57     private RepositoryContentFactory repositoryFactory;
58
59     private MockControl repositoryFactoryControl;
60
61     private MetadataRepository metadataRepository;
62
63     private MockControl metadataRepositoryControl;
64
65     private static final String REPOSITORY_ID = "test-repo";
66
67     private static final String GROUP_ID = "org.apache.archiva";
68
69     private static final String ARTIFACT_ID = "npe-metadata";
70
71     private static final String VERSION = "1.0";
72
73     private static final String REPO_LOCATION = "target/test-classes/test-repo";
74
75     @Override
76     protected String[] getContextLocations()
77     {
78         return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
79     }
80
81     @Override
82     protected void setUp()
83         throws Exception
84     {
85         super.setUp();
86
87         action = (DeleteArtifactAction) getActionProxy( "/deleteArtifact.action" ).getAction();
88         action.setPrincipal( "admin" );
89         assertNotNull( action );
90
91         configurationControl = MockControl.createControl( ArchivaConfiguration.class );
92         configuration = (ArchivaConfiguration) configurationControl.getMock();
93
94         repositoryFactoryControl = MockClassControl.createControl( RepositoryContentFactory.class );
95         repositoryFactory = (RepositoryContentFactory) repositoryFactoryControl.getMock();
96
97         metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
98         metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
99
100         RepositorySession repositorySession = mock( RepositorySession.class );
101         when( repositorySession.getRepository() ).thenReturn( metadataRepository );
102
103         TestRepositorySessionFactory repositorySessionFactory =
104             applicationContext.getBean( "repositorySessionFactory#test", TestRepositorySessionFactory.class );
105
106         repositorySessionFactory.setRepositorySession( repositorySession );
107
108         ( (DefaultManagedRepositoryAdmin) ( (DefaultRepositoriesService) action.getRepositoriesService() ).getManagedRepositoryAdmin() ).setArchivaConfiguration(
109             configuration );
110         ( (DefaultRepositoriesService) action.getRepositoriesService() ).setRepositoryFactory( repositoryFactory );
111     }
112
113     @Override
114     protected void tearDown()
115         throws Exception
116     {
117         action = null;
118
119         super.tearDown();
120     }
121
122
123     public void testNPEInDeleteArtifact()
124         throws Exception
125     {
126         action.setGroupId( GROUP_ID );
127         action.setArtifactId( ARTIFACT_ID );
128         action.setVersion( VERSION );
129         action.setRepositoryId( REPOSITORY_ID );
130
131         Configuration config = createConfiguration();
132
133         ManagedRepositoryContent repoContent = new ManagedDefaultRepositoryContent();
134         repoContent.setRepository(
135             new BeanReplicator().replicateBean( config.findManagedRepositoryById( REPOSITORY_ID ),
136                                                 ManagedRepository.class ) );
137
138         configurationControl.expectAndReturn( configuration.getConfiguration(), config );
139         repositoryFactoryControl.expectAndReturn( repositoryFactory.getManagedRepositoryContent( REPOSITORY_ID ),
140                                                   repoContent );
141         metadataRepositoryControl.expectAndReturn(
142             metadataRepository.getArtifacts( REPOSITORY_ID, GROUP_ID, ARTIFACT_ID, VERSION ),
143             new ArrayList<ArtifactMetadata>() );
144
145         configurationControl.replay();
146         repositoryFactoryControl.replay();
147         metadataRepositoryControl.replay();
148
149         assertEquals( Action.SUCCESS, action.doDelete() );
150
151         String artifactPath =
152             REPO_LOCATION + "/" + StringUtils.replace( GROUP_ID, ".", "/" ) + "/" + StringUtils.replace( ARTIFACT_ID,
153                                                                                                          ".", "/" )
154                 + "/" + VERSION + "/" + ARTIFACT_ID + "-" + VERSION;
155
156         assertFalse( new File( artifactPath + ".jar" ).exists() );
157         assertFalse( new File( artifactPath + ".jar.sha1" ).exists() );
158         assertFalse( new File( artifactPath + ".jar.md5" ).exists() );
159
160         assertFalse( new File( artifactPath + ".pom" ).exists() );
161         assertFalse( new File( artifactPath + ".pom.sha1" ).exists() );
162         assertFalse( new File( artifactPath + ".pom.md5" ).exists() );
163     }
164
165     private Configuration createConfiguration()
166     {
167         ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
168         managedRepo.setId( REPOSITORY_ID );
169         managedRepo.setName( "Test Repository" );
170
171         managedRepo.setLocation( REPO_LOCATION );
172         managedRepo.setReleases( true );
173
174         Configuration config = new Configuration();
175         config.addManagedRepository( managedRepo );
176
177         return config;
178     }
179 }