package org.apache.maven.plugins.assembly.archive.task; /* * 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.maven.artifact.Artifact; import org.apache.maven.model.Model; import org.apache.maven.plugins.assembly.InvalidAssemblerConfigurationException; import org.apache.maven.plugins.assembly.archive.ArchiveCreationException; import org.apache.maven.plugins.assembly.archive.DefaultAssemblyArchiverTest; import org.apache.maven.plugins.assembly.archive.task.testutils.ArtifactMock; import org.apache.maven.plugins.assembly.archive.task.testutils.MockAndControlForAddDependencySetsTask; import org.apache.maven.plugins.assembly.format.AssemblyFormattingException; import org.apache.maven.plugins.assembly.model.DependencySet; import org.apache.maven.project.MavenProject; import org.apache.maven.project.ProjectBuildingException; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.logging.console.ConsoleLogger; import org.easymock.classextension.EasyMockSupport; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.HashSet; import java.util.Set; public class AddDependencySetsTaskTest extends TestCase { private final EasyMockSupport mockManager = new EasyMockSupport(); public void testAddDependencySet_ShouldInterpolateDefaultOutputFileNameMapping() throws AssemblyFormattingException, ArchiveCreationException, InvalidAssemblerConfigurationException, IOException { final String outDir = "tmp/"; final String mainAid = "main"; final String mainGid = "org.maingrp"; final String mainVer = "9"; final String depAid = "dep"; final String depGid = "org.depgrp"; final String depVer = "1"; final String depExt = "war"; final DependencySet ds = new DependencySet(); ds.setOutputDirectory( outDir ); ds.setDirectoryMode( Integer.toString( 10, 8 ) ); ds.setFileMode( Integer.toString( 10, 8 ) ); final Model mainModel = new Model(); mainModel.setArtifactId( mainAid ); mainModel.setGroupId( mainGid ); mainModel.setVersion( mainVer ); final MavenProject mainProject = new MavenProject( mainModel ); final ArtifactMock mainArtifactMock = new ArtifactMock( mockManager, mainGid, mainAid, mainVer, "jar", false ); mainProject.setArtifact( mainArtifactMock.getArtifact() ); final Model depModel = new Model(); depModel.setArtifactId( depAid ); depModel.setGroupId( depGid ); depModel.setVersion( depVer ); depModel.setPackaging( depExt ); final MavenProject depProject = new MavenProject( depModel ); final ArtifactMock depArtifactMock = new ArtifactMock( mockManager, depGid, depAid, depVer, depExt, false ); final File newFile = depArtifactMock.setNewFile(); depProject.setArtifact( depArtifactMock.getArtifact() ); final MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager, mainProject ); macTask.expectBuildFromRepository( depProject ); macTask.expectCSGetFinalName( mainAid + "-" + mainVer ); macTask.expectCSGetRepositories( null, null ); macTask.expectGetDestFile( new File( "junk" ) ); macTask.expectAddFile( newFile, outDir + depAid + "-" + depVer + "." + depExt, 10 ); // macTask.expectGetSession( null ); macTask.expectGetMode( 0222, 0222 ); DefaultAssemblyArchiverTest.setupInterpolators( macTask.configSource ); mockManager.replayAll(); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); final AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ), Collections.singleton( depArtifactMock.getArtifact() ), depProject, macTask.projectBuilder, logger ); task.addDependencySet( ds, macTask.archiver, macTask.configSource ); mockManager.verifyAll(); } public void testAddDependencySet_ShouldNotAddDependenciesWhenProjectHasNone() throws AssemblyFormattingException, ArchiveCreationException, InvalidAssemblerConfigurationException { final MavenProject project = new MavenProject( new Model() ); final MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager ); final DependencySet ds = new DependencySet(); ds.setOutputDirectory( "/out" ); mockManager.replayAll(); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); final AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ), null, project, macTask.projectBuilder, logger ); task.addDependencySet( ds, null, macTask.configSource ); mockManager.verifyAll(); } // TODO: Find a better way of testing the project-stubbing behavior when a ProjectBuildingException takes place. public void testAddDependencySet_ShouldNotAddDependenciesWhenProjectIsStubbed() throws AssemblyFormattingException, ArchiveCreationException, InvalidAssemblerConfigurationException, IOException { final MavenProject project = new MavenProject( new Model() ); final ProjectBuildingException pbe = new ProjectBuildingException( "test", "Test error.", new Throwable() ); final MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager, new MavenProject( new Model() ) ); final String gid = "org.test"; final String aid = "test-dep"; final String version = "2.0-SNAPSHOT"; final String type = "jar"; final File file = new File( "dep-artifact.jar" ); final ArtifactMock depMock = new ArtifactMock( mockManager, gid, aid, version, type, true ); depMock.setBaseVersion( version ); depMock.setFile( file ); final File destFile = new File( "assembly-dep-set.zip" ); macTask.expectGetDestFile( destFile ); macTask.expectBuildFromRepository( pbe ); macTask.expectCSGetRepositories( null, null ); macTask.expectCSGetFinalName( "final-name" ); macTask.expectAddFile( file, "out/" + aid + "-" + version + "." + type ); macTask.expectGetMode( 0222, 0222 ); final DependencySet ds = new DependencySet(); ds.setOutputDirectory( "/out" ); DefaultAssemblyArchiverTest.setupInterpolators( macTask.configSource ); mockManager.replayAll(); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); final AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ), Collections.singleton( depMock.getArtifact() ), project, macTask.projectBuilder, logger ); task.addDependencySet( ds, macTask.archiver, macTask.configSource ); mockManager.verifyAll(); } public void testAddDependencySet_ShouldAddOneDependencyFromProjectWithoutUnpacking() throws AssemblyFormattingException, ArchiveCreationException, IOException, InvalidAssemblerConfigurationException { verifyOneDependencyAdded( "out", false ); } public void testAddDependencySet_ShouldAddOneDependencyFromProjectUnpacked() throws AssemblyFormattingException, ArchiveCreationException, IOException, InvalidAssemblerConfigurationException { verifyOneDependencyAdded( "out", true ); } private void verifyOneDependencyAdded( final String outputLocation, final boolean unpack ) throws AssemblyFormattingException, ArchiveCreationException, IOException, InvalidAssemblerConfigurationException { final MavenProject project = new MavenProject( new Model() ); final DependencySet ds = new DependencySet(); ds.setOutputDirectory( outputLocation ); ds.setOutputFileNameMapping( "artifact" ); ds.setUnpack( unpack ); ds.setScope( Artifact.SCOPE_COMPILE ); ds.setDirectoryMode( Integer.toString( 10, 8 ) ); ds.setFileMode( Integer.toString( 10, 8 ) ); final MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager, new MavenProject( new Model() ) ); final ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", "artifact", "version", "jar", false ); final File artifactFile = artifactMock.setNewFile(); if ( unpack ) { macTask.expectAddArchivedFileSet(); // macTask.expectModeChange( -1, -1, 10, 10, 2 ); } else { macTask.expectAddFile( artifactFile, outputLocation + "/artifact", 10 ); } macTask.expectGetDestFile( new File( "junk" ) ); macTask.expectCSGetFinalName( "final-name" ); macTask.expectCSGetRepositories( null, null ); final MavenProject depProject = new MavenProject( new Model() ); macTask.expectBuildFromRepository( depProject ); macTask.expectGetMode( 0222, 0222 ); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); final AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( ds ), Collections.singleton( artifactMock.getArtifact() ), project, macTask.projectBuilder, logger ); DefaultAssemblyArchiverTest.setupInterpolators( macTask.configSource ); mockManager.replayAll(); task.addDependencySet( ds, macTask.archiver, macTask.configSource ); mockManager.verifyAll(); } public void testGetDependencyArtifacts_ShouldGetOneDependencyArtifact() throws ArchiveCreationException, InvalidAssemblerConfigurationException { final MavenProject project = new MavenProject( new Model() ); final MockAndControlForAddDependencySetsTask macTask = new MockAndControlForAddDependencySetsTask( mockManager ); final ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", "artifact", "version", "jar", false ); project.setArtifacts( Collections.singleton( artifactMock.getArtifact() ) ); final DependencySet dependencySet = new DependencySet(); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); mockManager.replayAll(); final AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( dependencySet ), Collections.singleton( artifactMock.getArtifact() ), project, macTask.projectBuilder, logger ); final Set<Artifact> result = task.resolveDependencyArtifacts( dependencySet ); assertNotNull( result ); assertEquals( 1, result.size() ); assertSame( artifactMock.getArtifact(), result.iterator().next() ); mockManager.verifyAll(); } public void testGetDependencyArtifacts_ShouldFilterOneDependencyArtifactViaInclude() throws ArchiveCreationException, InvalidAssemblerConfigurationException { final MavenProject project = new MavenProject( new Model() ); final Set<Artifact> artifacts = new HashSet<Artifact>(); final ArtifactMock am = new ArtifactMock( mockManager, "group", "artifact", "1.0", "jar", false ); am.setDependencyTrail( Collections.singletonList( project.getId() ) ); artifacts.add( am.getArtifact() ); final ArtifactMock am2 = new ArtifactMock( mockManager, "group2", "artifact2", "1.0", "jar", false ); am2.setDependencyTrail( Collections.singletonList( project.getId() ) ); artifacts.add( am2.getArtifact() ); final DependencySet dependencySet = new DependencySet(); dependencySet.addInclude( "group:artifact" ); dependencySet.setUseTransitiveFiltering( true ); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); mockManager.replayAll(); final AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( dependencySet ), artifacts, project, null, logger ); final Set<Artifact> result = task.resolveDependencyArtifacts( dependencySet ); assertNotNull( result ); assertEquals( 1, result.size() ); assertSame( am.getArtifact(), result.iterator().next() ); mockManager.verifyAll(); } public void testGetDependencyArtifacts_ShouldIgnoreTransitivePathFilteringWhenIncludeNotTransitive() throws ArchiveCreationException, InvalidAssemblerConfigurationException { final MavenProject project = new MavenProject( new Model() ); final Set<Artifact> artifacts = new HashSet<Artifact>(); final ArtifactMock am = new ArtifactMock( mockManager, "group", "artifact", "1.0", "jar", false ); artifacts.add( am.getArtifact() ); final ArtifactMock am2 = new ArtifactMock( mockManager, "group2", "artifact2", "1.0", "jar", false ); artifacts.add( am2.getArtifact() ); final DependencySet dependencySet = new DependencySet(); dependencySet.addInclude( "group:artifact" ); dependencySet.setUseTransitiveFiltering( false ); final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ); mockManager.replayAll(); final AddDependencySetsTask task = new AddDependencySetsTask( Collections.singletonList( dependencySet ), artifacts, project, null, logger ); final Set<Artifact> result = task.resolveDependencyArtifacts( dependencySet ); assertNotNull( result ); assertEquals( 1, result.size() ); assertSame( am.getArtifact(), result.iterator().next() ); mockManager.verifyAll(); } }