Package org.apache.maven.archiva.reporting.processor

Source Code of org.apache.maven.archiva.reporting.processor.BadMetadataReportProcessorTest

package org.apache.maven.archiva.reporting.processor;

/*
* 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 org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.reporting.AbstractRepositoryReportsTestCase;
import org.apache.maven.archiva.reporting.database.MetadataResultsDatabase;
import org.apache.maven.archiva.reporting.model.MetadataResults;
import org.apache.maven.archiva.reporting.model.ResultReason;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
import org.apache.maven.artifact.repository.metadata.GroupRepositoryMetadata;
import org.apache.maven.artifact.repository.metadata.Plugin;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
import org.apache.maven.artifact.repository.metadata.Snapshot;
import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
import org.apache.maven.artifact.repository.metadata.Versioning;

import java.util.Iterator;

/**
* BadMetadataReportProcessorTest
*
* @version $Id: BadMetadataReportProcessorTest.java 518714 2007-03-15 18:09:57Z joakime $
*/
public class BadMetadataReportProcessorTest
    extends AbstractRepositoryReportsTestCase
{
    private ArtifactFactory artifactFactory;

    private MetadataReportProcessor badMetadataReportProcessor;

    private MetadataResultsDatabase database;

    protected void setUp()
        throws Exception
    {
        super.setUp();

        artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );

        database = (MetadataResultsDatabase) lookup( MetadataResultsDatabase.ROLE, "default" );

        badMetadataReportProcessor = (MetadataReportProcessor) lookup( MetadataReportProcessor.ROLE, "bad-metadata" );
    }

    protected void tearDown()
        throws Exception
    {
        release( artifactFactory );
        release( badMetadataReportProcessor );
        super.tearDown();
    }
   
    public void testMetadataMissingLastUpdated()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "artifactId", "1.0-alpha-1", "type" );

        Versioning versioning = new Versioning();
        versioning.addVersion( "1.0-alpha-1" );
        versioning.addVersion( "1.0-alpha-2" );

        RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact, versioning );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        assertMetadata( metadata, results );
        assertEquals( "check reason", "Missing lastUpdated element inside the metadata.", result.getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testMetadataMissingVersioning()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "artifactId", "1.0-alpha-1", "type" );

        RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact, null );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        assertMetadata( metadata, results );
        ResultReason result = (ResultReason) failures.next();
        assertEquals( "check reason", "Missing lastUpdated element inside the metadata.", result.getReason() );
        result = (ResultReason) failures.next();
        boolean alpha1First = false;
        if ( result.getReason().indexOf( "alpha-1" ) > 0 )
        {
            alpha1First = true;
        }
        if ( alpha1First )
        {
            assertEquals( "check reason",
                          "Artifact version 1.0-alpha-1 found in the repository but missing in the metadata.", result
                              .getReason() );
        }
        else
        {
            assertEquals( "check reason",
                          "Artifact version 1.0-alpha-2 found in the repository but missing in the metadata.", result
                              .getReason() );
        }
        result = (ResultReason) failures.next();
        if ( !alpha1First )
        {
            assertEquals( "check reason",
                          "Artifact version 1.0-alpha-1 found in the repository but missing in the metadata.", result
                              .getReason() );
        }
        else
        {
            assertEquals( "check reason",
                          "Artifact version 1.0-alpha-2 found in the repository but missing in the metadata.", result
                              .getReason() );
        }
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testSnapshotMetadataMissingVersioning()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "snapshot-artifact",
                                                                 "1.0-alpha-1-SNAPSHOT", "type" );

        RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( artifact );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        assertMetadata( metadata, results );
        ResultReason result = (ResultReason) failures.next();
        assertEquals( "check reason", "Missing lastUpdated element inside the metadata.", result.getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testMetadataValidVersions()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "artifactId", "1.0-alpha-1", "type" );

        Versioning versioning = new Versioning();
        versioning.addVersion( "1.0-alpha-1" );
        versioning.addVersion( "1.0-alpha-2" );
        versioning.setLastUpdated( "20050611.202020" );

        RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact, versioning );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertFalse( "check there are no failures", failures.hasNext() );
    }

    public void testMetadataMissingADirectory()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "artifactId", "1.0-alpha-1", "type" );

        Versioning versioning = new Versioning();
        versioning.addVersion( "1.0-alpha-1" );
        versioning.setLastUpdated( "20050611.202020" );

        RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact, versioning );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        assertMetadata( metadata, results );
        // TODO: should be more robust
        assertEquals( "check reason",
                      "Artifact version 1.0-alpha-2 found in the repository but missing in the metadata.", result
                          .getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testMetadataInvalidArtifactVersion()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "artifactId", "1.0-alpha-1", "type" );

        Versioning versioning = new Versioning();
        versioning.addVersion( "1.0-alpha-1" );
        versioning.addVersion( "1.0-alpha-2" );
        versioning.addVersion( "1.0-alpha-3" );
        versioning.setLastUpdated( "20050611.202020" );

        RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact, versioning );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        assertMetadata( metadata, results );
        // TODO: should be more robust
        assertEquals( "check reason",
                      "Artifact version 1.0-alpha-3 is present in metadata but missing in the repository.", result
                          .getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testMoreThanOneMetadataVersionErrors()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "artifactId", "1.0-alpha-1", "type" );

        Versioning versioning = new Versioning();
        versioning.addVersion( "1.0-alpha-1" );
        versioning.addVersion( "1.0-alpha-3" );
        versioning.setLastUpdated( "20050611.202020" );

        RepositoryMetadata metadata = new ArtifactRepositoryMetadata( artifact, versioning );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        assertMetadata( metadata, results );
        // TODO: should be more robust
        assertEquals( "check reason",
                      "Artifact version 1.0-alpha-3 is present in metadata but missing in the repository.", result
                          .getReason() );
        assertTrue( "check there is a 2nd failure", failures.hasNext() );
        result = (ResultReason) failures.next();
        // TODO: should be more robust
        assertEquals( "check reason",
                      "Artifact version 1.0-alpha-2 found in the repository but missing in the metadata.", result
                          .getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testValidPluginMetadata()
    {
        RepositoryMetadata metadata = new GroupRepositoryMetadata( "groupId" );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "artifactId", "default" ) );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "snapshot-artifact", "default2" ) );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertFalse( "check there are no failures", failures.hasNext() );
    }

    public void testMissingMetadataPlugin()
    {
        RepositoryMetadata metadata = new GroupRepositoryMetadata( "groupId" );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "artifactId", "default" ) );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "snapshot-artifact", "default2" ) );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "missing-plugin", "default3" ) );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        // TODO: should be more robust
        assertEquals( "check reason", "Metadata plugin missing-plugin not found in the repository", result.getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testIncompletePluginMetadata()
    {
        RepositoryMetadata metadata = new GroupRepositoryMetadata( "groupId" );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "artifactId", "default" ) );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        // TODO: should be more robust
        assertEquals( "check reason", "Plugin snapshot-artifact is present in the repository but "
            + "missing in the metadata.", result.getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testInvalidPluginArtifactId()
    {
        RepositoryMetadata metadata = new GroupRepositoryMetadata( "groupId" );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "artifactId", "default" ) );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "snapshot-artifact", "default2" ) );
        metadata.getMetadata().addPlugin( createMetadataPlugin( null, "default3" ) );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "", "default4" ) );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        // TODO: should be more robust
        assertEquals( "check reason", "Missing or empty artifactId in group metadata for plugin default3", result
            .getReason() );
        assertTrue( "check there is a 2nd failure", failures.hasNext() );
        result = (ResultReason) failures.next();
        // TODO: should be more robust
        assertEquals( "check reason", "Missing or empty artifactId in group metadata for plugin default4", result
            .getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testInvalidPluginPrefix()
    {
        RepositoryMetadata metadata = new GroupRepositoryMetadata( "groupId" );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "artifactId", null ) );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "snapshot-artifact", "" ) );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        // TODO: should be more robust
        assertEquals( "check reason", "Missing or empty plugin prefix for artifactId artifactId.", result.getReason() );
        assertTrue( "check there is a 2nd failure", failures.hasNext() );
        result = (ResultReason) failures.next();
        // TODO: should be more robust
        assertEquals( "check reason", "Missing or empty plugin prefix for artifactId snapshot-artifact.", result
            .getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testDuplicatePluginPrefixes()
    {
        RepositoryMetadata metadata = new GroupRepositoryMetadata( "groupId" );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "artifactId", "default" ) );
        metadata.getMetadata().addPlugin( createMetadataPlugin( "snapshot-artifact", "default" ) );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        // TODO: should be more robust
        assertEquals( "check reason", "Duplicate plugin prefix found: default.", result.getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    public void testValidSnapshotMetadata()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "snapshot-artifact",
                                                                 "1.0-alpha-1-SNAPSHOT", "type" );

        Snapshot snapshot = new Snapshot();
        snapshot.setBuildNumber( 1 );
        snapshot.setTimestamp( "20050611.202024" );

        RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( artifact, snapshot );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertFalse( "check there are no failures", failures.hasNext() );
    }

    public void testInvalidSnapshotMetadata()
    {
        Artifact artifact = artifactFactory.createBuildArtifact( "groupId", "snapshot-artifact",
                                                                 "1.0-alpha-1-SNAPSHOT", "type" );

        Snapshot snapshot = new Snapshot();
        snapshot.setBuildNumber( 2 );
        snapshot.setTimestamp( "20050611.202024" );

        RepositoryMetadata metadata = new SnapshotArtifactRepositoryMetadata( artifact, snapshot );

        badMetadataReportProcessor.processMetadata( metadata, repository );

        Iterator failures = database.getIterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        MetadataResults results = (MetadataResults) failures.next();
        failures = results.getFailures().iterator();
        assertTrue( "check there is a failure", failures.hasNext() );
        ResultReason result = (ResultReason) failures.next();
        assertMetadata( metadata, results );
        // TODO: should be more robust
        assertEquals( "check reason", "Snapshot artifact 1.0-alpha-1-20050611.202024-2 does not exist.", result
            .getReason() );
        assertFalse( "check no more failures", failures.hasNext() );
    }

    private static void assertMetadata( RepositoryMetadata metadata, MetadataResults results )
    {
        /* The funky StringUtils.defaultString() is used because of database constraints.
         * The MetadataResults object has a complex primary key consisting of groupId, artifactId, and version.
         * This also means that none of those fields may be null.  however, that doesn't eliminate the
         * ability to have an empty string in place of a null.
         */
        assertEquals( "check metadata", StringUtils.defaultString( metadata.getGroupId() ), results.getGroupId() );
        assertEquals( "check metadata", StringUtils.defaultString( metadata.getArtifactId() ), results.getArtifactId() );
        assertEquals( "check metadata", StringUtils.defaultString( metadata.getBaseVersion() ), results.getVersion() );
    }

    private Plugin createMetadataPlugin( String artifactId, String prefix )
    {
        Plugin plugin = new Plugin();
        plugin.setArtifactId( artifactId );
        plugin.setName( artifactId );
        plugin.setPrefix( prefix );
        return plugin;
    }
}
TOP

Related Classes of org.apache.maven.archiva.reporting.processor.BadMetadataReportProcessorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.