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.

RepositoryScannerTest.java 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. package org.apache.archiva.repository.scanner;
  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 junit.framework.TestCase;
  21. import org.apache.archiva.common.filelock.DefaultFileLockManager;
  22. import org.apache.archiva.common.filelock.FileLockManager;
  23. import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
  24. import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
  25. import org.apache.archiva.repository.base.managed.BasicManagedRepository;
  26. import org.apache.archiva.repository.base.remote.BasicRemoteRepository;
  27. import org.apache.archiva.repository.EditableManagedRepository;
  28. import org.apache.archiva.repository.EditableRemoteRepository;
  29. import org.apache.archiva.repository.ManagedRepository;
  30. import org.apache.archiva.repository.storage.fs.FilesystemStorage;
  31. import org.apache.archiva.repository.scanner.mock.ManagedRepositoryContentMock;
  32. import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
  33. import org.apache.commons.io.FileUtils;
  34. import org.junit.Test;
  35. import org.junit.runner.RunWith;
  36. import org.springframework.context.ApplicationContext;
  37. import org.springframework.test.context.ContextConfiguration;
  38. import javax.inject.Inject;
  39. import java.io.IOException;
  40. import java.net.URI;
  41. import java.net.URISyntaxException;
  42. import java.nio.file.Files;
  43. import java.nio.file.Path;
  44. import java.nio.file.Paths;
  45. import java.nio.file.attribute.FileTime;
  46. import java.text.ParseException;
  47. import java.text.SimpleDateFormat;
  48. import java.util.ArrayList;
  49. import java.util.Arrays;
  50. import java.util.Comparator;
  51. import java.util.List;
  52. import java.util.Locale;
  53. import java.util.TimeZone;
  54. import static org.hamcrest.CoreMatchers.is;
  55. import static org.junit.Assert.assertThat;
  56. /**
  57. * RepositoryScannerTest
  58. */
  59. @RunWith(ArchivaSpringJUnit4ClassRunner.class)
  60. @ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml" })
  61. public class RepositoryScannerTest
  62. extends TestCase
  63. {
  64. @Inject
  65. ApplicationContext applicationContext;
  66. Path repoBaseDir;
  67. private Path getRepoBaseDir() {
  68. if (repoBaseDir==null) {
  69. try
  70. {
  71. repoBaseDir =Paths.get(Thread.currentThread( ).getContextClassLoader( ).getResource( "repositories" ).toURI());
  72. }
  73. catch ( URISyntaxException e )
  74. {
  75. throw new RuntimeException( "Could not retrieve repository base directory" );
  76. }
  77. }
  78. return repoBaseDir;
  79. }
  80. protected EditableManagedRepository createRepository( String id, String name, Path location ) throws IOException {
  81. FileLockManager lockManager = new DefaultFileLockManager();
  82. FilesystemStorage storage = new FilesystemStorage(location.toAbsolutePath(), lockManager);
  83. BasicManagedRepository repo = new BasicManagedRepository(id, name, storage);
  84. repo.setLocation( location.toAbsolutePath().toUri());
  85. repo.setContent(new ManagedRepositoryContentMock(repo));
  86. return repo;
  87. }
  88. protected EditableRemoteRepository createRemoteRepository( String id, String name, String url ) throws URISyntaxException, IOException {
  89. BasicRemoteRepository repo = BasicRemoteRepository.newFilesystemInstance(id, name, Paths.get("remotes"));
  90. repo.setLocation( new URI( url ) );
  91. return repo;
  92. }
  93. private static final String[] ARTIFACT_PATTERNS =
  94. new String[]{ "**/*.jar", "**/*.pom", "**/*.rar", "**/*.zip", "**/*.war", "**/*.tar.gz" };
  95. private ManagedRepository createDefaultRepository() throws IOException, URISyntaxException
  96. {
  97. Path repoDir = getRepoBaseDir().resolve("default-repository" );
  98. assertTrue( "Default Test Repository should exist.", Files.exists(repoDir) && Files.isDirectory(repoDir) );
  99. return createRepository( "testDefaultRepo", "Test Default Repository", repoDir );
  100. }
  101. private ManagedRepository createSimpleRepository()
  102. throws IOException, ParseException
  103. {
  104. Path srcDir = getRepoBaseDir().resolve("simple-repository" );
  105. Path repoDir = Paths.get( System.getProperty( "basedir" ), "target/test-repos/simple-repository" );
  106. org.apache.archiva.common.utils.FileUtils.deleteDirectory( repoDir );
  107. FileUtils.copyDirectory( srcDir.toFile(), repoDir.toFile() );
  108. Path repoFile = repoDir.resolve(
  109. "groupId/snapshot-artifact/1.0-alpha-1-SNAPSHOT/snapshot-artifact-1.0-alpha-1-20050611.202024-1.pom" );
  110. Files.setLastModifiedTime(repoFile, FileTime.fromMillis(getTimestampAsMillis( "20050611.202024" ) ));
  111. assertTrue( "Simple Test Repository should exist.", Files.exists(repoDir) && Files.isDirectory(repoDir) );
  112. return createRepository( "testSimpleRepo", "Test Simple Repository", repoDir );
  113. }
  114. private static long getTimestampAsMillis( String timestamp )
  115. throws ParseException
  116. {
  117. SimpleDateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss", Locale.US );
  118. fmt.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
  119. return fmt.parse( timestamp ).getTime();
  120. }
  121. private ManagedRepository createLegacyRepository() throws IOException {
  122. Path repoDir = getRepoBaseDir().resolve("legacy-repository" );
  123. assertTrue( "Legacy Test Repository should exist.", Files.exists(repoDir) && Files.isDirectory(repoDir) );
  124. EditableManagedRepository repo = createRepository( "testLegacyRepo", "Test Legacy Repository", repoDir );
  125. repo.setLayout( "legacy" );
  126. return repo;
  127. }
  128. private void assertMinimumHits( String msg, int minimumHitCount, long actualCount )
  129. {
  130. if ( actualCount < minimumHitCount )
  131. {
  132. fail( "Minimum hit count on " + msg + " not satisfied. Expected more than <" + minimumHitCount
  133. + ">, but actually got <" + actualCount + ">." );
  134. }
  135. }
  136. private RepositoryScanner lookupRepositoryScanner()
  137. throws Exception
  138. {
  139. return applicationContext.getBean( RepositoryScanner.class );
  140. }
  141. private List<String> getIgnoreList()
  142. {
  143. List<String> ignores = new ArrayList<>();
  144. ignores.addAll( Arrays.asList( RepositoryScanner.IGNORABLE_CONTENT ) );
  145. return ignores;
  146. }
  147. @Test
  148. public void testTimestampRepositoryScanner()
  149. throws Exception
  150. {
  151. ManagedRepository repository = createSimpleRepository();
  152. List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>();
  153. KnownScanConsumer consumer = new KnownScanConsumer();
  154. consumer.setIncludes( ARTIFACT_PATTERNS );
  155. knownConsumers.add( consumer );
  156. List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>();
  157. InvalidScanConsumer badconsumer = new InvalidScanConsumer();
  158. invalidConsumers.add( badconsumer );
  159. RepositoryScanner scanner = lookupRepositoryScanner();
  160. RepositoryScanStatistics stats = scanner.scan( repository, knownConsumers, invalidConsumers, getIgnoreList(),
  161. getTimestampAsMillis( "20061101.000000" ) );
  162. assertNotNull( "Stats should not be null.", stats );
  163. assertEquals( "Stats.totalFileCount", 4, stats.getTotalFileCount() );
  164. assertEquals( "Stats.newFileCount", 3, stats.getNewFileCount() );
  165. assertEquals( "Processed Count", 2, consumer.getProcessCount() );
  166. assertEquals( "Processed Count (of invalid items)", 1, badconsumer.getProcessCount() );
  167. }
  168. @Test
  169. public void testTimestampRepositoryScannerFreshScan()
  170. throws Exception
  171. {
  172. ManagedRepository repository = createSimpleRepository();
  173. List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>();
  174. KnownScanConsumer consumer = new KnownScanConsumer();
  175. consumer.setIncludes( ARTIFACT_PATTERNS );
  176. knownConsumers.add( consumer );
  177. List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>();
  178. InvalidScanConsumer badconsumer = new InvalidScanConsumer();
  179. invalidConsumers.add( badconsumer );
  180. RepositoryScanner scanner = lookupRepositoryScanner();
  181. RepositoryScanStatistics stats =
  182. scanner.scan( repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN );
  183. assertNotNull( "Stats should not be null.", stats );
  184. assertEquals( "Stats.totalFileCount", 4, stats.getTotalFileCount() );
  185. assertEquals( "Stats.newFileCount", 4, stats.getNewFileCount() );
  186. assertEquals( "Processed Count", 3, consumer.getProcessCount() );
  187. assertEquals( "Processed Count (of invalid items)", 1, badconsumer.getProcessCount() );
  188. }
  189. @Test
  190. public void testTimestampRepositoryScannerProcessUnmodified()
  191. throws Exception
  192. {
  193. ManagedRepository repository = createSimpleRepository();
  194. List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>();
  195. KnownScanConsumer consumer = new KnownScanConsumer();
  196. consumer.setProcessUnmodified( true );
  197. consumer.setIncludes( ARTIFACT_PATTERNS );
  198. knownConsumers.add( consumer );
  199. List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>();
  200. InvalidScanConsumer badconsumer = new InvalidScanConsumer();
  201. invalidConsumers.add( badconsumer );
  202. RepositoryScanner scanner = lookupRepositoryScanner();
  203. RepositoryScanStatistics stats = scanner.scan( repository, knownConsumers, invalidConsumers, getIgnoreList(),
  204. getTimestampAsMillis( "20061101.000000" ) );
  205. assertNotNull( "Stats should not be null.", stats );
  206. assertEquals( "Stats.totalFileCount", 4, stats.getTotalFileCount() );
  207. assertEquals( "Stats.newFileCount", 3, stats.getNewFileCount() );
  208. assertEquals( "Processed Count", 3, consumer.getProcessCount() );
  209. assertEquals( "Processed Count (of invalid items)", 1, badconsumer.getProcessCount() );
  210. }
  211. @Test
  212. public void testDefaultRepositoryScanner()
  213. throws Exception
  214. {
  215. ManagedRepository repository = createDefaultRepository();
  216. List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>();
  217. KnownScanConsumer consumer = new KnownScanConsumer();
  218. consumer.setIncludes(
  219. new String[]{ "**/*.jar", "**/*.war", "**/*.pom", "**/maven-metadata.xml", "**/*-site.xml", "**/*.zip",
  220. "**/*.tar.gz", "**/*.sha1", "**/*.md5" }
  221. );
  222. knownConsumers.add( consumer );
  223. List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>();
  224. InvalidScanConsumer badconsumer = new InvalidScanConsumer();
  225. invalidConsumers.add( badconsumer );
  226. RepositoryScanner scanner = lookupRepositoryScanner();
  227. RepositoryScanStatistics stats =
  228. scanner.scan( repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN );
  229. assertNotNull( "Stats should not be null.", stats );
  230. assertMinimumHits( "Stats.totalFileCount", 17, stats.getTotalFileCount() );
  231. assertMinimumHits( "Processed Count", 17, consumer.getProcessCount() );
  232. assertEquals( "Processed Count (of invalid items):" + badconsumer.getPaths(), 6, badconsumer.getProcessCount() );
  233. List<String> paths = new ArrayList<>( badconsumer.getPaths() );
  234. paths.sort( Comparator.naturalOrder() );
  235. List<String> expected = Arrays.asList(
  236. "CVS/Root",
  237. "invalid/invalid/1/invalid-1",
  238. "javax/sql/jdbc/2.0/maven-metadata-repository.xml",
  239. "javax/sql/jdbc/maven-metadata-repository.xml",
  240. "javax/sql/maven-metadata-repository.xml",
  241. "org/apache/maven/maven-parent/4/maven-parent-4-site_en.xml");
  242. assertThat( paths, is( expected ) );
  243. }
  244. @Test
  245. public void testDefaultRepositoryArtifactScanner()
  246. throws Exception
  247. {
  248. List<String> actualArtifactPaths = new ArrayList<>();
  249. actualArtifactPaths.add( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar" );
  250. actualArtifactPaths.add( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar" );
  251. actualArtifactPaths.add( "invalid/invalid/1.0/invalid-1.0b.jar" );
  252. actualArtifactPaths.add( "invalid/invalid/1.0/invalid-2.0.jar" );
  253. actualArtifactPaths.add( "invalid/invalid-1.0.jar" );
  254. actualArtifactPaths.add( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar" );
  255. actualArtifactPaths.add( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar" );
  256. actualArtifactPaths.add( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar" );
  257. actualArtifactPaths.add( "org/apache/maven/A/1.0/A-1.0.war" );
  258. actualArtifactPaths.add( "org/apache/maven/A/1.0/A-1.0.pom" );
  259. actualArtifactPaths.add( "org/apache/maven/B/2.0/B-2.0.pom" );
  260. actualArtifactPaths.add( "org/apache/maven/B/1.0/B-1.0.pom" );
  261. actualArtifactPaths.add( "org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar" );
  262. actualArtifactPaths.add( "org/apache/maven/C/1.0/C-1.0.war" );
  263. actualArtifactPaths.add( "org/apache/maven/C/1.0/C-1.0.pom" );
  264. actualArtifactPaths.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom" );
  265. actualArtifactPaths.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar" );
  266. actualArtifactPaths.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom" );
  267. actualArtifactPaths.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar" );
  268. actualArtifactPaths.add( "org/apache/maven/discovery/1.0/discovery-1.0.pom" );
  269. actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0-test-sources.jar" );
  270. actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0.jar" );
  271. actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0-sources.jar" );
  272. actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0.zip" );
  273. actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0.tar.gz" );
  274. actualArtifactPaths.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.pom" );
  275. actualArtifactPaths.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.jar" );
  276. actualArtifactPaths.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" );
  277. actualArtifactPaths.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" );
  278. actualArtifactPaths.add( "org/apache/testgroup/discovery/1.0/discovery-1.0.pom" );
  279. actualArtifactPaths.add( "javax/sql/jdbc/2.0/jdbc-2.0.jar" );
  280. ManagedRepository repository = createDefaultRepository();
  281. List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>();
  282. KnownScanConsumer consumer = new KnownScanConsumer();
  283. consumer.setIncludes( ARTIFACT_PATTERNS );
  284. knownConsumers.add( consumer );
  285. List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>();
  286. InvalidScanConsumer badconsumer = new InvalidScanConsumer();
  287. invalidConsumers.add( badconsumer );
  288. RepositoryScanner scanner = lookupRepositoryScanner();
  289. RepositoryScanStatistics stats =
  290. scanner.scan( repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN );
  291. assertNotNull( "Stats should not be null.", stats );
  292. assertMinimumHits( "Stats.totalFileCount", actualArtifactPaths.size(), stats.getTotalFileCount() );
  293. assertMinimumHits( "Processed Count", actualArtifactPaths.size(), consumer.getProcessCount() );
  294. }
  295. @Test
  296. public void testDefaultRepositoryMetadataScanner()
  297. throws Exception
  298. {
  299. List<String> actualMetadataPaths = new ArrayList<>();
  300. actualMetadataPaths.add( "org/apache/maven/some-ejb/1.0/maven-metadata.xml" );
  301. actualMetadataPaths.add( "org/apache/maven/update/test-not-updated/maven-metadata.xml" );
  302. actualMetadataPaths.add( "org/apache/maven/update/test-updated/maven-metadata.xml" );
  303. actualMetadataPaths.add( "org/apache/maven/maven-metadata.xml" );
  304. actualMetadataPaths.add( "org/apache/testgroup/discovery/1.0/maven-metadata.xml" );
  305. actualMetadataPaths.add( "org/apache/testgroup/discovery/maven-metadata.xml" );
  306. actualMetadataPaths.add( "javax/sql/jdbc/2.0/maven-metadata-repository.xml" );
  307. actualMetadataPaths.add( "javax/sql/jdbc/maven-metadata-repository.xml" );
  308. actualMetadataPaths.add( "javax/sql/maven-metadata-repository.xml" );
  309. actualMetadataPaths.add( "javax/maven-metadata.xml" );
  310. ManagedRepository repository = createDefaultRepository();
  311. List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>();
  312. KnownScanConsumer knownConsumer = new KnownScanConsumer();
  313. knownConsumer.setIncludes( new String[]{ "**/maven-metadata*.xml" } );
  314. knownConsumers.add( knownConsumer );
  315. List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>();
  316. InvalidScanConsumer badconsumer = new InvalidScanConsumer();
  317. invalidConsumers.add( badconsumer );
  318. RepositoryScanner scanner = lookupRepositoryScanner();
  319. RepositoryScanStatistics stats =
  320. scanner.scan( repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN );
  321. assertNotNull( "Stats should not be null.", stats );
  322. assertMinimumHits( "Stats.totalFileCount", actualMetadataPaths.size(), stats.getTotalFileCount() );
  323. assertMinimumHits( "Processed Count", actualMetadataPaths.size(), knownConsumer.getProcessCount() );
  324. }
  325. @Test
  326. public void testDefaultRepositoryProjectScanner()
  327. throws Exception
  328. {
  329. List<String> actualProjectPaths = new ArrayList<>();
  330. actualProjectPaths.add( "org/apache/maven/A/1.0/A-1.0.pom" );
  331. actualProjectPaths.add( "org/apache/maven/B/2.0/B-2.0.pom" );
  332. actualProjectPaths.add( "org/apache/maven/B/1.0/B-1.0.pom" );
  333. actualProjectPaths.add( "org/apache/maven/C/1.0/C-1.0.pom" );
  334. actualProjectPaths.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom" );
  335. actualProjectPaths.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom" );
  336. actualProjectPaths.add( "org/apache/maven/discovery/1.0/discovery-1.0.pom" );
  337. actualProjectPaths.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.pom" );
  338. actualProjectPaths.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" );
  339. actualProjectPaths.add( "org/apache/testgroup/discovery/1.0/discovery-1.0.pom" );
  340. ManagedRepository repository = createDefaultRepository();
  341. List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>();
  342. KnownScanConsumer consumer = new KnownScanConsumer();
  343. consumer.setIncludes( new String[]{ "**/*.pom" } );
  344. knownConsumers.add( consumer );
  345. List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>();
  346. InvalidScanConsumer badconsumer = new InvalidScanConsumer();
  347. invalidConsumers.add( badconsumer );
  348. RepositoryScanner scanner = lookupRepositoryScanner();
  349. RepositoryScanStatistics stats =
  350. scanner.scan( repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN );
  351. assertNotNull( "Stats should not be null.", stats );
  352. assertMinimumHits( "Stats.totalFileCount", actualProjectPaths.size(), stats.getTotalFileCount() );
  353. assertMinimumHits( "Processed Count", actualProjectPaths.size(), consumer.getProcessCount() );
  354. }
  355. @Test
  356. public void testLegacyRepositoryArtifactScanner()
  357. throws Exception
  358. {
  359. List<String> actualArtifactPaths = new ArrayList<>();
  360. actualArtifactPaths.add( "invalid/jars/1.0/invalid-1.0.jar" );
  361. actualArtifactPaths.add( "invalid/jars/invalid-1.0.rar" );
  362. actualArtifactPaths.add( "invalid/jars/invalid.jar" );
  363. actualArtifactPaths.add( "invalid/invalid-1.0.jar" );
  364. actualArtifactPaths.add( "javax.sql/jars/jdbc-2.0.jar" );
  365. actualArtifactPaths.add( "org.apache.maven/jars/some-ejb-1.0-client.jar" );
  366. actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0.jar" );
  367. actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0-sources.jar" );
  368. actualArtifactPaths.add( "org.apache.maven/jars/testing-UNKNOWN.jar" );
  369. actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0.zip" );
  370. actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0-20050611.112233-1.jar" );
  371. actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0.tar.gz" );
  372. actualArtifactPaths.add( "org.apache.maven.update/jars/test-not-updated-1.0.jar" );
  373. actualArtifactPaths.add( "org.apache.maven.update/jars/test-updated-1.0.jar" );
  374. ManagedRepository repository = createLegacyRepository();
  375. List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>();
  376. KnownScanConsumer consumer = new KnownScanConsumer();
  377. consumer.setIncludes( ARTIFACT_PATTERNS );
  378. knownConsumers.add( consumer );
  379. List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>();
  380. InvalidScanConsumer badconsumer = new InvalidScanConsumer();
  381. invalidConsumers.add( badconsumer );
  382. RepositoryScanner scanner = lookupRepositoryScanner();
  383. RepositoryScanStatistics stats =
  384. scanner.scan( repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN );
  385. assertNotNull( "Stats should not be null.", stats );
  386. assertMinimumHits( "Stats.totalFileCount", actualArtifactPaths.size(), stats.getTotalFileCount() );
  387. assertMinimumHits( "Processed Count", actualArtifactPaths.size(), consumer.getProcessCount() );
  388. }
  389. }