]> source.dussan.org Git - archiva.git/blob
92b0a103e5f58189170bcc65b26d26ea559cd50a
[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 import org.apache.archiva.test.ArchivaBlockJUnit4ClassRunner;
48 import org.junit.After;
49 import org.junit.Before;
50 import org.junit.Test;
51 import org.junit.runner.RunWith;
52 @RunWith( ArchivaBlockJUnit4ClassRunner.class )
53 public class DeleteArtifactActionTest
54     extends StrutsSpringTestCase
55 {
56     private DeleteArtifactAction action;
57
58     private ArchivaConfiguration configuration;
59
60     private MockControl configurationControl;
61
62     private RepositoryContentFactory repositoryFactory;
63
64     private MockControl repositoryFactoryControl;
65
66     private MetadataRepository metadataRepository;
67
68     private MockControl metadataRepositoryControl;
69
70     private static final String REPOSITORY_ID = "test-repo";
71
72     private static final String GROUP_ID = "org.apache.archiva";
73
74     private static final String ARTIFACT_ID = "npe-metadata";
75
76     private static final String VERSION = "1.0";
77
78     private static final String REPO_LOCATION = "target/test-classes/test-repo";
79
80     @Override
81     protected String[] getContextLocations()
82     {
83         return new String[]{ "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" };
84     }
85
86     @Override
87     @Before
88     public void setUp()
89         throws Exception
90     {
91         super.setUp();
92
93         action = (DeleteArtifactAction) getActionProxy( "/deleteArtifact.action" ).getAction();
94         action.setPrincipal( "admin" );
95         assertNotNull( action );
96
97         configurationControl = MockControl.createControl( ArchivaConfiguration.class );
98         configuration = (ArchivaConfiguration) configurationControl.getMock();
99
100         repositoryFactoryControl = MockClassControl.createControl( RepositoryContentFactory.class );
101         repositoryFactory = (RepositoryContentFactory) repositoryFactoryControl.getMock();
102
103         metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
104         metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
105
106         RepositorySession repositorySession = mock( RepositorySession.class );
107         when( repositorySession.getRepository() ).thenReturn( metadataRepository );
108
109         TestRepositorySessionFactory repositorySessionFactory =
110             applicationContext.getBean( "repositorySessionFactory#test", TestRepositorySessionFactory.class );
111
112         repositorySessionFactory.setRepositorySession( repositorySession );
113
114         ( (DefaultManagedRepositoryAdmin) ( (DefaultRepositoriesService) action.getRepositoriesService() ).getManagedRepositoryAdmin() ).setArchivaConfiguration(
115             configuration );
116         ( (DefaultRepositoriesService) action.getRepositoriesService() ).setRepositoryFactory( repositoryFactory );
117     }
118
119     @Override
120     @After
121     public void tearDown()
122         throws Exception
123     {
124         action = null;
125
126         super.tearDown();
127     }
128
129
130     @Test
131     public void testNPEInDeleteArtifact()
132         throws Exception
133     {
134         action.setGroupId( GROUP_ID );
135         action.setArtifactId( ARTIFACT_ID );
136         action.setVersion( VERSION );
137         action.setRepositoryId( REPOSITORY_ID );
138
139         Configuration config = createConfiguration();
140
141         ManagedRepositoryContent repoContent = new ManagedDefaultRepositoryContent();
142         repoContent.setRepository(
143             new BeanReplicator().replicateBean( config.findManagedRepositoryById( REPOSITORY_ID ),
144                                                 ManagedRepository.class ) );
145
146         configurationControl.expectAndReturn( configuration.getConfiguration(), config );
147         repositoryFactoryControl.expectAndReturn( repositoryFactory.getManagedRepositoryContent( REPOSITORY_ID ),
148                                                   repoContent );
149         metadataRepositoryControl.expectAndReturn(
150             metadataRepository.getArtifacts( REPOSITORY_ID, GROUP_ID, ARTIFACT_ID, VERSION ),
151             new ArrayList<ArtifactMetadata>() );
152
153         configurationControl.replay();
154         repositoryFactoryControl.replay();
155         metadataRepositoryControl.replay();
156
157         assertEquals( Action.SUCCESS, action.doDelete() );
158
159         String artifactPath =
160             REPO_LOCATION + "/" + StringUtils.replace( GROUP_ID, ".", "/" ) + "/" + StringUtils.replace( ARTIFACT_ID,
161                                                                                                          ".", "/" )
162                 + "/" + VERSION + "/" + ARTIFACT_ID + "-" + VERSION;
163
164         assertFalse( new File( artifactPath + ".jar" ).exists() );
165         assertFalse( new File( artifactPath + ".jar.sha1" ).exists() );
166         assertFalse( new File( artifactPath + ".jar.md5" ).exists() );
167
168         assertFalse( new File( artifactPath + ".pom" ).exists() );
169         assertFalse( new File( artifactPath + ".pom.sha1" ).exists() );
170         assertFalse( new File( artifactPath + ".pom.md5" ).exists() );
171     }
172
173     private Configuration createConfiguration()
174     {
175         ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
176         managedRepo.setId( REPOSITORY_ID );
177         managedRepo.setName( "Test Repository" );
178
179         managedRepo.setLocation( REPO_LOCATION );
180         managedRepo.setReleases( true );
181
182         Configuration config = new Configuration();
183         config.addManagedRepository( managedRepo );
184
185         return config;
186     }
187 }