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