]> source.dussan.org Git - archiva.git/blob
ba85a0343479d6f13a04b6c4671b07b43996d390
[archiva.git] /
1 package org.apache.maven.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 java.util.ArrayList;
23 import java.util.List;
24
25 import org.apache.archiva.indexer.search.RepositorySearch;
26 import org.apache.archiva.indexer.search.SearchFields;
27 import org.apache.archiva.indexer.search.SearchResultHit;
28 import org.apache.archiva.indexer.search.SearchResultLimits;
29 import org.apache.archiva.indexer.search.SearchResults;
30 import org.apache.archiva.indexer.util.SearchUtil;
31 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
32 import org.apache.maven.archiva.database.ArchivaDAO;
33 import org.apache.maven.archiva.database.ArtifactDAO;
34 import org.apache.maven.archiva.database.constraints.ArtifactsByChecksumConstraint;
35 import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint;
36 import org.apache.maven.archiva.model.ArchivaArtifact;
37 import org.apache.maven.archiva.security.UserRepositories;
38 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
39 import org.easymock.MockControl;
40
41 import com.opensymphony.xwork2.Action;
42
43 /**
44  * 
45  */
46 public class SearchActionTest
47     extends PlexusInSpringTestCase 
48 {
49     private SearchAction action;
50     
51     private MockControl archivaConfigControl;
52     
53     private ArchivaConfiguration archivaConfig;
54     
55     private MockControl daoControl;
56     
57     private ArchivaDAO dao;
58     
59     private MockControl userReposControl;
60     
61     private UserRepositories userRepos;
62     
63     private MockControl searchControl;
64     
65     private RepositorySearch search;
66     
67     private MockControl artifactDaoControl;
68     
69     private ArtifactDAO artifactDao;
70     
71     @Override
72     protected void setUp() 
73         throws Exception
74     {
75         super.setUp();
76         
77         action = new SearchAction();
78         
79         archivaConfigControl = MockControl.createControl( ArchivaConfiguration.class );        
80         archivaConfig = ( ArchivaConfiguration ) archivaConfigControl.getMock();
81         
82         daoControl = MockControl.createControl( ArchivaDAO.class );
83         daoControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );        
84         dao = ( ArchivaDAO ) daoControl.getMock();
85         
86         userReposControl = MockControl.createControl( UserRepositories.class );        
87         userRepos = ( UserRepositories ) userReposControl.getMock();
88         
89         searchControl = MockControl.createControl( RepositorySearch.class );
90         searchControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
91         search = ( RepositorySearch ) searchControl.getMock();
92         
93         artifactDaoControl = MockControl.createControl( ArtifactDAO.class );
94         artifactDaoControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
95         artifactDao = ( ArtifactDAO ) artifactDaoControl.getMock();
96                 
97         action.setArchivaConfiguration( archivaConfig );
98         action.setUserRepositories( userRepos );
99         action.setDao( dao );
100         action.setNexusSearch( search );
101     }
102     
103     @Override
104     protected void tearDown()
105         throws Exception
106     {
107         super.tearDown();
108     }
109     
110     // quick search...
111     
112     public void testQuickSearch()
113         throws Exception
114     {           
115         action.setQ( "archiva" );
116         action.setCurrentPage( 0 );
117         action.setSearchResultsOnly( false );
118         action.setCompleteQueryString( "" );
119         
120         List<String> selectedRepos = new ArrayList<String>();
121         selectedRepos.add( "internal" );
122         selectedRepos.add( "snapshots" );
123         
124         SearchResultLimits limits = new SearchResultLimits( action.getCurrentPage() );
125         limits.setPageSize( 30 );
126         
127         SearchResultHit hit = new SearchResultHit();
128         hit.setGroupId( "org.apache.archiva" );
129         hit.setArtifactId( "archiva-configuration" );
130         hit.setUrl( "url" );
131         hit.addVersion( "1.0" );
132         hit.addVersion( "1.1" );        
133         
134         SearchResults results = new SearchResults();
135         results.setLimits( limits );
136         results.setTotalHits( 1 );
137         results.addHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-configuration" ), hit );
138         
139         List<String> versions = new ArrayList<String>();
140         versions.add( "1.0" );
141         versions.add( "1.1" );
142         
143         userReposControl.expectAndReturn( userRepos.getObservableRepositoryIds( "user" ), selectedRepos, 2 );
144         
145         searchControl.expectAndReturn( search.search( "user", selectedRepos, "archiva", limits, null ), results );
146                 
147         daoControl.expectAndReturn( dao.query( new UniqueVersionConstraint( selectedRepos, hit.getGroupId(), hit.getArtifactId() ) ), versions );
148                 
149         userReposControl.replay();
150         searchControl.replay();
151         daoControl.replay();
152         
153         String result = action.quickSearch();
154         
155         assertEquals( Action.SUCCESS, result );      
156         assertEquals( 1, action.getTotalPages() );
157         assertEquals( 1, action.getResults().getTotalHits() );
158         
159         userReposControl.verify();
160         searchControl.verify();
161         daoControl.verify();
162     }
163
164     public void testSearchWithinSearchResults()
165         throws Exception
166     {
167         action.setQ( "archiva" );
168         action.setCurrentPage( 0 );
169         action.setSearchResultsOnly( true );
170         action.setCompleteQueryString( "org;apache" );
171         
172         List<String> parsed = new ArrayList<String>();
173         parsed.add( "org" );
174         parsed.add( "apache" );
175         
176         List<String> selectedRepos = new ArrayList<String>();
177         selectedRepos.add( "internal" );
178         selectedRepos.add( "snapshots" );
179         
180         SearchResultLimits limits = new SearchResultLimits( action.getCurrentPage() );
181         limits.setPageSize( 30 );
182         
183         SearchResultHit hit = new SearchResultHit();
184         hit.setGroupId( "org.apache.archiva" );
185         hit.setArtifactId( "archiva-configuration" );
186         hit.setUrl( "url" );
187         hit.addVersion( "1.0" );
188         hit.addVersion( "1.1" );        
189         
190         SearchResults results = new SearchResults();
191         results.setLimits( limits );
192         results.setTotalHits( 1 );
193         results.addHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-configuration" ), hit );
194         
195         List<String> versions = new ArrayList<String>();
196         versions.add( "1.0" );
197         versions.add( "1.1" );
198         
199         userReposControl.expectAndReturn( userRepos.getObservableRepositoryIds( "user" ), selectedRepos, 2 );
200         
201         searchControl.expectAndReturn( search.search( "user", selectedRepos, "archiva", limits, parsed ), results );
202                 
203         daoControl.expectAndReturn( dao.query( new UniqueVersionConstraint( selectedRepos, hit.getGroupId(), hit.getArtifactId() ) ), versions );
204                 
205         userReposControl.replay();
206         searchControl.replay();
207         daoControl.replay();
208         
209         String result = action.quickSearch();
210         
211         assertEquals( Action.SUCCESS, result );
212         assertEquals( "org;apache;archiva", action.getCompleteQueryString() );
213         assertEquals( 1, action.getTotalPages() );
214         assertEquals( 1, action.getResults().getTotalHits() );
215         
216         userReposControl.verify();
217         searchControl.verify();
218         daoControl.verify();
219     }        
220     
221     public void testQuickSearchUserHasNoAccessToAnyRepository()
222         throws Exception
223     {
224         action.setQ( "archiva" );
225         action.setCurrentPage( 0 );
226         
227         List<String> selectedRepos = new ArrayList<String>();
228         
229         userReposControl.expectAndReturn( userRepos.getObservableRepositoryIds( "user" ), selectedRepos );
230         
231         userReposControl.replay();
232         
233         String result = action.quickSearch();
234         
235         assertEquals( GlobalResults.ACCESS_TO_NO_REPOS, result );        
236         
237         userReposControl.verify();        
238     }
239     
240     public void testQuickSearchNoSearchHits()
241         throws Exception
242     {
243         action.setQ( "archiva" );
244         action.setCurrentPage( 0 );
245         action.setSearchResultsOnly( false );
246         action.setCompleteQueryString( "" );
247         
248         List<String> selectedRepos = new ArrayList<String>();
249         selectedRepos.add( "internal" );
250         selectedRepos.add( "snapshots" );
251         
252         SearchResultLimits limits = new SearchResultLimits( action.getCurrentPage() );
253         limits.setPageSize( 30 );
254                 
255         SearchResults results = new SearchResults();
256         
257         userReposControl.expectAndReturn( userRepos.getObservableRepositoryIds( "user" ), selectedRepos );
258         
259         searchControl.expectAndReturn( search.search( "user", selectedRepos, "archiva", limits, null ), results );
260         
261         userReposControl.replay();
262         searchControl.replay();
263         
264         String result = action.quickSearch();
265         
266         assertEquals( Action.INPUT, result );        
267         
268         userReposControl.verify();
269         searchControl.verify();
270     }
271         
272     // advanced/filtered search...
273     
274     public void testAdvancedSearchOneRepository()
275         throws Exception
276     {
277         List<String> managedRepos = new ArrayList<String>();
278         managedRepos.add( "internal" );
279         managedRepos.add( "snapshots" );
280         
281         action.setRepositoryId( "internal" );
282         action.setManagedRepositoryList( managedRepos );
283         action.setCurrentPage( 0 );
284         action.setRowCount( 30 );
285         action.setGroupId( "org" );
286         
287         SearchResultLimits limits = new SearchResultLimits( action.getCurrentPage() );
288         limits.setPageSize( 30 );
289         
290         SearchResultHit hit = new SearchResultHit();
291         hit.setGroupId( "org.apache.archiva" );
292         hit.setArtifactId( "archiva-configuration" );
293         hit.setUrl( "url" );
294         hit.addVersion( "1.0" );
295         hit.addVersion( "1.1" );        
296         
297         SearchResults results = new SearchResults();
298         results.setLimits( limits );
299         results.setTotalHits( 1 );
300         results.addHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-configuration" ), hit );
301         
302         List<String> selectedRepos = new ArrayList<String>();
303         selectedRepos.add( "internal" );
304         selectedRepos.add( "snapshots" );
305         
306         SearchFields searchFields = new SearchFields( "org", null, null, null, null, selectedRepos );
307         
308         searchControl.expectAndReturn( search.search( "user", searchFields, limits ), results );
309         
310         searchControl.replay();
311         
312         String result = action.filteredSearch();
313         
314         assertEquals( Action.SUCCESS, result );
315         assertEquals( 1, action.getTotalPages() );
316         assertEquals( 1, action.getResults().getTotalHits() );
317         
318         searchControl.verify();
319     }
320     
321     public void testAdvancedSearchAllRepositories()
322         throws Exception
323     {   
324         List<String> managedRepos = new ArrayList<String>();
325         managedRepos.add( "internal" );
326         managedRepos.add( "snapshots" );
327         
328         action.setRepositoryId( "all" );
329         action.setManagedRepositoryList( managedRepos );
330         action.setCurrentPage( 0 );
331         action.setRowCount( 30 );
332         action.setGroupId( "org" );
333         
334         SearchResultLimits limits = new SearchResultLimits( action.getCurrentPage() );
335         limits.setPageSize( 30 );
336         
337         SearchResultHit hit = new SearchResultHit();
338         hit.setGroupId( "org.apache.archiva" );
339         hit.setArtifactId( "archiva-configuration" );
340         hit.setUrl( "url" );
341         hit.addVersion( "1.0" );
342         hit.addVersion( "1.1" );        
343         
344         SearchResults results = new SearchResults();
345         results.setLimits( limits );
346         results.setTotalHits( 1 );
347         results.addHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-configuration" ), hit );
348         
349         List<String> selectedRepos = new ArrayList<String>();
350         selectedRepos.add( "internal" );
351         
352         SearchFields searchFields = new SearchFields( "org", null, null, null, null, selectedRepos );
353         
354         userReposControl.expectAndReturn( userRepos.getObservableRepositoryIds( "user" ), selectedRepos );
355         
356         searchControl.expectAndReturn( search.search( "user", searchFields, limits ), results );
357         
358         searchControl.replay();
359         userReposControl.replay();
360         
361         String result = action.filteredSearch();
362         
363         assertEquals( Action.SUCCESS, result );
364         assertEquals( 1, action.getTotalPages() );
365         assertEquals( 1, action.getResults().getTotalHits() );
366         
367         searchControl.verify();
368         userReposControl.verify();
369     }
370         
371     public void testAdvancedSearchNoSearchHits()
372         throws Exception
373     {
374         List<String> managedRepos = new ArrayList<String>();
375         managedRepos.add( "internal" );
376         managedRepos.add( "snapshots" );
377         
378         action.setRepositoryId( "internal" );
379         action.setManagedRepositoryList( managedRepos );
380         action.setCurrentPage( 0 );
381         action.setRowCount( 30 );
382         action.setGroupId( "org" );
383         
384         SearchResultLimits limits = new SearchResultLimits( action.getCurrentPage() );
385         limits.setPageSize( 30 );
386                 
387         SearchResults results = new SearchResults();
388         
389         List<String> selectedRepos = new ArrayList<String>();
390         selectedRepos.add( "internal" );
391         selectedRepos.add( "snapshots" );
392         
393         SearchFields searchFields = new SearchFields( "org", null, null, null, null, selectedRepos );
394         
395         searchControl.expectAndReturn( search.search( "user", searchFields, limits ), results );
396         
397         searchControl.replay();
398         
399         String result = action.filteredSearch();
400         
401         assertEquals( Action.INPUT, result );
402         assertFalse( action.getActionErrors().isEmpty() );
403         assertEquals( "No results found",( String ) action.getActionErrors().iterator().next() );
404         
405         searchControl.verify();
406     }
407     
408     public void testAdvancedSearchUserHasNoAccessToAnyRepository()
409         throws Exception
410     {
411         List<String> managedRepos = new ArrayList<String>();
412         
413         action.setGroupId( "org.apache.archiva" );
414         action.setManagedRepositoryList( managedRepos );
415         
416         String result = action.filteredSearch();
417         
418         assertEquals( GlobalResults.ACCESS_TO_NO_REPOS, result );
419     }
420     
421     public void testAdvancedSearchNoSpecifiedCriteria()
422         throws Exception
423     {
424         List<String> managedRepos = new ArrayList<String>();
425         
426         action.setManagedRepositoryList( managedRepos );
427         
428         String result = action.filteredSearch();
429         
430         assertEquals( Action.INPUT, result );
431         assertFalse( action.getActionErrors().isEmpty() );
432         assertEquals( "Advanced Search - At least one search criteria must be provided.",
433                       (String) action.getActionErrors().iterator().next() );
434     }
435     
436     // find artifact..
437     
438     public void testFindArtifactWithOneHit()
439         throws Exception
440     {
441         action.setQ( "afbcdeaadbcffceabbba1" );
442         
443         List<ArchivaArtifact> dbResults = new ArrayList<ArchivaArtifact>();
444         dbResults.add( new ArchivaArtifact( "org.apache.archiva", "archiva-configuration", "1.0",
445                                            null, "jar", "test-repo" ) );
446         
447         daoControl.expectAndReturn( dao.getArtifactDAO(), artifactDao );
448         
449         artifactDaoControl.expectAndReturn( artifactDao.queryArtifacts( new ArtifactsByChecksumConstraint( action.getQ() ) ), dbResults );
450         
451         daoControl.replay();
452         artifactDaoControl.replay();
453         
454         String result = action.findArtifact();
455         assertEquals( "artifact", result );
456         assertFalse( action.getDatabaseResults().isEmpty() );
457         assertEquals( 1, action.getDatabaseResults().size() );
458         
459         daoControl.verify();
460         artifactDaoControl.verify();
461     }
462         
463     public void testFindArtifactWithMultipleHits()
464         throws Exception
465     {
466         action.setQ( "afbcdeaadbcffceabbba1" );
467         
468         List<ArchivaArtifact> dbResults = new ArrayList<ArchivaArtifact>();
469         dbResults.add( new ArchivaArtifact( "org.apache.archiva", "archiva-configuration", "1.0",
470                                            null, "jar", "test-repo" ) );
471         dbResults.add( new ArchivaArtifact( "org.apache.archiva", "archiva-indexer", "1.0",
472                                             null, "jar", "test-repo" ) );
473         
474         daoControl.expectAndReturn( dao.getArtifactDAO(), artifactDao );
475         
476         artifactDaoControl.expectAndReturn( artifactDao.queryArtifacts( new ArtifactsByChecksumConstraint( action.getQ() ) ), dbResults );
477         
478         daoControl.replay();
479         artifactDaoControl.replay();
480         
481         String result = action.findArtifact();
482         assertEquals( "results", result );
483         assertFalse( action.getDatabaseResults().isEmpty() );
484         assertEquals( 2, action.getDatabaseResults().size() );
485         
486         daoControl.verify();
487         artifactDaoControl.verify();
488     }
489     
490     public void testFindArtifactNoChecksumSpecified()
491         throws Exception
492     {
493         String result = action.findArtifact();
494         
495         assertEquals( Action.INPUT, result );
496         assertFalse( action.getActionErrors().isEmpty() );
497         assertEquals( "Unable to search for a blank checksum", ( String ) action.getActionErrors().iterator().next() );
498     }
499     
500     public void testFindArtifactNoResults()
501         throws Exception
502     {
503         action.setQ( "afbcdeaadbcffceabbba1" );
504         
505         List<ArchivaArtifact> dbResults = new ArrayList<ArchivaArtifact>();
506         
507         daoControl.expectAndReturn( dao.getArtifactDAO(), artifactDao );
508         
509         artifactDaoControl.expectAndReturn( artifactDao.queryArtifacts( new ArtifactsByChecksumConstraint( action.getQ() ) ), dbResults );
510         
511         daoControl.replay();
512         artifactDaoControl.replay();
513         
514         String result = action.findArtifact();
515         assertEquals( Action.INPUT, result );
516         assertFalse( action.getActionErrors().isEmpty() );
517         assertEquals( "No results found", ( String )action.getActionErrors().iterator().next() );
518         
519         daoControl.verify();
520         artifactDaoControl.verify();
521     }
522 }