You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MavenRepositorySearchTest.java 31KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904
  1. package org.apache.archiva.indexer.search;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing,
  14. * software distributed under the License is distributed on an
  15. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16. * KIND, either express or implied. See the License for the
  17. * specific language governing permissions and limitations
  18. * under the License.
  19. */
  20. import org.apache.archiva.common.utils.FileUtil;
  21. import org.apache.archiva.indexer.util.SearchUtil;
  22. import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
  23. import org.codehaus.plexus.util.FileUtils;
  24. import org.easymock.EasyMock;
  25. import org.junit.Test;
  26. import org.junit.runner.RunWith;
  27. import org.springframework.test.context.ContextConfiguration;
  28. import java.io.File;
  29. import java.util.ArrayList;
  30. import java.util.Arrays;
  31. import java.util.Collection;
  32. import java.util.Collections;
  33. import java.util.List;
  34. @RunWith ( ArchivaSpringJUnit4ClassRunner.class )
  35. @ContextConfiguration ( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
  36. public class MavenRepositorySearchTest
  37. extends AbstractMavenRepositorySearch
  38. {
  39. private void createSimpleIndex( boolean scan )
  40. throws Exception
  41. {
  42. List<File> files = new ArrayList<>();
  43. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  44. + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
  45. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  46. + "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ) );
  47. files.add( new File( FileUtil.getBasedir(), "/src/test/" + TEST_REPO_1
  48. + "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) );
  49. createIndex( TEST_REPO_1, files, scan );
  50. }
  51. private void createIndexContainingMoreArtifacts( boolean scan )
  52. throws Exception
  53. {
  54. List<File> files = new ArrayList<>();
  55. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  56. + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
  57. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  58. + "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ) );
  59. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  60. + "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) );
  61. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  62. + "/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war" ) );
  63. files.add( new File( FileUtil.getBasedir(),
  64. "src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
  65. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  66. + "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
  67. files.add( new File( FileUtil.getBasedir(),
  68. "src/test/" + TEST_REPO_1 + "/com/classname-search/1.0/classname-search-1.0.jar" ) );
  69. createIndex( TEST_REPO_1, files, scan );
  70. }
  71. private void createIndexContainingMultipleArtifactsSameVersion( boolean scan )
  72. throws Exception
  73. {
  74. List<File> files = new ArrayList<>();
  75. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  76. + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
  77. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  78. + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom" ) );
  79. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  80. + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar" ) );
  81. createIndex( TEST_REPO_1, files, scan );
  82. }
  83. @Test
  84. public void testQuickSearch()
  85. throws Exception
  86. {
  87. createSimpleIndex( false );
  88. List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
  89. // search artifactId
  90. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  91. archivaConfigControl.replay();
  92. SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
  93. archivaConfigControl.verify();
  94. assertNotNull( results );
  95. SearchResultHit hit =
  96. results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
  97. assertNotNull( "hit null in result " + results.getHits(), hit );
  98. assertEquals( "org.apache.archiva", hit.getGroupId() );
  99. assertEquals( "archiva-search", hit.getArtifactId() );
  100. assertEquals( "1.0", hit.getVersions().get( 0 ) );
  101. archivaConfigControl.reset();
  102. // search groupId
  103. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  104. archivaConfigControl.replay();
  105. results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
  106. archivaConfigControl.verify();
  107. assertNotNull( results );
  108. assertEquals( "total hints not 3", 3, results.getTotalHits() );
  109. //TODO: search for class & package names
  110. }
  111. @Test
  112. public void testQuickSearchNotWithClassifier()
  113. throws Exception
  114. {
  115. createSimpleIndex( true );
  116. List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
  117. // search artifactId
  118. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  119. archivaConfigControl.replay();
  120. SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
  121. archivaConfigControl.verify();
  122. assertNotNull( results );
  123. SearchResultHit hit =
  124. results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
  125. assertNotNull( "hit null in result " + results.getHits(), hit );
  126. assertEquals( "org.apache.archiva", hit.getGroupId() );
  127. assertEquals( "archiva-search", hit.getArtifactId() );
  128. assertEquals( "1.0", hit.getVersions().get( 0 ) );
  129. archivaConfigControl.reset();
  130. // search groupId
  131. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  132. archivaConfigControl.replay();
  133. results = search.search( "user", selectedRepos, "archiva-search", null, null );
  134. archivaConfigControl.verify();
  135. assertNotNull( results );
  136. assertEquals( "total hints not 3 hits " + results.getHits(), 3, results.getTotalHits() );
  137. //TODO: search for class & package names
  138. }
  139. @Test
  140. public void testQuickSearchMultipleArtifactsSameVersion()
  141. throws Exception
  142. {
  143. createIndexContainingMultipleArtifactsSameVersion( false );
  144. List<String> selectedRepos = new ArrayList<>();
  145. selectedRepos.add( TEST_REPO_1 );
  146. // search artifactId
  147. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  148. archivaConfigControl.replay();
  149. SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
  150. archivaConfigControl.verify();
  151. assertNotNull( results );
  152. assertEquals( 3, results.getTotalHits() );
  153. SearchResultHit hit = results.getHits().get( 0 );
  154. assertEquals( "org.apache.archiva", hit.getGroupId() );
  155. assertEquals( "archiva-search", hit.getArtifactId() );
  156. assertEquals( "1.0", hit.getVersions().get( 0 ) );
  157. //only 1 version of 1.0 is retrieved
  158. assertEquals( 1, hit.getVersions().size() );
  159. }
  160. @Test
  161. public void testMultipleArtifactsSameVersionWithClassifier()
  162. throws Exception
  163. {
  164. createIndexContainingMultipleArtifactsSameVersion( true );
  165. List<String> selectedRepos = new ArrayList<>();
  166. selectedRepos.add( TEST_REPO_1 );
  167. // search artifactId
  168. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  169. archivaConfigControl.replay();
  170. SearchFields searchFields = new SearchFields();
  171. searchFields.setGroupId( "org.apache.archiva" );
  172. searchFields.setArtifactId( "archiva-search" );
  173. searchFields.setClassifier( "sources" );
  174. searchFields.setRepositories( selectedRepos );
  175. SearchResults results = search.search( "user", searchFields, null );
  176. archivaConfigControl.verify();
  177. assertNotNull( results );
  178. assertEquals( 1, results.getTotalHits() );
  179. SearchResultHit hit = results.getHits().get( 0 );
  180. assertEquals( "org.apache.archiva", hit.getGroupId() );
  181. assertEquals( "archiva-search", hit.getArtifactId() );
  182. assertEquals( "1.0", hit.getVersions().get( 0 ) );
  183. //only 1 version of 1.0 is retrieved
  184. assertEquals( 1, hit.getVersions().size() );
  185. }
  186. // search for existing artifact using multiple keywords
  187. @Test
  188. public void testQuickSearchWithMultipleKeywords()
  189. throws Exception
  190. {
  191. createSimpleIndex( false );
  192. List<String> selectedRepos = new ArrayList<>();
  193. selectedRepos.add( TEST_REPO_1 );
  194. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  195. archivaConfigControl.replay();
  196. SearchResults results = search.search( "user", selectedRepos, "archiva search", null, null );
  197. archivaConfigControl.verify();
  198. assertNotNull( results );
  199. assertEquals( 1, results.getTotalHits() );
  200. }
  201. @Test
  202. public void testQuickSearchWithPagination()
  203. throws Exception
  204. {
  205. createSimpleIndex( true );
  206. List<String> selectedRepos = new ArrayList<>();
  207. selectedRepos.add( TEST_REPO_1 );
  208. // page 1
  209. SearchResultLimits limits = new SearchResultLimits( 0 );
  210. limits.setPageSize( 1 );
  211. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  212. archivaConfigControl.replay();
  213. SearchResults results = search.search( "user", selectedRepos, "org", limits, new ArrayList<String>() );
  214. archivaConfigControl.verify();
  215. assertNotNull( results );
  216. assertEquals( 1, results.getHits().size() );
  217. assertEquals( "total hits not 8 for page1 " + results, 8, results.getTotalHits() );
  218. assertEquals( "returned hits not 1 for page1 " + results, 1, results.getReturnedHitsCount() );
  219. assertEquals( limits, results.getLimits() );
  220. archivaConfigControl.reset();
  221. // page 2
  222. limits = new SearchResultLimits( 1 );
  223. limits.setPageSize( 1 );
  224. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  225. archivaConfigControl.replay();
  226. results = search.search( "user", selectedRepos, "org", limits, null );
  227. archivaConfigControl.verify();
  228. assertNotNull( results );
  229. assertEquals( "hits not 1", 1, results.getHits().size() );
  230. assertEquals( "total hits not 8 for page 2 " + results, 8, results.getTotalHits() );
  231. assertEquals( "returned hits not 1 for page2 " + results, 1, results.getReturnedHitsCount() );
  232. assertEquals( limits, results.getLimits() );
  233. }
  234. @Test
  235. public void testArtifactFoundInMultipleRepositories()
  236. throws Exception
  237. {
  238. createSimpleIndex( true );
  239. List<File> files = new ArrayList<>();
  240. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
  241. + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
  242. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
  243. + "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
  244. createIndex( TEST_REPO_2, files, false );
  245. List<String> selectedRepos = new ArrayList<>();
  246. selectedRepos.add( TEST_REPO_1 );
  247. selectedRepos.add( TEST_REPO_2 );
  248. config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
  249. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 5 );
  250. archivaConfigControl.replay();
  251. // wait lucene flush.....
  252. Thread.sleep( 2000 );
  253. SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
  254. archivaConfigControl.verify();
  255. assertNotNull( results );
  256. SearchResultHit hit =
  257. results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
  258. assertEquals( "org.apache.archiva", hit.getGroupId() );
  259. assertEquals( "archiva-search", hit.getArtifactId() );
  260. assertEquals( "not 2 version for hit " + hit + "::" + niceDisplay( results ), 2, hit.getVersions().size() );
  261. assertTrue( hit.getVersions().contains( "1.0" ) );
  262. assertTrue( hit.getVersions().contains( "1.1" ) );
  263. archivaConfigControl.reset();
  264. // TODO: [BROWSE] in artifact info from browse, display all the repositories where the artifact is found
  265. }
  266. @Test
  267. public void testNoMatchFound()
  268. throws Exception
  269. {
  270. createSimpleIndex( false );
  271. List<String> selectedRepos = new ArrayList<>();
  272. selectedRepos.add( TEST_REPO_1 );
  273. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  274. archivaConfigControl.replay();
  275. SearchResults results = search.search( "user", selectedRepos, "dfghdfkweriuasndsaie", null, null );
  276. archivaConfigControl.verify();
  277. assertNotNull( results );
  278. assertEquals( 0, results.getTotalHits() );
  279. }
  280. @Test
  281. public void testNoIndexFound()
  282. throws Exception
  283. {
  284. List<String> selectedRepos = new ArrayList<>();
  285. selectedRepos.add( TEST_REPO_1 );
  286. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  287. archivaConfigControl.replay();
  288. SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
  289. assertNotNull( results );
  290. assertEquals( 0, results.getTotalHits() );
  291. archivaConfigControl.verify();
  292. }
  293. @Test
  294. public void testRepositoryNotFound()
  295. throws Exception
  296. {
  297. List<String> selectedRepos = new ArrayList<>();
  298. selectedRepos.add( "non-existing-repo" );
  299. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  300. archivaConfigControl.replay();
  301. SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
  302. assertNotNull( results );
  303. assertEquals( 0, results.getTotalHits() );
  304. archivaConfigControl.verify();
  305. }
  306. @Test
  307. public void testSearchWithinSearchResults()
  308. throws Exception
  309. {
  310. createSimpleIndex( true );
  311. List<String> selectedRepos = new ArrayList<>();
  312. selectedRepos.add( TEST_REPO_1 );
  313. List<String> previousSearchTerms = new ArrayList<>();
  314. previousSearchTerms.add( "archiva-test" );
  315. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  316. archivaConfigControl.replay();
  317. SearchResults results = search.search( "user", selectedRepos, "1.0", null, previousSearchTerms );
  318. archivaConfigControl.verify();
  319. assertNotNull( results );
  320. assertEquals( "total hints not 1", 1, results.getTotalHits() );
  321. SearchResultHit hit = results.getHits().get( 0 );
  322. assertEquals( "org.apache.archiva", hit.getGroupId() );
  323. assertEquals( "archiva-test", hit.getArtifactId() );
  324. assertEquals( "versions not 1", 1, hit.getVersions().size() );
  325. assertEquals( "1.0", hit.getVersions().get( 0 ) );
  326. }
  327. // tests for advanced search
  328. @Test
  329. public void testAdvancedSearch()
  330. throws Exception
  331. {
  332. List<File> files = new ArrayList<>();
  333. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
  334. + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
  335. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
  336. + "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
  337. createIndex( TEST_REPO_2, files, false );
  338. List<String> selectedRepos = new ArrayList<>();
  339. selectedRepos.add( TEST_REPO_2 );
  340. SearchFields searchFields = new SearchFields();
  341. searchFields.setGroupId( "org.apache.archiva" );
  342. searchFields.setVersion( "1.0" );
  343. searchFields.setRepositories( selectedRepos );
  344. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  345. archivaConfigControl.replay();
  346. SearchResults results = search.search( "user", searchFields, null );
  347. archivaConfigControl.verify();
  348. assertNotNull( results );
  349. assertEquals( 1, results.getTotalHits() );
  350. SearchResultHit hit = results.getHits().get( 0 );
  351. assertEquals( "org.apache.archiva", hit.getGroupId() );
  352. assertEquals( "archiva-search", hit.getArtifactId() );
  353. assertEquals( "1.0", hit.getVersions().get( 0 ) );
  354. }
  355. @Test
  356. public void testAdvancedSearchWithPagination()
  357. throws Exception
  358. {
  359. createIndexContainingMoreArtifacts( false );
  360. List<String> selectedRepos = new ArrayList<>();
  361. selectedRepos.add( TEST_REPO_1 );
  362. SearchFields searchFields = new SearchFields();
  363. searchFields.setGroupId( "org.apache.archiva" );
  364. searchFields.setRepositories( selectedRepos );
  365. // page 1
  366. SearchResultLimits limits = new SearchResultLimits( 0 );
  367. limits.setPageSize( 1 );
  368. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  369. archivaConfigControl.replay();
  370. SearchResults results = search.search( "user", searchFields, limits );
  371. archivaConfigControl.verify();
  372. assertNotNull( results );
  373. assertEquals( 4, results.getTotalHits() );
  374. assertEquals( 1, results.getHits().size() );
  375. // page 2
  376. archivaConfigControl.reset();
  377. limits = new SearchResultLimits( 1 );
  378. limits.setPageSize( 1 );
  379. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  380. archivaConfigControl.replay();
  381. results = search.search( "user", searchFields, limits );
  382. archivaConfigControl.verify();
  383. assertNotNull( results );
  384. assertEquals( 4, results.getTotalHits() );
  385. assertEquals( 1, results.getHits().size() );
  386. }
  387. // MRM-981 - artifactIds with numeric characters aren't found in advanced search
  388. @Test
  389. public void testAdvancedSearchArtifactIdHasNumericChar()
  390. throws Exception
  391. {
  392. List<File> files = new ArrayList<>();
  393. files.add( new File( FileUtil.getBasedir(),
  394. "src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
  395. files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
  396. + "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
  397. createIndex( TEST_REPO_1, files, true );
  398. List<String> selectedRepos = new ArrayList<>();
  399. selectedRepos.add( TEST_REPO_1 );
  400. SearchFields searchFields = new SearchFields();
  401. searchFields.setArtifactId( "artifactid-numeric" );
  402. searchFields.setRepositories( selectedRepos );
  403. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  404. archivaConfigControl.replay();
  405. SearchResults results = search.search( "user", searchFields, null );
  406. archivaConfigControl.verify();
  407. assertNotNull( results );
  408. assertEquals( 2, results.getTotalHits() );
  409. }
  410. @Test
  411. public void testAdvancedSearchNoRepositoriesConfigured()
  412. throws Exception
  413. {
  414. SearchFields searchFields = new SearchFields();
  415. searchFields.setArtifactId( "archiva" );
  416. searchFields.setRepositories( null );
  417. try
  418. {
  419. search.search( "user", searchFields, null );
  420. fail( "A RepositorySearchExcecption should have been thrown." );
  421. }
  422. catch ( RepositorySearchException e )
  423. {
  424. assertEquals( "Repositories cannot be null.", e.getMessage() );
  425. }
  426. }
  427. @Test
  428. public void testAdvancedSearchSearchFieldsAreNull()
  429. throws Exception
  430. {
  431. List<String> selectedRepos = new ArrayList<>();
  432. selectedRepos.add( TEST_REPO_1 );
  433. SearchFields searchFields = new SearchFields();
  434. searchFields.setRepositories( selectedRepos );
  435. try
  436. {
  437. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  438. archivaConfigControl.replay();
  439. search.search( "user", searchFields, null );
  440. archivaConfigControl.verify();
  441. fail( "A RepositorySearchExcecption should have been thrown." );
  442. }
  443. catch ( RepositorySearchException e )
  444. {
  445. assertEquals( "No search fields set.", e.getMessage() );
  446. }
  447. }
  448. @Test
  449. public void testAdvancedSearchSearchFieldsAreBlank()
  450. throws Exception
  451. {
  452. List<String> selectedRepos = new ArrayList<>();
  453. selectedRepos.add( TEST_REPO_1 );
  454. SearchFields searchFields = new SearchFields();
  455. searchFields.setGroupId( "" );
  456. searchFields.setArtifactId( "" );
  457. searchFields.setVersion( "" );
  458. searchFields.setPackaging( "" );
  459. searchFields.setClassName( "" );
  460. searchFields.setRepositories( selectedRepos );
  461. try
  462. {
  463. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  464. archivaConfigControl.replay();
  465. search.search( "user", searchFields, null );
  466. archivaConfigControl.verify();
  467. fail( "A RepositorySearchExcecption should have been thrown." );
  468. }
  469. catch ( RepositorySearchException e )
  470. {
  471. assertEquals( "No search fields set.", e.getMessage() );
  472. }
  473. }
  474. @Test
  475. public void testAdvancedSearchAllSearchCriteriaSpecified()
  476. throws Exception
  477. {
  478. createSimpleIndex( true );
  479. List<String> selectedRepos = new ArrayList<>();
  480. selectedRepos.add( TEST_REPO_1 );
  481. SearchFields searchFields = new SearchFields();
  482. searchFields.setGroupId( "org.apache.archiva" );
  483. searchFields.setArtifactId( "archiva-test" );
  484. searchFields.setVersion( "2.0" );
  485. searchFields.setPackaging( "jar" );
  486. searchFields.setClassName( "org.apache.archiva.test.App" );
  487. searchFields.setRepositories( selectedRepos );
  488. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  489. archivaConfigControl.replay();
  490. SearchResults results = search.search( "user", searchFields, null );
  491. archivaConfigControl.verify();
  492. assertNotNull( results );
  493. assertEquals( "total hints not 1" + results, 1, results.getTotalHits() );
  494. SearchResultHit hit = results.getHits().get( 0 );
  495. assertEquals( "org.apache.archiva", hit.getGroupId() );
  496. assertEquals( "archiva-test", hit.getArtifactId() );
  497. assertEquals( "version not 2.0", "2.0", hit.getVersions().get( 0 ) );
  498. }
  499. @Test
  500. public void testAdvancedSearchJarArtifacts()
  501. throws Exception
  502. {
  503. createIndexContainingMoreArtifacts( true );
  504. List<String> selectedRepos = new ArrayList<>();
  505. selectedRepos.add( TEST_REPO_1 );
  506. SearchFields searchFields = new SearchFields();
  507. searchFields.setPackaging( "jar" );
  508. searchFields.setRepositories( selectedRepos );
  509. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  510. archivaConfigControl.replay();
  511. SearchResults results = search.search( "user", searchFields, null );
  512. archivaConfigControl.verify();
  513. assertNotNull( results );
  514. assertEquals( "not 8 but " + results.getTotalHits() + ":" + niceDisplay( results ), 8, results.getTotalHits() );
  515. }
  516. @Test
  517. public void testAdvancedSearchWithIncorrectPackaging()
  518. throws Exception
  519. {
  520. createSimpleIndex( true );
  521. List<String> selectedRepos = new ArrayList<>();
  522. selectedRepos.add( TEST_REPO_1 );
  523. SearchFields searchFields = new SearchFields();
  524. searchFields.setGroupId( "org.apache.archiva" );
  525. searchFields.setArtifactId( "archiva-test" );
  526. searchFields.setVersion( "2.0" );
  527. searchFields.setPackaging( "war" );
  528. searchFields.setRepositories( selectedRepos );
  529. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  530. archivaConfigControl.replay();
  531. SearchResults results = search.search( "user", searchFields, null );
  532. archivaConfigControl.verify();
  533. assertNotNull( results );
  534. assertEquals( 0, results.getTotalHits() );
  535. }
  536. @Test
  537. public void testAdvancedSearchClassname()
  538. throws Exception
  539. {
  540. createIndexContainingMoreArtifacts( true );
  541. List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
  542. SearchFields searchFields = new SearchFields();
  543. searchFields.setClassName( "com.classname.search.App" );
  544. searchFields.setRepositories( selectedRepos );
  545. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  546. archivaConfigControl.replay();
  547. SearchResults results = search.search( "user", searchFields, null );
  548. archivaConfigControl.verify();
  549. assertNotNull( results );
  550. assertEquals( "totalHits not 1 results " + results, 1, results.getTotalHits() );
  551. SearchResultHit hit = results.getHits().get( 0 );
  552. assertEquals( "groupId not com", "com", hit.getGroupId() );
  553. assertEquals( "arttifactId not classname-search", "classname-search", hit.getArtifactId() );
  554. assertEquals( " hits.version(0) not 1.0", "1.0", hit.getVersions().get( 0 ) );
  555. }
  556. @Test
  557. public void testAdvancedSearchNoIndexFound()
  558. throws Exception
  559. {
  560. List<String> selectedRepos = new ArrayList<>();
  561. selectedRepos.add( TEST_REPO_1 );
  562. SearchFields searchFields = new SearchFields();
  563. searchFields.setGroupId( "org.apache.archiva" );
  564. searchFields.setRepositories( selectedRepos );
  565. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  566. archivaConfigControl.replay();
  567. SearchResults results = search.search( "user", searchFields, null );
  568. archivaConfigControl.verify();
  569. assertNotNull( results );
  570. assertEquals( 0, results.getTotalHits() );
  571. }
  572. @Test
  573. public void testAdvancedSearchClassNameInWar()
  574. throws Exception
  575. {
  576. createIndexContainingMoreArtifacts( true );
  577. List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
  578. SearchFields searchFields = new SearchFields();
  579. searchFields.setClassName( "SomeClass" );
  580. searchFields.setRepositories( selectedRepos );
  581. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  582. archivaConfigControl.replay();
  583. SearchResults results = search.search( "user", searchFields, null );
  584. archivaConfigControl.verify();
  585. assertNotNull( results );
  586. assertEquals( 1, results.getHits().size() );
  587. assertEquals( "test-webapp", results.getHits().get( 0 ).getArtifactId() );
  588. }
  589. @Test
  590. public void getAllGroupIds()
  591. throws Exception
  592. {
  593. createIndexContainingMoreArtifacts( true );
  594. List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
  595. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 0, 2 );
  596. archivaConfigControl.replay();
  597. Collection<String> groupIds = search.getAllGroupIds( "user", selectedRepos );
  598. archivaConfigControl.verify();
  599. log.info( "groupIds: {}", groupIds );
  600. assertEquals( 3, groupIds.size() );
  601. assertTrue( groupIds.contains( "com" ) );
  602. assertTrue( groupIds.contains( "org.apache.felix" ) );
  603. assertTrue( groupIds.contains( "org.apache.archiva" ) );
  604. }
  605. @Test
  606. public void testSearchWithUnknownRepo()
  607. throws Exception
  608. {
  609. createIndexContainingMoreArtifacts( true );
  610. List<String> selectedRepos = Arrays.asList( "foo" );
  611. SearchFields searchFields = new SearchFields();
  612. searchFields.setClassName( "SomeClass" );
  613. searchFields.setRepositories( selectedRepos );
  614. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
  615. archivaConfigControl.replay();
  616. SearchResults results = search.search( "user", searchFields, null );
  617. archivaConfigControl.verify();
  618. assertNotNull( results );
  619. assertEquals( 0, results.getHits().size() );
  620. }
  621. @Test
  622. public void nolimitedResult()
  623. throws Exception
  624. {
  625. File repo = new File( "target/repo-release" );
  626. File indexDirectory = new File( repo, ".index" );
  627. FileUtils.copyDirectoryStructure( new File( "src/test/repo-release" ), repo );
  628. createIndex( "repo-release", Collections.<File>emptyList(), false );
  629. nexusIndexer.addIndexingContext( REPO_RELEASE, REPO_RELEASE, repo, indexDirectory,
  630. repo.toURI().toURL().toExternalForm(),
  631. indexDirectory.toURI().toURL().toString(), search.getAllIndexCreators() );
  632. SearchResultLimits limits = new SearchResultLimits( 0 );
  633. limits.setPageSize( 300 );
  634. EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 5 );
  635. archivaConfigControl.replay();
  636. SearchResults searchResults = search.search( null, Arrays.asList( REPO_RELEASE ), "org.example", limits,
  637. Collections.<String>emptyList() );
  638. log.info( "results: {}", searchResults.getHits().size() );
  639. assertEquals( 255, searchResults.getHits().size() );
  640. SearchFields searchFields = new SearchFields();
  641. searchFields.setGroupId( "org.example" );
  642. searchFields.setRepositories( Arrays.asList( REPO_RELEASE ) );
  643. searchResults = search.search( null, searchFields, limits );
  644. log.info( "results: {}", searchResults.getHits().size() );
  645. assertEquals( 255, searchResults.getHits().size() );
  646. archivaConfigControl.verify();
  647. }
  648. }