1 package org.apache.archiva.indexer.search;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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
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
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
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
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
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
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
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
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
252 assertEquals( 1, hit.getVersions().size() );
253 }
254
255
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
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
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
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
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
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
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
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
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( 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 ), "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 }