]> source.dussan.org Git - archiva.git/blob
87b4ff1cad50c9eb039a64c1df7f1bab90db2ac2
[archiva.git] /
1 package org.apache.archiva.indexer.search;
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 org.apache.archiva.common.utils.FileUtil;
23 import org.apache.archiva.indexer.util.SearchUtil;
24 import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
25 import org.codehaus.plexus.util.FileUtils;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.springframework.test.context.ContextConfiguration;
29
30 import java.io.File;
31 import java.util.ArrayList;
32 import java.util.Arrays;
33 import java.util.Collection;
34 import java.util.Collections;
35 import java.util.List;
36
37
38 @RunWith ( ArchivaSpringJUnit4ClassRunner.class )
39 @ContextConfiguration ( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
40 public class MavenRepositorySearchTest
41     extends AbstractMavenRepositorySearch
42 {
43
44
45     private void createSimpleIndex( boolean scan )
46         throws Exception
47     {
48         List<File> files = new ArrayList<File>();
49         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
50             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
51         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
52             + "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ) );
53         files.add( new File( FileUtil.getBasedir(), "/src/test/" + TEST_REPO_1
54             + "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) );
55
56         createIndex( TEST_REPO_1, files, scan );
57     }
58
59     private void createIndexContainingMoreArtifacts( boolean scan )
60         throws Exception
61     {
62         List<File> files = new ArrayList<File>();
63         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
64             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
65         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
66             + "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ) );
67         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
68             + "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) );
69         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
70             + "/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war" ) );
71         files.add( new File( FileUtil.getBasedir(),
72                              "src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
73         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
74             + "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
75         files.add( new File( FileUtil.getBasedir(),
76                              "src/test/" + TEST_REPO_1 + "/com/classname-search/1.0/classname-search-1.0.jar" ) );
77
78         createIndex( TEST_REPO_1, files, scan );
79     }
80
81     private void createIndexContainingMultipleArtifactsSameVersion( boolean scan )
82         throws Exception
83     {
84         List<File> files = new ArrayList<File>();
85
86         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
87             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
88
89         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
90             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom" ) );
91
92         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
93             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar" ) );
94
95         createIndex( TEST_REPO_1, files, scan );
96     }
97
98     @Test
99     public void testQuickSearch()
100         throws Exception
101     {
102         createSimpleIndex( false );
103
104         List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
105
106         // search artifactId
107         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
108
109         archivaConfigControl.replay();
110
111         SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
112
113         archivaConfigControl.verify();
114
115         assertNotNull( results );
116
117         SearchResultHit hit =
118             results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
119         assertNotNull( "hit null in result " + results.getHits(), hit );
120         assertEquals( "org.apache.archiva", hit.getGroupId() );
121         assertEquals( "archiva-search", hit.getArtifactId() );
122         assertEquals( "1.0", hit.getVersions().get( 0 ) );
123
124         archivaConfigControl.reset();
125
126         // search groupId
127         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
128
129         archivaConfigControl.replay();
130
131         results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
132
133         archivaConfigControl.verify();
134
135         assertNotNull( results );
136         assertEquals( "total hints not 3", 3, results.getTotalHits() );
137
138         //TODO: search for class & package names
139     }
140
141     @Test
142     public void testQuickSearchNotWithClassifier()
143         throws Exception
144     {
145         createSimpleIndex( true );
146
147         List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
148
149         // search artifactId
150         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
151
152         archivaConfigControl.replay();
153
154         SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
155
156         archivaConfigControl.verify();
157
158         assertNotNull( results );
159
160         SearchResultHit hit =
161             results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
162         assertNotNull( "hit null in result " + results.getHits(), hit );
163         assertEquals( "org.apache.archiva", hit.getGroupId() );
164         assertEquals( "archiva-search", hit.getArtifactId() );
165         assertEquals( "1.0", hit.getVersions().get( 0 ) );
166
167         archivaConfigControl.reset();
168
169         // search groupId
170         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
171
172         archivaConfigControl.replay();
173
174         results = search.search( "user", selectedRepos, "archiva-search", null, null );
175
176         archivaConfigControl.verify();
177
178         assertNotNull( results );
179         assertEquals( "total hints not 3 hits " + results.getHits(), 3, results.getTotalHits() );
180
181         //TODO: search for class & package names
182     }
183
184     @Test
185     public void testQuickSearchMultipleArtifactsSameVersion()
186         throws Exception
187     {
188         createIndexContainingMultipleArtifactsSameVersion( false );
189
190         List<String> selectedRepos = new ArrayList<String>();
191         selectedRepos.add( TEST_REPO_1 );
192
193         // search artifactId
194         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
195
196         archivaConfigControl.replay();
197
198         SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
199
200         archivaConfigControl.verify();
201
202         assertNotNull( results );
203         assertEquals( 2, results.getTotalHits() );
204
205         SearchResultHit hit = results.getHits().get( 0 );
206         assertEquals( "org.apache.archiva", hit.getGroupId() );
207         assertEquals( "archiva-search", hit.getArtifactId() );
208         assertEquals( "1.0", hit.getVersions().get( 0 ) );
209
210         //only 1 version of 1.0 is retrieved
211         assertEquals( 1, hit.getVersions().size() );
212     }
213
214     @Test
215     public void testMultipleArtifactsSameVersionWithClassifier()
216         throws Exception
217     {
218         createIndexContainingMultipleArtifactsSameVersion( true );
219
220         List<String> selectedRepos = new ArrayList<String>();
221         selectedRepos.add( TEST_REPO_1 );
222
223         // search artifactId
224         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
225
226         archivaConfigControl.replay();
227
228         SearchFields searchFields = new SearchFields();
229         searchFields.setGroupId( "org.apache.archiva" );
230         searchFields.setArtifactId( "archiva-search" );
231         searchFields.setClassifier( "sources" );
232         searchFields.setRepositories( selectedRepos );
233
234         SearchResults results = search.search( "user", searchFields, null );
235
236         archivaConfigControl.verify();
237
238         assertNotNull( results );
239         assertEquals( 1, results.getTotalHits() );
240
241         SearchResultHit hit = results.getHits().get( 0 );
242         assertEquals( "org.apache.archiva", hit.getGroupId() );
243         assertEquals( "archiva-search", hit.getArtifactId() );
244         assertEquals( "1.0", hit.getVersions().get( 0 ) );
245
246         //only 1 version of 1.0 is retrieved
247         assertEquals( 1, hit.getVersions().size() );
248     }
249
250     // search for existing artifact using multiple keywords
251     @Test
252     public void testQuickSearchWithMultipleKeywords()
253         throws Exception
254     {
255         createSimpleIndex( false );
256
257         List<String> selectedRepos = new ArrayList<String>();
258         selectedRepos.add( TEST_REPO_1 );
259
260         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
261         archivaConfigControl.replay();
262
263         SearchResults results = search.search( "user", selectedRepos, "archiva search", null, null );
264
265         archivaConfigControl.verify();
266
267         assertNotNull( results );
268         assertEquals( 1, results.getTotalHits() );
269     }
270
271     @Test
272     public void testQuickSearchWithPagination()
273         throws Exception
274     {
275         createSimpleIndex( true );
276
277         List<String> selectedRepos = new ArrayList<String>();
278         selectedRepos.add( TEST_REPO_1 );
279
280         // page 1
281         SearchResultLimits limits = new SearchResultLimits( 0 );
282         limits.setPageSize( 1 );
283
284         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
285
286         archivaConfigControl.replay();
287
288         SearchResults results = search.search( "user", selectedRepos, "org", limits, new ArrayList<String>() );
289
290         archivaConfigControl.verify();
291
292         assertNotNull( results );
293         assertEquals( 1, results.getHits().size() );
294         assertEquals( "total hits not 8 for page1 " + results, 8, results.getTotalHits() );
295         assertEquals( "returned hits not 1 for page1 " + results, 1, results.getReturnedHitsCount() );
296         assertEquals( limits, results.getLimits() );
297
298         archivaConfigControl.reset();
299
300         // page 2
301         limits = new SearchResultLimits( 1 );
302         limits.setPageSize( 1 );
303
304         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
305
306         archivaConfigControl.replay();
307
308         results = search.search( "user", selectedRepos, "org", limits, null );
309
310         archivaConfigControl.verify();
311
312         assertNotNull( results );
313
314         assertEquals( "hits not 1", 1, results.getHits().size() );
315         assertEquals( "total hits not 8 for page 2 " + results, 8, results.getTotalHits() );
316         assertEquals( "returned hits not 1 for page2 " + results, 1, results.getReturnedHitsCount() );
317         assertEquals( limits, results.getLimits() );
318     }
319
320     @Test
321     public void testArtifactFoundInMultipleRepositories()
322         throws Exception
323     {
324         createSimpleIndex( true );
325
326         List<File> files = new ArrayList<File>();
327         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
328             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
329         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
330             + "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
331         createIndex( TEST_REPO_2, files, false );
332
333         List<String> selectedRepos = new ArrayList<String>();
334         selectedRepos.add( TEST_REPO_1 );
335         selectedRepos.add( TEST_REPO_2 );
336
337         config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
338
339         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 5 );
340
341         archivaConfigControl.replay();
342
343         // wait lucene flush.....
344         Thread.sleep( 2000 );
345
346         SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
347
348         archivaConfigControl.verify();
349
350         assertNotNull( results );
351
352         SearchResultHit hit =
353             results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
354         assertEquals( "org.apache.archiva", hit.getGroupId() );
355         assertEquals( "archiva-search", hit.getArtifactId() );
356         assertEquals( "not 2 version for hit " + hit + "::" + niceDisplay( results ), 2, hit.getVersions().size() );
357         assertTrue( hit.getVersions().contains( "1.0" ) );
358         assertTrue( hit.getVersions().contains( "1.1" ) );
359
360         archivaConfigControl.reset();
361
362         // TODO: [BROWSE] in artifact info from browse, display all the repositories where the artifact is found
363     }
364
365     @Test
366     public void testNoMatchFound()
367         throws Exception
368     {
369         createSimpleIndex( false );
370
371         List<String> selectedRepos = new ArrayList<String>();
372         selectedRepos.add( TEST_REPO_1 );
373
374         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
375
376         archivaConfigControl.replay();
377
378         SearchResults results = search.search( "user", selectedRepos, "dfghdfkweriuasndsaie", null, null );
379
380         archivaConfigControl.verify();
381
382         assertNotNull( results );
383         assertEquals( 0, results.getTotalHits() );
384     }
385
386     @Test
387     public void testNoIndexFound()
388         throws Exception
389     {
390         List<String> selectedRepos = new ArrayList<String>();
391         selectedRepos.add( TEST_REPO_1 );
392
393         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
394
395         archivaConfigControl.replay();
396
397         SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
398         assertNotNull( results );
399         assertEquals( 0, results.getTotalHits() );
400
401         archivaConfigControl.verify();
402     }
403
404     @Test
405     public void testRepositoryNotFound()
406         throws Exception
407     {
408         List<String> selectedRepos = new ArrayList<String>();
409         selectedRepos.add( "non-existing-repo" );
410
411         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
412
413         archivaConfigControl.replay();
414
415         SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
416         assertNotNull( results );
417         assertEquals( 0, results.getTotalHits() );
418
419         archivaConfigControl.verify();
420     }
421
422     @Test
423     public void testSearchWithinSearchResults()
424         throws Exception
425     {
426         createSimpleIndex( true );
427
428         List<String> selectedRepos = new ArrayList<String>();
429         selectedRepos.add( TEST_REPO_1 );
430
431         List<String> previousSearchTerms = new ArrayList<String>();
432         previousSearchTerms.add( "archiva-test" );
433
434         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
435
436         archivaConfigControl.replay();
437
438         SearchResults results = search.search( "user", selectedRepos, "1.0", null, previousSearchTerms );
439
440         archivaConfigControl.verify();
441
442         assertNotNull( results );
443         assertEquals( "total hints not 1", 1, results.getTotalHits() );
444
445         SearchResultHit hit = results.getHits().get( 0 );
446         assertEquals( "org.apache.archiva", hit.getGroupId() );
447         assertEquals( "archiva-test", hit.getArtifactId() );
448         assertEquals( "versions not 1", 1, hit.getVersions().size() );
449         assertEquals( "1.0", hit.getVersions().get( 0 ) );
450     }
451
452     // tests for advanced search
453     @Test
454     public void testAdvancedSearch()
455         throws Exception
456     {
457         List<File> files = new ArrayList<File>();
458         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
459             + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
460         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
461             + "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
462         createIndex( TEST_REPO_2, files, false );
463
464         List<String> selectedRepos = new ArrayList<String>();
465         selectedRepos.add( TEST_REPO_2 );
466
467         SearchFields searchFields = new SearchFields();
468         searchFields.setGroupId( "org.apache.archiva" );
469         searchFields.setVersion( "1.0" );
470         searchFields.setRepositories( selectedRepos );
471
472         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
473
474         archivaConfigControl.replay();
475
476         SearchResults results = search.search( "user", searchFields, null );
477
478         archivaConfigControl.verify();
479
480         assertNotNull( results );
481         assertEquals( 1, results.getTotalHits() );
482
483         SearchResultHit hit = results.getHits().get( 0 );
484         assertEquals( "org.apache.archiva", hit.getGroupId() );
485         assertEquals( "archiva-search", hit.getArtifactId() );
486         assertEquals( "1.0", hit.getVersions().get( 0 ) );
487     }
488
489     @Test
490     public void testAdvancedSearchWithPagination()
491         throws Exception
492     {
493         createIndexContainingMoreArtifacts( false );
494
495         List<String> selectedRepos = new ArrayList<String>();
496         selectedRepos.add( TEST_REPO_1 );
497
498         SearchFields searchFields = new SearchFields();
499         searchFields.setGroupId( "org.apache.archiva" );
500         searchFields.setRepositories( selectedRepos );
501
502         // page 1
503
504         SearchResultLimits limits = new SearchResultLimits( 0 );
505         limits.setPageSize( 1 );
506
507         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
508
509         archivaConfigControl.replay();
510
511         SearchResults results = search.search( "user", searchFields, limits );
512
513         archivaConfigControl.verify();
514
515         assertNotNull( results );
516         assertEquals( 4, results.getTotalHits() );
517         assertEquals( 1, results.getHits().size() );
518
519         // page 2
520         archivaConfigControl.reset();
521
522         limits = new SearchResultLimits( 1 );
523         limits.setPageSize( 1 );
524
525         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
526
527         archivaConfigControl.replay();
528
529         results = search.search( "user", searchFields, limits );
530
531         archivaConfigControl.verify();
532
533         assertNotNull( results );
534         assertEquals( 4, results.getTotalHits() );
535         assertEquals( 1, results.getHits().size() );
536     }
537
538     // MRM-981 - artifactIds with numeric characters aren't found in advanced search
539     @Test
540     public void testAdvancedSearchArtifactIdHasNumericChar()
541         throws Exception
542     {
543         List<File> files = new ArrayList<File>();
544         files.add( new File( FileUtil.getBasedir(),
545                              "src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
546         files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
547             + "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
548         createIndex( TEST_REPO_1, files, true );
549
550         List<String> selectedRepos = new ArrayList<String>();
551         selectedRepos.add( TEST_REPO_1 );
552
553         SearchFields searchFields = new SearchFields();
554         searchFields.setArtifactId( "artifactid-numeric" );
555         searchFields.setRepositories( selectedRepos );
556
557         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
558
559         archivaConfigControl.replay();
560
561         SearchResults results = search.search( "user", searchFields, null );
562
563         archivaConfigControl.verify();
564
565         assertNotNull( results );
566         assertEquals( 2, results.getTotalHits() );
567     }
568
569     @Test
570     public void testAdvancedSearchNoRepositoriesConfigured()
571         throws Exception
572     {
573         SearchFields searchFields = new SearchFields();
574         searchFields.setArtifactId( "archiva" );
575         searchFields.setRepositories( null );
576
577         try
578         {
579             search.search( "user", searchFields, null );
580             fail( "A RepositorySearchExcecption should have been thrown." );
581         }
582         catch ( RepositorySearchException e )
583         {
584             assertEquals( "Repositories cannot be null.", e.getMessage() );
585         }
586     }
587
588     @Test
589     public void testAdvancedSearchSearchFieldsAreNull()
590         throws Exception
591     {
592         List<String> selectedRepos = new ArrayList<String>();
593         selectedRepos.add( TEST_REPO_1 );
594
595         SearchFields searchFields = new SearchFields();
596         searchFields.setRepositories( selectedRepos );
597
598         try
599         {
600             archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
601
602             archivaConfigControl.replay();
603
604             search.search( "user", searchFields, null );
605
606             archivaConfigControl.verify();
607
608             fail( "A RepositorySearchExcecption should have been thrown." );
609         }
610         catch ( RepositorySearchException e )
611         {
612             assertEquals( "No search fields set.", e.getMessage() );
613         }
614     }
615
616     @Test
617     public void testAdvancedSearchSearchFieldsAreBlank()
618         throws Exception
619     {
620         List<String> selectedRepos = new ArrayList<String>();
621         selectedRepos.add( TEST_REPO_1 );
622
623         SearchFields searchFields = new SearchFields();
624         searchFields.setGroupId( "" );
625         searchFields.setArtifactId( "" );
626         searchFields.setVersion( "" );
627         searchFields.setPackaging( "" );
628         searchFields.setClassName( "" );
629
630         searchFields.setRepositories( selectedRepos );
631
632         try
633         {
634             archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
635
636             archivaConfigControl.replay();
637
638             search.search( "user", searchFields, null );
639
640             archivaConfigControl.verify();
641
642             fail( "A RepositorySearchExcecption should have been thrown." );
643         }
644         catch ( RepositorySearchException e )
645         {
646             assertEquals( "No search fields set.", e.getMessage() );
647         }
648     }
649
650     @Test
651     public void testAdvancedSearchAllSearchCriteriaSpecified()
652         throws Exception
653     {
654         createSimpleIndex( true );
655
656         List<String> selectedRepos = new ArrayList<String>();
657         selectedRepos.add( TEST_REPO_1 );
658
659         SearchFields searchFields = new SearchFields();
660         searchFields.setGroupId( "org.apache.archiva" );
661         searchFields.setArtifactId( "archiva-test" );
662         searchFields.setVersion( "2.0" );
663         searchFields.setPackaging( "jar" );
664         searchFields.setClassName( "org.apache.archiva.test.App" );
665         searchFields.setRepositories( selectedRepos );
666
667         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
668
669         archivaConfigControl.replay();
670
671         SearchResults results = search.search( "user", searchFields, null );
672
673         archivaConfigControl.verify();
674
675         assertNotNull( results );
676
677         assertEquals( "total hints not 1" + results, 1, results.getTotalHits() );
678
679         SearchResultHit hit = results.getHits().get( 0 );
680         assertEquals( "org.apache.archiva", hit.getGroupId() );
681         assertEquals( "archiva-test", hit.getArtifactId() );
682         assertEquals( "version not 2.0", "2.0", hit.getVersions().get( 0 ) );
683     }
684
685     @Test
686     public void testAdvancedSearchJarArtifacts()
687         throws Exception
688     {
689         createIndexContainingMoreArtifacts( true );
690
691         List<String> selectedRepos = new ArrayList<String>();
692         selectedRepos.add( TEST_REPO_1 );
693
694         SearchFields searchFields = new SearchFields();
695         searchFields.setPackaging( "jar" );
696         searchFields.setRepositories( selectedRepos );
697
698         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
699
700         archivaConfigControl.replay();
701
702         SearchResults results = search.search( "user", searchFields, null );
703
704         archivaConfigControl.verify();
705
706         assertNotNull( results );
707         assertEquals( "not 8 but " + results.getTotalHits() + ":" + niceDisplay( results ), 8, results.getTotalHits() );
708     }
709
710     @Test
711     public void testAdvancedSearchWithIncorrectPackaging()
712         throws Exception
713     {
714         createSimpleIndex( true );
715
716         List<String> selectedRepos = new ArrayList<String>();
717         selectedRepos.add( TEST_REPO_1 );
718
719         SearchFields searchFields = new SearchFields();
720         searchFields.setGroupId( "org.apache.archiva" );
721         searchFields.setArtifactId( "archiva-test" );
722         searchFields.setVersion( "2.0" );
723         searchFields.setPackaging( "war" );
724         searchFields.setRepositories( selectedRepos );
725
726         archivaConfigControl.expectAndDefaultReturn( archivaConfig.getConfiguration(), config );
727         archivaConfigControl.replay();
728
729         SearchResults results = search.search( "user", searchFields, null );
730
731         archivaConfigControl.verify();
732
733         assertNotNull( results );
734         assertEquals( 0, results.getTotalHits() );
735     }
736
737     @Test
738     public void testAdvancedSearchClassname()
739         throws Exception
740     {
741         createIndexContainingMoreArtifacts( true );
742
743         List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
744
745         SearchFields searchFields = new SearchFields();
746         searchFields.setClassName( "com.classname.search.App" );
747         searchFields.setRepositories( selectedRepos );
748
749         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
750
751         archivaConfigControl.replay();
752
753         SearchResults results = search.search( "user", searchFields, null );
754
755         archivaConfigControl.verify();
756
757         assertNotNull( results );
758         assertEquals( "totalHits not 1 results " + results, 1, results.getTotalHits() );
759
760         SearchResultHit hit = results.getHits().get( 0 );
761         assertEquals( "groupId not com", "com", hit.getGroupId() );
762         assertEquals( "arttifactId not classname-search", "classname-search", hit.getArtifactId() );
763         assertEquals( " hits.version(0) not 1.0", "1.0", hit.getVersions().get( 0 ) );
764     }
765
766     @Test
767     public void testAdvancedSearchNoIndexFound()
768         throws Exception
769     {
770         List<String> selectedRepos = new ArrayList<String>();
771         selectedRepos.add( TEST_REPO_1 );
772
773         SearchFields searchFields = new SearchFields();
774         searchFields.setGroupId( "org.apache.archiva" );
775         searchFields.setRepositories( selectedRepos );
776
777         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
778
779         archivaConfigControl.replay();
780
781         SearchResults results = search.search( "user", searchFields, null );
782
783         archivaConfigControl.verify();
784
785         assertNotNull( results );
786         assertEquals( 0, results.getTotalHits() );
787     }
788
789     @Test
790     public void testAdvancedSearchClassNameInWar()
791         throws Exception
792     {
793         createIndexContainingMoreArtifacts( true );
794
795         List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
796
797         SearchFields searchFields = new SearchFields();
798         searchFields.setClassName( "SomeClass" );
799         searchFields.setRepositories( selectedRepos );
800
801         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
802
803         archivaConfigControl.replay();
804
805         SearchResults results = search.search( "user", searchFields, null );
806
807         archivaConfigControl.verify();
808
809         assertNotNull( results );
810         assertEquals( 1, results.getHits().size() );
811         assertEquals( "test-webapp", results.getHits().get( 0 ).getArtifactId() );
812     }
813
814     @Test
815     public void getAllGroupIds()
816         throws Exception
817     {
818         createIndexContainingMoreArtifacts( true );
819
820         List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
821
822         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 0, 2 );
823
824         archivaConfigControl.replay();
825
826         Collection<String> groupIds = search.getAllGroupIds( "user", selectedRepos );
827
828         archivaConfigControl.verify();
829
830         log.info( "groupIds: " + groupIds );
831
832         assertEquals( 3, groupIds.size() );
833         assertTrue( groupIds.contains( "com" ) );
834         assertTrue( groupIds.contains( "org.apache.felix" ) );
835         assertTrue( groupIds.contains( "org.apache.archiva" ) );
836     }
837
838     @Test
839     public void testSearchWithUnknownRepo()
840         throws Exception
841     {
842         createIndexContainingMoreArtifacts( true );
843
844         List<String> selectedRepos = Arrays.asList( "foo" );
845
846         SearchFields searchFields = new SearchFields();
847         searchFields.setClassName( "SomeClass" );
848         searchFields.setRepositories( selectedRepos );
849
850         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 2 );
851
852         archivaConfigControl.replay();
853
854         SearchResults results = search.search( "user", searchFields, null );
855
856         archivaConfigControl.verify();
857
858         assertNotNull( results );
859         assertEquals( 0, results.getHits().size() );
860     }
861
862     @Test
863     public void nolimitedResult()
864         throws Exception
865     {
866
867         File repo = new File( "target/repo-release" );
868         File indexDirectory = new File( repo, ".index" );
869         FileUtils.copyDirectoryStructure( new File( "src/test/repo-release" ), repo );
870
871         createIndex( "repo-release", Collections.<File>emptyList(), false );
872
873         nexusIndexer.addIndexingContext( REPO_RELEASE, REPO_RELEASE, repo, indexDirectory,
874                                          repo.toURI().toURL().toExternalForm(),
875                                          indexDirectory.toURI().toURL().toString(), search.getAllIndexCreators() );
876
877         SearchResultLimits limits = new SearchResultLimits( 0 );
878         limits.setPageSize( 300 );
879
880         archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config, 1, 5 );
881
882         archivaConfigControl.replay();
883
884         SearchResults searchResults = search.search( null, Arrays.asList( REPO_RELEASE ), "org.example", limits,
885                                                      Collections.<String>emptyList() );
886
887         log.info( "results: {}", searchResults.getHits().size() );
888
889         assertEquals( 255, searchResults.getHits().size() );
890
891         SearchFields searchFields = new SearchFields();
892         searchFields.setGroupId( "org.example" );
893         searchFields.setRepositories( Arrays.asList( REPO_RELEASE ) );
894
895         searchResults = search.search( null, searchFields, limits );
896
897         log.info( "results: {}", searchResults.getHits().size() );
898
899         assertEquals( 255, searchResults.getHits().size() );
900
901         archivaConfigControl.verify();
902     }
903 }