]> source.dussan.org Git - archiva.git/blob
9ac59722c2d75d44ac0757112262b712fcc8b60c
[archiva.git] /
1 package org.apache.archiva.web.action.admin.connectors.proxy;
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 org.apache.archiva.admin.model.beans.ProxyConnector;
24 import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin;
25 import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin;
26 import org.apache.archiva.admin.repository.remote.DefaultRemoteRepositoryAdmin;
27 import org.apache.archiva.configuration.ArchivaConfiguration;
28 import org.apache.archiva.configuration.Configuration;
29 import org.apache.archiva.configuration.IndeterminateConfigurationException;
30 import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
31 import org.apache.archiva.configuration.ProxyConnectorConfiguration;
32 import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
33 import org.apache.archiva.policies.CachedFailuresPolicy;
34 import org.apache.archiva.policies.ChecksumPolicy;
35 import org.apache.archiva.policies.PropagateErrorsDownloadPolicy;
36 import org.apache.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy;
37 import org.apache.archiva.policies.ReleasesPolicy;
38 import org.apache.archiva.policies.SnapshotsPolicy;
39 import org.apache.archiva.web.action.AbstractWebworkTestCase;
40 import org.apache.archiva.redback.integration.interceptor.SecureActionBundle;
41 import org.easymock.MockControl;
42
43 import java.util.List;
44 import java.util.Map;
45 import org.junit.Before;
46 import org.junit.Test;
47
48 /**
49  * AddProxyConnectorActionTest
50  *
51  * @version $Id$
52  */
53 public class AddProxyConnectorActionTest
54     extends AbstractWebworkTestCase
55 {
56     private AddProxyConnectorAction action;
57
58     private MockControl archivaConfigurationControl;
59
60     private ArchivaConfiguration archivaConfiguration;
61
62     @Override
63     @Before
64     public void setUp()
65         throws Exception
66     {
67         super.setUp();
68
69         action = (AddProxyConnectorAction) getActionProxy( "/admin/addProxyConnector.action" ).getAction();
70
71         archivaConfigurationControl = MockControl.createControl( ArchivaConfiguration.class );
72         archivaConfiguration = (ArchivaConfiguration) archivaConfigurationControl.getMock();
73         ( (DefaultManagedRepositoryAdmin) action.getManagedRepositoryAdmin() ).setArchivaConfiguration(
74             archivaConfiguration );
75         ( (DefaultRemoteRepositoryAdmin) action.getRemoteRepositoryAdmin() ).setArchivaConfiguration(
76             archivaConfiguration );
77         ( (DefaultProxyConnectorAdmin) action.getProxyConnectorAdmin() ).setArchivaConfiguration(
78             archivaConfiguration );
79     }
80
81     @Test
82     public void testAddBlackListPattern()
83         throws Exception
84     {
85         expectConfigurationRequests( 7 );
86         archivaConfigurationControl.replay();
87
88         // Prepare Test.
89         action.prepare();
90         ProxyConnector connector = action.getConnector();
91         populateProxyConnector( connector );
92
93         // Perform Test w/no values.
94         preRequest( action );
95         String status = action.addBlackListPattern();
96         assertEquals( Action.INPUT, status );
97
98         // Should have returned an error, with no blacklist pattern added.
99         assertHasErrors( action );
100         assertEquals( 0, connector.getBlackListPatterns().size() );
101
102         // Try again, but now with a pattern to add.
103         action.setBlackListPattern( "**/*-javadoc.jar" );
104         preRequest( action );
105         status = action.addBlackListPattern();
106         assertEquals( Action.INPUT, status );
107
108         // Should have no error, and 1 blacklist pattern added.
109         assertNoErrors( action );
110         assertEquals( 1, connector.getBlackListPatterns().size() );
111     }
112
113     @Test
114     public void testAddProperty()
115         throws Exception
116     {
117         expectConfigurationRequests( 7 );
118         archivaConfigurationControl.replay();
119
120         // Prepare Test.
121         action.prepare();
122         ProxyConnector connector = action.getConnector();
123         populateProxyConnector( connector );
124
125         // Perform Test w/no values.
126         preRequest( action );
127         String status = action.addProperty();
128         assertEquals( Action.INPUT, status );
129
130         // Should have returned an error, with no property pattern added.
131         assertHasErrors( action );
132         assertEquals( 0, connector.getProperties().size() );
133
134         // Try again, but now with a property key/value to add.
135         action.setPropertyKey( "eat-a" );
136         action.setPropertyValue( "gramov-a-bits" );
137         preRequest( action );
138         status = action.addProperty();
139         assertEquals( Action.INPUT, status );
140
141         // Should have no error, and 1 property added.
142         assertNoErrors( action );
143         assertEquals( 1, connector.getProperties().size() );
144     }
145
146     @SuppressWarnings( "unchecked" )
147     @Test
148     public void testAddProxyConnectorCommit()
149         throws Exception
150     {
151         expectConfigurationRequests( 9 );
152         archivaConfigurationControl.replay();
153
154         // Prepare Test.
155         action.prepare();
156         ProxyConnector connector = action.getConnector();
157         populateProxyConnector( connector );
158         // forms will use an array
159         //connector.getProperties().put( "eat-a", new String[] { "gramov-a-bits" } );
160         // FIXME olamy check the array mode !!!
161         connector.getProperties().put( "eat-a", "gramov-a-bits" );
162
163         // Create the input screen.
164         assertRequestStatus( action, Action.SUCCESS, "commit" );
165         assertNoErrors( action );
166
167         // Test configuration.
168         List<ProxyConnectorConfiguration> proxyConfigs = archivaConfiguration.getConfiguration().getProxyConnectors();
169         assertNotNull( proxyConfigs );
170         assertEquals( 1, proxyConfigs.size() );
171
172         ProxyConnectorConfiguration actualConnector = proxyConfigs.get( 0 );
173
174         assertNotNull( actualConnector );
175         // The use of "(direct connection)" should result in a proxyId which is <null>.
176         assertNull( actualConnector.getProxyId() );
177         assertEquals( "corporate", actualConnector.getSourceRepoId() );
178         assertEquals( "central", actualConnector.getTargetRepoId() );
179         assertEquals( "gramov-a-bits", actualConnector.getProperties().get( "eat-a" ) );
180     }
181
182     @Test
183     public void testAddProxyConnectorInitialPage()
184         throws Exception
185     {
186         expectConfigurationRequests( 3 );
187         archivaConfigurationControl.replay();
188
189         action.prepare();
190         ProxyConnector configuration = action.getConnector();
191         assertNotNull( configuration );
192         assertNull( configuration.getProxyId() );
193         assertNull( configuration.getSourceRepoId() );
194         assertNull( configuration.getTargetRepoId() );
195         assertTrue( configuration.getPolicies().isEmpty() );
196         assertTrue( configuration.getProperties().isEmpty() );
197         assertTrue( configuration.getBlackListPatterns().isEmpty() );
198         assertTrue( configuration.getWhiteListPatterns().isEmpty() );
199
200         String status = action.input();
201         assertEquals( Action.INPUT, status );
202     }
203
204     @Test
205     public void testAddWhiteListPattern()
206         throws Exception
207     {
208         expectConfigurationRequests( 7 );
209         archivaConfigurationControl.replay();
210
211         // Prepare Test.
212         action.prepare();
213         ProxyConnector connector = action.getConnector();
214         populateProxyConnector( connector );
215
216         // Perform Test w/no values.
217         preRequest( action );
218         String status = action.addWhiteListPattern();
219         assertEquals( Action.INPUT, status );
220
221         // Should have returned an error, with no whitelist pattern added.
222         assertHasErrors( action );
223         assertEquals( 0, connector.getWhiteListPatterns().size() );
224
225         // Try again, but now with a pattern to add.
226         action.setWhiteListPattern( "**/*.jar" );
227         preRequest( action );
228         status = action.addWhiteListPattern();
229         assertEquals( Action.INPUT, status );
230
231         // Should have no error, and 1 whitelist pattern added.
232         assertNoErrors( action );
233         assertEquals( 1, connector.getWhiteListPatterns().size() );
234     }
235
236     @Test
237     public void testRemoveBlackListPattern()
238         throws Exception
239     {
240         expectConfigurationRequests( 7 );
241         archivaConfigurationControl.replay();
242
243         // Prepare Test.
244         action.prepare();
245         ProxyConnector connector = action.getConnector();
246         populateProxyConnector( connector );
247
248         // Add some arbitrary blacklist patterns.
249         connector.addBlackListPattern( "**/*-javadoc.jar" );
250         connector.addBlackListPattern( "**/*.war" );
251
252         // Perform Test w/no pattern value.
253         preRequest( action );
254         String status = action.removeBlackListPattern();
255         assertEquals( Action.INPUT, status );
256
257         // Should have returned an error, with no blacklist pattern removed.
258         assertHasErrors( action );
259         assertEquals( 2, connector.getBlackListPatterns().size() );
260
261         // Perform test w/invalid (non-existant) pattern value to remove.
262         preRequest( action );
263         action.setPattern( "**/*oops*" );
264         status = action.removeBlackListPattern();
265         assertEquals( Action.INPUT, status );
266
267         // Should have returned an error, with no blacklist pattern removed.
268         assertHasErrors( action );
269         assertEquals( 2, connector.getBlackListPatterns().size() );
270
271         // Try again, but now with a valid pattern to remove.
272         action.setPattern( "**/*-javadoc.jar" );
273         preRequest( action );
274         status = action.removeBlackListPattern();
275         assertEquals( Action.INPUT, status );
276
277         // Should have no error, and 1 blacklist pattern left.
278         assertNoErrors( action );
279         assertEquals( 1, connector.getBlackListPatterns().size() );
280         assertEquals( "Should have left 1 blacklist pattern", "**/*.war", connector.getBlackListPatterns().get( 0 ) );
281     }
282
283     @Test
284     public void testRemoveProperty()
285         throws Exception
286     {
287         expectConfigurationRequests( 7 );
288         archivaConfigurationControl.replay();
289
290         // Prepare Test.
291         action.prepare();
292         ProxyConnector connector = action.getConnector();
293         populateProxyConnector( connector );
294
295         // Add some arbitrary properties.
296         connector.addProperty( "username", "general-tso" );
297         connector.addProperty( "password", "chicken" );
298
299         // Perform Test w/no property key.
300         preRequest( action );
301         String status = action.removeProperty();
302         assertEquals( Action.INPUT, status );
303
304         // Should have returned an error, with no properties removed.
305         assertHasErrors( action );
306         assertEquals( 2, connector.getProperties().size() );
307
308         // Perform test w/invalid (non-existant) property key to remove.
309         preRequest( action );
310         action.setPropertyKey( "slurm" );
311         status = action.removeProperty();
312         assertEquals( Action.INPUT, status );
313
314         // Should have returned an error, with no properties removed.
315         assertHasErrors( action );
316         assertEquals( 2, connector.getProperties().size() );
317
318         // Try again, but now with a valid property to remove.
319         preRequest( action );
320         action.setPropertyKey( "password" );
321         status = action.removeProperty();
322         assertEquals( Action.INPUT, status );
323
324         // Should have no error, and 1 property left.
325         assertNoErrors( action );
326         assertEquals( 1, connector.getProperties().size() );
327         assertEquals( "Should have left 1 property", "general-tso", connector.getProperties().get( "username" ) );
328     }
329
330     @Test
331     public void testRemoveWhiteListPattern()
332         throws Exception
333     {
334         expectConfigurationRequests( 7 );
335         archivaConfigurationControl.replay();
336
337         // Prepare Test.
338         action.prepare();
339         ProxyConnector connector = action.getConnector();
340         populateProxyConnector( connector );
341
342         // Add some arbitrary whitelist patterns.
343         connector.addWhiteListPattern( "javax/**/*" );
344         connector.addWhiteListPattern( "com/sun/**/*" );
345
346         // Perform Test w/no pattern value.
347         preRequest( action );
348         String status = action.removeWhiteListPattern();
349         assertEquals( Action.INPUT, status );
350
351         // Should have returned an error, with no whitelist pattern removed.
352         assertHasErrors( action );
353         assertEquals( 2, connector.getWhiteListPatterns().size() );
354
355         // Perform test w/invalid (non-existant) pattern value to remove.
356         preRequest( action );
357         action.setPattern( "**/*oops*" );
358         status = action.removeWhiteListPattern();
359         assertEquals( Action.INPUT, status );
360
361         // Should have returned an error, with no whitelist pattern removed.
362         assertHasErrors( action );
363         assertEquals( 2, connector.getWhiteListPatterns().size() );
364
365         // Try again, but now with a valid pattern to remove.
366         action.setPattern( "com/sun/**/*" );
367         preRequest( action );
368         status = action.removeWhiteListPattern();
369         assertEquals( Action.INPUT, status );
370
371         // Should have no error, and 1 whitelist pattern left.
372         assertNoErrors( action );
373         assertEquals( 1, connector.getWhiteListPatterns().size() );
374         assertEquals( "Should have left 1 whitelist pattern", "javax/**/*", connector.getWhiteListPatterns().get( 0 ) );
375     }
376
377     @Test
378     public void testSecureActionBundle()
379         throws Exception
380     {
381         expectConfigurationRequests( 3 );
382         archivaConfigurationControl.replay();
383
384         action.prepare();
385         SecureActionBundle bundle = action.getSecureActionBundle();
386         assertTrue( bundle.requiresAuthentication() );
387         assertEquals( 1, bundle.getAuthorizationTuples().size() );
388     }
389
390     private Configuration createInitialConfiguration()
391     {
392         Configuration config = new Configuration();
393
394         ManagedRepositoryConfiguration managedRepo = new ManagedRepositoryConfiguration();
395         managedRepo.setId( "corporate" );
396         managedRepo.setLayout( "${java.io.tmpdir}/archiva-test/managed-repo" );
397         managedRepo.setReleases( true );
398
399         config.addManagedRepository( managedRepo );
400
401         RemoteRepositoryConfiguration remoteRepo = new RemoteRepositoryConfiguration();
402         remoteRepo.setId( "central" );
403         remoteRepo.setUrl( "http://repo1.maven.org/maven2/" );
404
405         config.addRemoteRepository( remoteRepo );
406
407         return config;
408     }
409
410     private void expectConfigurationRequests( int requestConfigCount )
411         throws org.apache.archiva.redback.components.registry.RegistryException, IndeterminateConfigurationException
412     {
413         Configuration config = createInitialConfiguration();
414         archivaConfiguration.getConfiguration();
415         archivaConfigurationControl.setReturnValue( config, requestConfigCount, requestConfigCount + 1 );
416         archivaConfiguration.save( config );
417     }
418
419     @SuppressWarnings( "unchecked" )
420     private void populateProxyConnector( ProxyConnector connector )
421     {
422         connector.setProxyId( AbstractProxyConnectorFormAction.DIRECT_CONNECTION );
423         connector.setSourceRepoId( "corporate" );
424         connector.setTargetRepoId( "central" );
425
426         // TODO: Set these options programatically via list of available policies.
427         Map<String, String> policies = connector.getPolicies();
428         policies.put( "releases", new ReleasesPolicy().getDefaultOption() );
429         policies.put( "snapshots", new SnapshotsPolicy().getDefaultOption() );
430         policies.put( "checksum", new ChecksumPolicy().getDefaultOption() );
431         policies.put( "cache-failures", new CachedFailuresPolicy().getDefaultOption() );
432         policies.put( "propagate-errors", new PropagateErrorsDownloadPolicy().getDefaultOption() );
433         policies.put( "propagate-errors-on-update", new PropagateErrorsOnUpdateDownloadPolicy().getDefaultOption() );
434     }
435
436
437 }