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