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