org.apache.archiva.repository.scanner.RepositoryScannerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.archiva.repository.scanner.RepositoryScannerTest.java

Source

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());
    }
}