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