]> source.dussan.org Git - archiva.git/blob
58c7ced358ad3a15e8d290e3e974146874e2cfcd
[archiva.git] /
1 package org.apache.maven.archiva.web.action.admin.repositories;
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.xwork.Action;
23 import org.apache.commons.io.FileUtils;
24 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
25 import org.apache.maven.archiva.configuration.Configuration;
26 import org.apache.maven.archiva.configuration.IndeterminateConfigurationException;
27 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
28 import org.codehaus.plexus.PlexusTestCase;
29 import org.codehaus.plexus.redback.role.RoleManager;
30 import org.codehaus.plexus.redback.xwork.interceptor.SecureActionBundle;
31 import org.codehaus.plexus.redback.xwork.interceptor.SecureActionException;
32 import org.codehaus.plexus.registry.RegistryException;
33 import org.easymock.MockControl;
34
35 import java.io.File;
36 import java.util.Collections;
37
38 /**
39  * Test the repositories action returns the correct data.
40  */
41 public class ConfigureRepositoryActionTest
42     extends PlexusTestCase
43 {
44     private ConfigureRepositoryAction action;
45
46     private RoleManager roleManager;
47
48     private MockControl roleManagerControl;
49
50     private MockControl archivaConfigurationControl;
51
52     private ArchivaConfiguration archivaConfiguration;
53
54     private static final String REPO_ID = "repo-ident";
55
56     private File location;
57
58     protected void setUp()
59         throws Exception
60     {
61         super.setUp();
62
63         // TODO: purely to quiet logging - shouldn't be needed
64         String appserverBase = getTestFile( "target/appserver-base" ).getAbsolutePath();
65         System.setProperty( "appserver.base", appserverBase );
66         action = (ConfigureRepositoryAction) lookup( Action.class.getName(), "configureRepositoryAction" );
67
68         archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
69         archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
70         action.setArchivaConfiguration( archivaConfiguration );
71
72         roleManagerControl = MockControl.createControl( RoleManager.class );
73         roleManager = (RoleManager) roleManagerControl.getMock();
74         action.setRoleManager( roleManager );
75         location = getTestFile( "location" );
76     }
77
78     public void testSecureActionBundle()
79         throws SecureActionException
80     {
81         archivaConfiguration.getConfiguration();
82         archivaConfigurationControl.setReturnValue( new Configuration() );
83         archivaConfigurationControl.replay();
84
85         action.prepare();
86         SecureActionBundle bundle = action.getSecureActionBundle();
87         assertTrue( bundle.requiresAuthentication() );
88         assertEquals( 1, bundle.getAuthorizationTuples().size() );
89     }
90
91     public void testAddRepositoryInitialPage()
92         throws Exception
93     {
94         archivaConfiguration.getConfiguration();
95         archivaConfigurationControl.setReturnValue( new Configuration() );
96         archivaConfigurationControl.replay();
97
98         action.prepare();
99         assertNull( action.getRepoid() );
100         assertNull( action.getMode() );
101         AdminRepositoryConfiguration configuration = action.getRepository();
102         assertNotNull( configuration );
103         assertNull( configuration.getId() );
104         // check all booleans are false
105         assertFalse( configuration.isDeleteReleasedSnapshots() );
106         assertFalse( configuration.isIndexed() );
107         assertFalse( configuration.isReleases() );
108         assertFalse( configuration.isSnapshots() );
109
110         String status = action.add();
111         assertEquals( Action.INPUT, status );
112
113         // check defaults
114         assertFalse( configuration.isDeleteReleasedSnapshots() );
115         assertTrue( configuration.isIndexed() );
116         assertTrue( configuration.isReleases() );
117         assertFalse( configuration.isSnapshots() );
118     }
119
120     public void testAddRepository()
121         throws Exception
122     {
123         FileUtils.deleteDirectory( location );
124
125         // TODO: should be in the business model
126         roleManager.createTemplatedRole( "archiva-repository-manager", REPO_ID );
127         roleManager.createTemplatedRole( "archiva-repository-observer", REPO_ID );
128
129         roleManagerControl.replay();
130
131         Configuration configuration = new Configuration();
132         archivaConfiguration.getConfiguration();
133         archivaConfigurationControl.setReturnValue( configuration );
134         archivaConfiguration.getConfiguration();
135         archivaConfigurationControl.setReturnValue( configuration );
136
137         archivaConfiguration.save( configuration );
138
139         archivaConfigurationControl.replay();
140
141         action.prepare();
142         action.setMode( "add" );
143         AdminRepositoryConfiguration repository = action.getRepository();
144         populateRepository( repository );
145
146         assertFalse( location.exists() );
147         String status = action.save();
148         assertEquals( Action.SUCCESS, status );
149         assertTrue( location.exists() );
150
151         assertEquals( Collections.singletonList( repository ), configuration.getManagedRepositories() );
152
153         roleManagerControl.verify();
154         archivaConfigurationControl.verify();
155     }
156
157     public void testEditRepositoryInitialPage()
158         throws Exception
159     {
160         Configuration configuration = createConfigurationForEditing( createRepository() );
161
162         archivaConfiguration.getConfiguration();
163         archivaConfigurationControl.setReturnValue( configuration );
164         archivaConfigurationControl.replay();
165
166         action.setRepoid( REPO_ID );
167
168         action.prepare();
169         assertEquals( REPO_ID, action.getRepoid() );
170         assertNull( action.getMode() );
171         AdminRepositoryConfiguration repository = action.getRepository();
172         assertNotNull( repository );
173         assertRepositoryEquals( repository, createRepository() );
174
175         String status = action.edit();
176         assertEquals( Action.INPUT, status );
177         repository = action.getRepository();
178         assertRepositoryEquals( repository, createRepository() );
179     }
180
181     public void testEditRepository()
182         throws Exception
183     {
184         // TODO: should be in the business model
185         roleManager.createTemplatedRole( "archiva-repository-manager", REPO_ID );
186         roleManager.createTemplatedRole( "archiva-repository-observer", REPO_ID );
187
188         roleManagerControl.replay();
189
190         Configuration configuration = createConfigurationForEditing( createRepository() );
191         archivaConfiguration.getConfiguration();
192         archivaConfigurationControl.setReturnValue( configuration );
193         archivaConfiguration.getConfiguration();
194         archivaConfigurationControl.setReturnValue( configuration );
195
196         archivaConfiguration.save( configuration );
197
198         archivaConfigurationControl.replay();
199
200         action.prepare();
201         action.setMode( "edit" );
202         AdminRepositoryConfiguration repository = action.getRepository();
203         populateRepository( repository );
204         repository.setName( "new repo name" );
205
206         String status = action.save();
207         assertEquals( Action.SUCCESS, status );
208
209         ManagedRepositoryConfiguration newRepository = createRepository();
210         newRepository.setName( "new repo name" );
211         assertRepositoryEquals( repository, newRepository );
212         assertEquals( Collections.singletonList( repository ), configuration.getManagedRepositories() );
213
214         roleManagerControl.verify();
215         archivaConfigurationControl.verify();
216     }
217
218     public void testDeleteRepositoryConfirmation()
219     {
220         ManagedRepositoryConfiguration originalRepository = createRepository();
221         Configuration configuration = createConfigurationForEditing( originalRepository );
222
223         archivaConfiguration.getConfiguration();
224         archivaConfigurationControl.setReturnValue( configuration );
225         archivaConfigurationControl.replay();
226
227         action.setRepoid( REPO_ID );
228
229         action.prepare();
230         assertEquals( REPO_ID, action.getRepoid() );
231         assertNull( action.getMode() );
232         AdminRepositoryConfiguration repository = action.getRepository();
233         assertNotNull( repository );
234         assertRepositoryEquals( repository, createRepository() );
235
236         String status = action.confirm();
237         assertEquals( Action.INPUT, status );
238         repository = action.getRepository();
239         assertRepositoryEquals( repository, createRepository() );
240         assertEquals( Collections.singletonList( originalRepository ), configuration.getManagedRepositories() );
241     }
242
243     public void testDeleteRepositoryKeepContent()
244         throws RegistryException, IndeterminateConfigurationException
245     {
246         Configuration configuration = executeDeletionTest( "delete-entry", createRepository() );
247
248         assertTrue( configuration.getManagedRepositories().isEmpty() );
249
250         assertTrue( location.exists() );
251     }
252
253     public void testDeleteRepositoryDeleteContent()
254         throws RegistryException, IndeterminateConfigurationException
255     {
256         Configuration configuration = executeDeletionTest( "delete-contents", createRepository() );
257
258         assertTrue( configuration.getManagedRepositories().isEmpty() );
259
260         assertFalse( location.exists() );
261     }
262
263     public void testDeleteRepositoryCancelled()
264         throws RegistryException, IndeterminateConfigurationException
265     {
266         ManagedRepositoryConfiguration originalRepository = createRepository();
267         Configuration configuration = executeDeletionTest( "unmodified", originalRepository );
268
269         AdminRepositoryConfiguration repository = action.getRepository();
270         assertRepositoryEquals( repository, createRepository() );
271         assertEquals( Collections.singletonList( originalRepository ), configuration.getManagedRepositories() );
272
273         assertTrue( location.exists() );
274     }
275
276     private Configuration executeDeletionTest( String mode, ManagedRepositoryConfiguration originalRepository )
277         throws RegistryException, IndeterminateConfigurationException
278     {
279         location.mkdirs();
280
281         Configuration configuration = createConfigurationForEditing( originalRepository );
282
283         archivaConfiguration.getConfiguration();
284         archivaConfigurationControl.setReturnValue( configuration );
285         archivaConfiguration.getConfiguration();
286         archivaConfigurationControl.setReturnValue( configuration );
287
288         archivaConfiguration.save( configuration );
289         archivaConfigurationControl.replay();
290
291         action.setRepoid( REPO_ID );
292         action.setMode( mode );
293
294         action.prepare();
295         assertEquals( REPO_ID, action.getRepoid() );
296         assertEquals( mode, action.getMode() );
297         AdminRepositoryConfiguration repository = action.getRepository();
298         assertNotNull( repository );
299         assertRepositoryEquals( repository, createRepository() );
300
301         assertTrue( location.exists() );
302         String status = action.delete();
303         assertEquals( Action.SUCCESS, status );
304         return configuration;
305     }
306
307     private void assertRepositoryEquals( ManagedRepositoryConfiguration expectedRepository,
308                                          ManagedRepositoryConfiguration actualRepository )
309     {
310         assertEquals( expectedRepository.getDaysOlder(), actualRepository.getDaysOlder() );
311         assertEquals( expectedRepository.getId(), actualRepository.getId() );
312         assertEquals( expectedRepository.getIndexDir(), actualRepository.getIndexDir() );
313         assertEquals( expectedRepository.getLayout(), actualRepository.getLayout() );
314         assertEquals( expectedRepository.getLocation(), actualRepository.getLocation() );
315         assertEquals( expectedRepository.getName(), actualRepository.getName() );
316         assertEquals( expectedRepository.getRefreshCronExpression(), actualRepository.getRefreshCronExpression() );
317         assertEquals( expectedRepository.getRetentionCount(), actualRepository.getRetentionCount() );
318         assertEquals( expectedRepository.isDeleteReleasedSnapshots(), actualRepository.isDeleteReleasedSnapshots() );
319         assertEquals( expectedRepository.isIndexed(), actualRepository.isIndexed() );
320         assertEquals( expectedRepository.isReleases(), actualRepository.isReleases() );
321         assertEquals( expectedRepository.isSnapshots(), actualRepository.isSnapshots() );
322     }
323
324     private Configuration createConfigurationForEditing( ManagedRepositoryConfiguration repositoryConfiguration )
325     {
326         Configuration configuration = new Configuration();
327         configuration.addManagedRepository( repositoryConfiguration );
328         return configuration;
329     }
330
331     private ManagedRepositoryConfiguration createRepository()
332     {
333         ManagedRepositoryConfiguration r = new ManagedRepositoryConfiguration();
334         r.setId( REPO_ID );
335         populateRepository( r );
336         return r;
337     }
338
339     private void populateRepository( ManagedRepositoryConfiguration repository )
340     {
341         repository.setId( REPO_ID );
342         repository.setName( "repo name" );
343         repository.setLocation( location.getAbsolutePath() );
344         repository.setLayout( "default" );
345         repository.setRefreshCronExpression( "* 0/5 * * * ?" );
346         repository.setDaysOlder( 31 );
347         repository.setRetentionCount( 20 );
348         repository.setReleases( true );
349         repository.setSnapshots( true );
350         repository.setIndexed( true );
351         repository.setDeleteReleasedSnapshots( true );
352     }
353
354     // TODO: test errors during add, other actions
355     // TODO: what if there are proxy connectors attached to a deleted repository?
356     // TODO: what about removing proxied content if a proxy is removed?
357 }