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 21KB

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