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