Java tutorial
package org.apache.archiva.repository.scanner; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import junit.framework.TestCase; import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.admin.model.beans.RemoteRepository; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.commons.io.FileUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Paths; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.TimeZone; /** * RepositoryScannerTest */ @RunWith(ArchivaSpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml" }) public class RepositoryScannerTest extends TestCase { @Inject ApplicationContext applicationContext; protected ManagedRepository createRepository(String id, String name, File location) { ManagedRepository repo = new ManagedRepository(); repo.setId(id); repo.setName(name); repo.setLocation(location.getAbsolutePath()); return repo; } protected RemoteRepository createRemoteRepository(String id, String name, String url) { RemoteRepository repo = new RemoteRepository(); repo.setId(id); repo.setName(name); repo.setUrl(url); return repo; } private static final String[] ARTIFACT_PATTERNS = new String[] { "**/*.jar", "**/*.pom", "**/*.rar", "**/*.zip", "**/*.war", "**/*.tar.gz" }; private ManagedRepository createDefaultRepository() { File repoDir = Paths.get(System.getProperty("basedir"), "src/test/repositories/default-repository") .toFile(); assertTrue("Default Test Repository should exist.", repoDir.exists() && repoDir.isDirectory()); return createRepository("testDefaultRepo", "Test Default Repository", repoDir); } private ManagedRepository createSimpleRepository() throws IOException, ParseException { File srcDir = Paths.get(System.getProperty("basedir"), "src/test/repositories/simple-repository").toFile(); File repoDir = Paths.get(System.getProperty("basedir"), "target/test-repos/simple-repository").toFile(); FileUtils.deleteDirectory(repoDir); FileUtils.copyDirectory(srcDir, repoDir); File repoFile = new File(repoDir, "groupId/snapshot-artifact/1.0-alpha-1-SNAPSHOT/snapshot-artifact-1.0-alpha-1-20050611.202024-1.pom"); repoFile.setLastModified(getTimestampAsMillis("20050611.202024")); assertTrue("Simple Test Repository should exist.", repoDir.exists() && repoDir.isDirectory()); return createRepository("testSimpleRepo", "Test Simple Repository", repoDir); } private static long getTimestampAsMillis(String timestamp) throws ParseException { SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd.HHmmss", Locale.US); fmt.setTimeZone(TimeZone.getTimeZone("UTC")); return fmt.parse(timestamp).getTime(); } private ManagedRepository createLegacyRepository() { File repoDir = Paths.get(System.getProperty("basedir"), "src/test/repositories/legacy-repository").toFile(); assertTrue("Legacy Test Repository should exist.", repoDir.exists() && repoDir.isDirectory()); ManagedRepository repo = createRepository("testLegacyRepo", "Test Legacy Repository", repoDir); repo.setLayout("legacy"); return repo; } private void assertMinimumHits(String msg, int minimumHitCount, long actualCount) { if (actualCount < minimumHitCount) { fail("Minimum hit count on " + msg + " not satisfied. Expected more than <" + minimumHitCount + ">, but actually got <" + actualCount + ">."); } } private RepositoryScanner lookupRepositoryScanner() throws Exception { return applicationContext.getBean(RepositoryScanner.class); } private List<String> getIgnoreList() { List<String> ignores = new ArrayList<>(); ignores.addAll(Arrays.asList(RepositoryScanner.IGNORABLE_CONTENT)); return ignores; } @Test public void testTimestampRepositoryScanner() throws Exception { ManagedRepository repository = createSimpleRepository(); List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>(); KnownScanConsumer consumer = new KnownScanConsumer(); consumer.setIncludes(ARTIFACT_PATTERNS); knownConsumers.add(consumer); List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>(); InvalidScanConsumer badconsumer = new InvalidScanConsumer(); invalidConsumers.add(badconsumer); RepositoryScanner scanner = lookupRepositoryScanner(); RepositoryScanStatistics stats = scanner.scan(repository, knownConsumers, invalidConsumers, getIgnoreList(), getTimestampAsMillis("20061101.000000")); assertNotNull("Stats should not be null.", stats); assertEquals("Stats.totalFileCount", 4, stats.getTotalFileCount()); assertEquals("Stats.newFileCount", 3, stats.getNewFileCount()); assertEquals("Processed Count", 2, consumer.getProcessCount()); assertEquals("Processed Count (of invalid items)", 1, badconsumer.getProcessCount()); } @Test public void testTimestampRepositoryScannerFreshScan() throws Exception { ManagedRepository repository = createSimpleRepository(); List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>(); KnownScanConsumer consumer = new KnownScanConsumer(); consumer.setIncludes(ARTIFACT_PATTERNS); knownConsumers.add(consumer); List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>(); InvalidScanConsumer badconsumer = new InvalidScanConsumer(); invalidConsumers.add(badconsumer); RepositoryScanner scanner = lookupRepositoryScanner(); RepositoryScanStatistics stats = scanner.scan(repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN); assertNotNull("Stats should not be null.", stats); assertEquals("Stats.totalFileCount", 4, stats.getTotalFileCount()); assertEquals("Stats.newFileCount", 4, stats.getNewFileCount()); assertEquals("Processed Count", 3, consumer.getProcessCount()); assertEquals("Processed Count (of invalid items)", 1, badconsumer.getProcessCount()); } @Test public void testTimestampRepositoryScannerProcessUnmodified() throws Exception { ManagedRepository repository = createSimpleRepository(); List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>(); KnownScanConsumer consumer = new KnownScanConsumer(); consumer.setProcessUnmodified(true); consumer.setIncludes(ARTIFACT_PATTERNS); knownConsumers.add(consumer); List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>(); InvalidScanConsumer badconsumer = new InvalidScanConsumer(); invalidConsumers.add(badconsumer); RepositoryScanner scanner = lookupRepositoryScanner(); RepositoryScanStatistics stats = scanner.scan(repository, knownConsumers, invalidConsumers, getIgnoreList(), getTimestampAsMillis("20061101.000000")); assertNotNull("Stats should not be null.", stats); assertEquals("Stats.totalFileCount", 4, stats.getTotalFileCount()); assertEquals("Stats.newFileCount", 3, stats.getNewFileCount()); assertEquals("Processed Count", 3, consumer.getProcessCount()); assertEquals("Processed Count (of invalid items)", 1, badconsumer.getProcessCount()); } @Test public void testDefaultRepositoryScanner() throws Exception { ManagedRepository repository = createDefaultRepository(); List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>(); KnownScanConsumer consumer = new KnownScanConsumer(); consumer.setIncludes(new String[] { "**/*.jar", "**/*.war", "**/*.pom", "**/maven-metadata.xml", "**/*-site.xml", "**/*.zip", "**/*.tar.gz", "**/*.sha1", "**/*.md5" }); knownConsumers.add(consumer); List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>(); InvalidScanConsumer badconsumer = new InvalidScanConsumer(); invalidConsumers.add(badconsumer); RepositoryScanner scanner = lookupRepositoryScanner(); RepositoryScanStatistics stats = scanner.scan(repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN); assertNotNull("Stats should not be null.", stats); assertMinimumHits("Stats.totalFileCount", 17, stats.getTotalFileCount()); assertMinimumHits("Processed Count", 17, consumer.getProcessCount()); assertEquals("Processed Count (of invalid items):" + badconsumer.getPaths(), 6, badconsumer.getProcessCount()); } @Test public void testDefaultRepositoryArtifactScanner() throws Exception { List<String> actualArtifactPaths = new ArrayList<>(); actualArtifactPaths.add("invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar"); actualArtifactPaths.add("invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar"); actualArtifactPaths.add("invalid/invalid/1.0/invalid-1.0b.jar"); actualArtifactPaths.add("invalid/invalid/1.0/invalid-2.0.jar"); actualArtifactPaths.add("invalid/invalid-1.0.jar"); actualArtifactPaths.add("org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar"); actualArtifactPaths.add("org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar"); actualArtifactPaths.add("org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar"); actualArtifactPaths.add("org/apache/maven/A/1.0/A-1.0.war"); actualArtifactPaths.add("org/apache/maven/A/1.0/A-1.0.pom"); actualArtifactPaths.add("org/apache/maven/B/2.0/B-2.0.pom"); actualArtifactPaths.add("org/apache/maven/B/1.0/B-1.0.pom"); actualArtifactPaths.add("org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar"); actualArtifactPaths.add("org/apache/maven/C/1.0/C-1.0.war"); actualArtifactPaths.add("org/apache/maven/C/1.0/C-1.0.pom"); actualArtifactPaths.add("org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom"); actualArtifactPaths.add("org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar"); actualArtifactPaths.add("org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom"); actualArtifactPaths.add("org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar"); actualArtifactPaths.add("org/apache/maven/discovery/1.0/discovery-1.0.pom"); actualArtifactPaths.add("org/apache/maven/testing/1.0/testing-1.0-test-sources.jar"); actualArtifactPaths.add("org/apache/maven/testing/1.0/testing-1.0.jar"); actualArtifactPaths.add("org/apache/maven/testing/1.0/testing-1.0-sources.jar"); actualArtifactPaths.add("org/apache/maven/testing/1.0/testing-1.0.zip"); actualArtifactPaths.add("org/apache/maven/testing/1.0/testing-1.0.tar.gz"); actualArtifactPaths.add("org/apache/maven/samplejar/2.0/samplejar-2.0.pom"); actualArtifactPaths.add("org/apache/maven/samplejar/2.0/samplejar-2.0.jar"); actualArtifactPaths.add("org/apache/maven/samplejar/1.0/samplejar-1.0.pom"); actualArtifactPaths.add("org/apache/maven/samplejar/1.0/samplejar-1.0.jar"); actualArtifactPaths.add("org/apache/testgroup/discovery/1.0/discovery-1.0.pom"); actualArtifactPaths.add("javax/sql/jdbc/2.0/jdbc-2.0.jar"); ManagedRepository repository = createDefaultRepository(); List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>(); KnownScanConsumer consumer = new KnownScanConsumer(); consumer.setIncludes(ARTIFACT_PATTERNS); knownConsumers.add(consumer); List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>(); InvalidScanConsumer badconsumer = new InvalidScanConsumer(); invalidConsumers.add(badconsumer); RepositoryScanner scanner = lookupRepositoryScanner(); RepositoryScanStatistics stats = scanner.scan(repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN); assertNotNull("Stats should not be null.", stats); assertMinimumHits("Stats.totalFileCount", actualArtifactPaths.size(), stats.getTotalFileCount()); assertMinimumHits("Processed Count", actualArtifactPaths.size(), consumer.getProcessCount()); } @Test public void testDefaultRepositoryMetadataScanner() throws Exception { List<String> actualMetadataPaths = new ArrayList<>(); actualMetadataPaths.add("org/apache/maven/some-ejb/1.0/maven-metadata.xml"); actualMetadataPaths.add("org/apache/maven/update/test-not-updated/maven-metadata.xml"); actualMetadataPaths.add("org/apache/maven/update/test-updated/maven-metadata.xml"); actualMetadataPaths.add("org/apache/maven/maven-metadata.xml"); actualMetadataPaths.add("org/apache/testgroup/discovery/1.0/maven-metadata.xml"); actualMetadataPaths.add("org/apache/testgroup/discovery/maven-metadata.xml"); actualMetadataPaths.add("javax/sql/jdbc/2.0/maven-metadata-repository.xml"); actualMetadataPaths.add("javax/sql/jdbc/maven-metadata-repository.xml"); actualMetadataPaths.add("javax/sql/maven-metadata-repository.xml"); actualMetadataPaths.add("javax/maven-metadata.xml"); ManagedRepository repository = createDefaultRepository(); List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>(); KnownScanConsumer knownConsumer = new KnownScanConsumer(); knownConsumer.setIncludes(new String[] { "**/maven-metadata*.xml" }); knownConsumers.add(knownConsumer); List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>(); InvalidScanConsumer badconsumer = new InvalidScanConsumer(); invalidConsumers.add(badconsumer); RepositoryScanner scanner = lookupRepositoryScanner(); RepositoryScanStatistics stats = scanner.scan(repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN); assertNotNull("Stats should not be null.", stats); assertMinimumHits("Stats.totalFileCount", actualMetadataPaths.size(), stats.getTotalFileCount()); assertMinimumHits("Processed Count", actualMetadataPaths.size(), knownConsumer.getProcessCount()); } @Test public void testDefaultRepositoryProjectScanner() throws Exception { List<String> actualProjectPaths = new ArrayList<>(); actualProjectPaths.add("org/apache/maven/A/1.0/A-1.0.pom"); actualProjectPaths.add("org/apache/maven/B/2.0/B-2.0.pom"); actualProjectPaths.add("org/apache/maven/B/1.0/B-1.0.pom"); actualProjectPaths.add("org/apache/maven/C/1.0/C-1.0.pom"); actualProjectPaths.add("org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom"); actualProjectPaths.add("org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom"); actualProjectPaths.add("org/apache/maven/discovery/1.0/discovery-1.0.pom"); actualProjectPaths.add("org/apache/maven/samplejar/2.0/samplejar-2.0.pom"); actualProjectPaths.add("org/apache/maven/samplejar/1.0/samplejar-1.0.pom"); actualProjectPaths.add("org/apache/testgroup/discovery/1.0/discovery-1.0.pom"); ManagedRepository repository = createDefaultRepository(); List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>(); KnownScanConsumer consumer = new KnownScanConsumer(); consumer.setIncludes(new String[] { "**/*.pom" }); knownConsumers.add(consumer); List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>(); InvalidScanConsumer badconsumer = new InvalidScanConsumer(); invalidConsumers.add(badconsumer); RepositoryScanner scanner = lookupRepositoryScanner(); RepositoryScanStatistics stats = scanner.scan(repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN); assertNotNull("Stats should not be null.", stats); assertMinimumHits("Stats.totalFileCount", actualProjectPaths.size(), stats.getTotalFileCount()); assertMinimumHits("Processed Count", actualProjectPaths.size(), consumer.getProcessCount()); } @Test public void testLegacyRepositoryArtifactScanner() throws Exception { List<String> actualArtifactPaths = new ArrayList<>(); actualArtifactPaths.add("invalid/jars/1.0/invalid-1.0.jar"); actualArtifactPaths.add("invalid/jars/invalid-1.0.rar"); actualArtifactPaths.add("invalid/jars/invalid.jar"); actualArtifactPaths.add("invalid/invalid-1.0.jar"); actualArtifactPaths.add("javax.sql/jars/jdbc-2.0.jar"); actualArtifactPaths.add("org.apache.maven/jars/some-ejb-1.0-client.jar"); actualArtifactPaths.add("org.apache.maven/jars/testing-1.0.jar"); actualArtifactPaths.add("org.apache.maven/jars/testing-1.0-sources.jar"); actualArtifactPaths.add("org.apache.maven/jars/testing-UNKNOWN.jar"); actualArtifactPaths.add("org.apache.maven/jars/testing-1.0.zip"); actualArtifactPaths.add("org.apache.maven/jars/testing-1.0-20050611.112233-1.jar"); actualArtifactPaths.add("org.apache.maven/jars/testing-1.0.tar.gz"); actualArtifactPaths.add("org.apache.maven.update/jars/test-not-updated-1.0.jar"); actualArtifactPaths.add("org.apache.maven.update/jars/test-updated-1.0.jar"); ManagedRepository repository = createLegacyRepository(); List<KnownRepositoryContentConsumer> knownConsumers = new ArrayList<>(); KnownScanConsumer consumer = new KnownScanConsumer(); consumer.setIncludes(ARTIFACT_PATTERNS); knownConsumers.add(consumer); List<InvalidRepositoryContentConsumer> invalidConsumers = new ArrayList<>(); InvalidScanConsumer badconsumer = new InvalidScanConsumer(); invalidConsumers.add(badconsumer); RepositoryScanner scanner = lookupRepositoryScanner(); RepositoryScanStatistics stats = scanner.scan(repository, knownConsumers, invalidConsumers, getIgnoreList(), RepositoryScanner.FRESH_SCAN); assertNotNull("Stats should not be null.", stats); assertMinimumHits("Stats.totalFileCount", actualArtifactPaths.size(), stats.getTotalFileCount()); assertMinimumHits("Processed Count", actualArtifactPaths.size(), consumer.getProcessCount()); } }