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