blob: 9e4dda2c8c536cb3b2f35f5079c284c15317a9b0 [file] [log] [blame]
package org.apache.maven.plugins.assembly.io;
/*
* 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.artifact.repository.ArtifactRepository;
import org.apache.maven.model.Model;
import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
import org.apache.maven.plugins.assembly.InvalidAssemblerConfigurationException;
import org.apache.maven.plugins.assembly.archive.DefaultAssemblyArchiverTest;
import org.apache.maven.plugins.assembly.interpolation.AssemblyInterpolator;
import org.apache.maven.plugins.assembly.model.Assembly;
import org.apache.maven.plugins.assembly.model.Component;
import org.apache.maven.plugins.assembly.model.ContainerDescriptorHandlerConfig;
import org.apache.maven.plugins.assembly.model.DependencySet;
import org.apache.maven.plugins.assembly.model.FileItem;
import org.apache.maven.plugins.assembly.model.FileSet;
import org.apache.maven.plugins.assembly.model.Repository;
import org.apache.maven.plugins.assembly.model.io.xpp3.AssemblyXpp3Writer;
import org.apache.maven.plugins.assembly.model.io.xpp3.ComponentXpp3Reader;
import org.apache.maven.plugins.assembly.model.io.xpp3.ComponentXpp3Writer;
import org.apache.maven.plugins.assembly.testutils.TestFileManager;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator;
import org.codehaus.plexus.interpolation.fixed.InterpolationState;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
import org.codehaus.plexus.util.IOUtil;
import org.easymock.classextension.EasyMockSupport;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import static org.easymock.EasyMock.expect;
public class DefaultAssemblyReaderTest
extends TestCase
{
private TestFileManager fileManager;
private EasyMockSupport mockManager;
private AssemblerConfigurationSource configSource;
public static StringReader writeToStringReader( Assembly assembly )
throws IOException
{
final StringWriter sw = new StringWriter();
final AssemblyXpp3Writer assemblyWriter = new AssemblyXpp3Writer();
assemblyWriter.write( sw, assembly );
return new StringReader( sw.toString() );
}
@Override
public void setUp()
{
fileManager = new TestFileManager( "assembly-reader.test.", ".xml" );
mockManager = new EasyMockSupport();
configSource = mockManager.createMock( AssemblerConfigurationSource.class );
ArtifactRepository localRepo = mockManager.createMock( ArtifactRepository.class );
expect( localRepo.getBasedir() ).andReturn( "/path/to/local/repo" ).anyTimes();
expect( configSource.getLocalRepository() ).andReturn( localRepo ).anyTimes();
expect( configSource.getRemoteRepositories() ).andReturn(
Collections.<ArtifactRepository>emptyList() ).anyTimes();
expect( configSource.getMavenSession() ).andReturn( null ).anyTimes();
}
@Override
public void tearDown()
throws IOException
{
fileManager.cleanUp();
}
public void testIncludeSiteInAssembly_ShouldFailIfSiteDirectoryNonExistent()
throws IOException
{
final File siteDir = File.createTempFile( "assembly-reader.", ".test" );
siteDir.delete();
expect( configSource.getSiteDirectory() ).andReturn( siteDir ).anyTimes();
final Assembly assembly = new Assembly();
mockManager.replayAll();
try
{
new DefaultAssemblyReader().includeSiteInAssembly( assembly, configSource );
fail( "Should fail when site directory is non-existent." );
}
catch ( final InvalidAssemblerConfigurationException e )
{
// this should happen.
}
mockManager.verifyAll();
}
// public void testReadComponent_ShouldReadComponentFromXml()
// throws IOException, AssemblyReadException
// {
// Component component = new Component();
//
// FileSet fileSet = new FileSet();
// fileSet.setDirectory( "/dir" );
//
// component.addFileSet( fileSet );
//
// StringWriter sw = new StringWriter();
//
// ComponentXpp3Writer componentWriter = new ComponentXpp3Writer();
//
// componentWriter.write( sw, component );
//
// Component result = new DefaultAssemblyReader().readComponent( new StringReader( sw.toString() ) );
//
// List<FileSet> fileSets = result.getFileSets();
//
// assertNotNull( fileSets );
// assertEquals( 1, fileSets.size() );
//
// FileSet fs = (FileSet) fileSets.get( 0 );
//
// assertEquals( "/dir", fs.getDirectory() );
// }
//
// public void testGetComponentFromFile_ShouldReadComponent()
// throws IOException, AssemblyReadException
// {
// Component component = new Component();
//
// FileSet fileSet = new FileSet();
// fileSet.setDirectory( "/dir" );
//
// component.addFileSet( fileSet );
//
// File componentFile = fileManager.createTempFile();
//
// FileWriter writer = null;
//
// try
// {
// writer = new FileWriter( componentFile );
//
// ComponentXpp3Writer componentWriter = new ComponentXpp3Writer();
//
// componentWriter.write( writer, component );
// }
// finally
// {
// IOUtil.close( writer );
// }
//
// File basedir = componentFile.getParentFile();
// String filename = componentFile.getName();
//
// configSource.getBasedir();
// configSourceControl.setReturnValue( basedir );
//
// mockManager.replayAll();
//
// Component result = new DefaultAssemblyReader().getComponentFromFile( filename, configSource );
//
// List<FileSet> fileSets = result.getFileSets();
//
// assertNotNull( fileSets );
// assertEquals( 1, fileSets.size() );
//
// FileSet fs = (FileSet) fileSets.get( 0 );
//
// assertEquals( "/dir", fs.getDirectory() );
//
// mockManager.verifyAll();
// }
public void testIncludeSiteInAssembly_ShouldAddSiteDirFileSetWhenDirExists()
throws IOException, InvalidAssemblerConfigurationException
{
final File siteDir = fileManager.createTempDir();
expect( configSource.getSiteDirectory() ).andReturn( siteDir ).anyTimes();
final Assembly assembly = new Assembly();
mockManager.replayAll();
new DefaultAssemblyReader().includeSiteInAssembly( assembly, configSource );
final List<FileSet> fileSets = assembly.getFileSets();
assertNotNull( fileSets );
assertEquals( 1, fileSets.size() );
final FileSet fs = fileSets.get( 0 );
assertEquals( siteDir.getPath(), fs.getDirectory() );
mockManager.verifyAll();
}
public void testMergeComponentWithAssembly_ShouldAddOneFileSetToExistingListOfTwo()
{
final Assembly assembly = new Assembly();
FileSet fs = new FileSet();
fs.setDirectory( "/dir" );
assembly.addFileSet( fs );
fs = new FileSet();
fs.setDirectory( "/other-dir" );
assembly.addFileSet( fs );
fs = new FileSet();
fs.setDirectory( "/third-dir" );
final Component component = new Component();
component.addFileSet( fs );
new DefaultAssemblyReader().mergeComponentWithAssembly( component, assembly );
final List<FileSet> fileSets = assembly.getFileSets();
assertNotNull( fileSets );
assertEquals( 3, fileSets.size() );
final FileSet rfs1 = fileSets.get( 0 );
assertEquals( "/dir", rfs1.getDirectory() );
final FileSet rfs2 = fileSets.get( 1 );
assertEquals( "/other-dir", rfs2.getDirectory() );
final FileSet rfs3 = fileSets.get( 2 );
assertEquals( "/third-dir", rfs3.getDirectory() );
}
public void testMergeComponentWithAssembly_ShouldAddOneFileItemToExistingListOfTwo()
{
final Assembly assembly = new Assembly();
FileItem fi = new FileItem();
fi.setSource( "file" );
assembly.addFile( fi );
fi = new FileItem();
fi.setSource( "file2" );
assembly.addFile( fi );
fi = new FileItem();
fi.setSource( "file3" );
final Component component = new Component();
component.addFile( fi );
new DefaultAssemblyReader().mergeComponentWithAssembly( component, assembly );
final List<FileItem> fileItems = assembly.getFiles();
assertNotNull( fileItems );
assertEquals( 3, fileItems.size() );
final FileItem rf1 = fileItems.get( 0 );
assertEquals( "file", rf1.getSource() );
final FileItem rf2 = fileItems.get( 1 );
assertEquals( "file2", rf2.getSource() );
final FileItem rf3 = fileItems.get( 2 );
assertEquals( "file3", rf3.getSource() );
}
public void testMergeComponentWithAssembly_ShouldAddOneDependencySetToExistingListOfTwo()
{
final Assembly assembly = new Assembly();
DependencySet ds = new DependencySet();
ds.setScope( Artifact.SCOPE_RUNTIME );
assembly.addDependencySet( ds );
ds = new DependencySet();
ds.setScope( Artifact.SCOPE_COMPILE );
assembly.addDependencySet( ds );
final Component component = new Component();
ds = new DependencySet();
ds.setScope( Artifact.SCOPE_SYSTEM );
component.addDependencySet( ds );
new DefaultAssemblyReader().mergeComponentWithAssembly( component, assembly );
final List<DependencySet> depSets = assembly.getDependencySets();
assertNotNull( depSets );
assertEquals( 3, depSets.size() );
assertEquals( Artifact.SCOPE_RUNTIME, depSets.get( 0 ).getScope() );
assertEquals( Artifact.SCOPE_COMPILE, depSets.get( 1 ).getScope() );
assertEquals( Artifact.SCOPE_SYSTEM, depSets.get( 2 ).getScope() );
}
public void testMergeComponentWithAssembly_ShouldAddOneRepositoryToExistingListOfTwo()
{
final Assembly assembly = new Assembly();
Repository repo = new Repository();
repo.setScope( Artifact.SCOPE_RUNTIME );
assembly.addRepository( repo );
repo = new Repository();
repo.setScope( Artifact.SCOPE_COMPILE );
assembly.addRepository( repo );
final Component component = new Component();
repo = new Repository();
repo.setScope( Artifact.SCOPE_SYSTEM );
component.addRepository( repo );
new DefaultAssemblyReader().mergeComponentWithAssembly( component, assembly );
final List<Repository> depSets = assembly.getRepositories();
assertNotNull( depSets );
assertEquals( 3, depSets.size() );
assertEquals( Artifact.SCOPE_RUNTIME, depSets.get( 0 ).getScope() );
assertEquals( Artifact.SCOPE_COMPILE, depSets.get( 1 ).getScope() );
assertEquals( Artifact.SCOPE_SYSTEM, depSets.get( 2 ).getScope() );
}
// FIXME: Deep merging should take place...
// public void
// testMergeComponentWithAssembly_ShouldMergeOneFileSetToOneOfExistingTwo()
// {
// Assembly assembly = new Assembly();
//
// FileSet fs = new FileSet();
// fs.setDirectory( "/dir" );
// fs.addInclude( "**/test.txt" );
//
// assembly.addFileSet( fs );
//
// fs = new FileSet();
// fs.setDirectory( "/other-dir" );
// assembly.addFileSet( fs );
//
// fs = new FileSet();
// fs.setDirectory( "/dir" );
// fs.addInclude( "**/components.txt" );
//
// Component component = new Component();
//
// component.addFileSet( fs );
//
// new DefaultAssemblyReader().mergeComponentWithAssembly( component,
// assembly );
//
// List<FileSet> fileSets = assembly.getFileSets();
//
// assertNotNull( fileSets );
// assertEquals( 2, fileSets.size() );
//
// FileSet rfs1 = (FileSet) fileSets.get( 0 );
// assertEquals( "/dir", rfs1.getDirectory() );
//
// List includes = rfs1.getIncludes();
//
// assertNotNull( includes );
// assertEquals( 2, includes.size() );
// assertTrue( includes.contains( "**/test.txt" ) );
// assertTrue( includes.contains( "**/components.txt" ) );
//
// FileSet rfs2 = (FileSet) fileSets.get( 1 );
// assertEquals( "/other-dir", rfs2.getDirectory() );
//
// }
public void testMergeComponentWithAssembly_ShouldAddOneContainerDescriptorHandlerToExistingListOfTwo()
{
final Assembly assembly = new Assembly();
ContainerDescriptorHandlerConfig cfg = new ContainerDescriptorHandlerConfig();
cfg.setHandlerName( "one" );
assembly.addContainerDescriptorHandler( cfg );
cfg = new ContainerDescriptorHandlerConfig();
cfg.setHandlerName( "two" );
assembly.addContainerDescriptorHandler( cfg );
final Component component = new Component();
cfg = new ContainerDescriptorHandlerConfig();
cfg.setHandlerName( "three" );
component.addContainerDescriptorHandler( cfg );
new DefaultAssemblyReader().mergeComponentWithAssembly( component, assembly );
final List<ContainerDescriptorHandlerConfig> result = assembly.getContainerDescriptorHandlers();
assertNotNull( result );
assertEquals( 3, result.size() );
final Iterator<ContainerDescriptorHandlerConfig> it = result.iterator();
assertEquals( "one", it.next().getHandlerName() );
assertEquals( "two", it.next().getHandlerName() );
assertEquals( "three", it.next().getHandlerName() );
}
public void testMergeComponentsWithMainAssembly_ShouldAddOneFileSetToAssembly()
throws IOException, AssemblyReadException
{
final Component component = new Component();
final FileSet fileSet = new FileSet();
fileSet.setDirectory( "/dir" );
component.addFileSet( fileSet );
final File componentFile = fileManager.createTempFile();
Writer writer = null;
try
{
writer = new OutputStreamWriter( new FileOutputStream( componentFile ), "UTF-8" );
final ComponentXpp3Writer componentWriter = new ComponentXpp3Writer();
componentWriter.write( writer, component );
writer.close();
writer = null;
}
finally
{
IOUtil.close( writer );
}
final String filename = componentFile.getName();
final Assembly assembly = new Assembly();
assembly.addComponentDescriptor( filename );
final File basedir = componentFile.getParentFile();
final MavenProject project = new MavenProject();
expect( configSource.getProject() ).andReturn( project ).anyTimes();
expect( configSource.getBasedir() ).andReturn( basedir ).anyTimes();
DefaultAssemblyArchiverTest.setupInterpolators( configSource );
InterpolationState is = new InterpolationState();
ComponentXpp3Reader.ContentTransformer componentIp =
AssemblyInterpolator.componentInterpolator( FixedStringSearchInterpolator.create(), is,
new ConsoleLogger( Logger.LEVEL_DEBUG, "console" ) );
mockManager.replayAll();
new DefaultAssemblyReader().mergeComponentsWithMainAssembly( assembly, null, configSource, componentIp );
final List<FileSet> fileSets = assembly.getFileSets();
assertNotNull( fileSets );
assertEquals( 1, fileSets.size() );
final FileSet fs = fileSets.get( 0 );
assertEquals( "/dir", fs.getDirectory() );
mockManager.verifyAll();
}
public void testReadAssembly_ShouldReadAssemblyWithoutComponentsInterpolationOrSiteDirInclusion()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final Assembly assembly = new Assembly();
assembly.setId( "test" );
final Assembly result = doReadAssembly( assembly );
assertEquals( assembly.getId(), result.getId() );
mockManager.verifyAll();
}
public void testReadAssembly_ShouldReadAssemblyWithSiteDirInclusionFromAssemblyWithoutComponentsOrInterpolation()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final Assembly assembly = new Assembly();
assembly.setId( "test" );
assembly.setIncludeSiteDirectory( true );
final StringReader sr = writeToStringReader( assembly );
final File siteDir = fileManager.createTempDir();
expect( configSource.getSiteDirectory() ).andReturn( siteDir ).anyTimes();
final File basedir = fileManager.createTempDir();
expect( configSource.getBasedir() ).andReturn( basedir ).anyTimes();
final Model model = new Model();
model.setGroupId( "group" );
model.setArtifactId( "artifact" );
model.setVersion( "version" );
final MavenProject project = new MavenProject( model );
expect( configSource.getProject() ).andReturn( project ).anyTimes();
DefaultAssemblyArchiverTest.setupInterpolators( configSource );
mockManager.replayAll();
final Assembly result = new DefaultAssemblyReader().readAssembly( sr, "testLocation", null, configSource );
assertEquals( assembly.getId(), result.getId() );
final List<FileSet> fileSets = result.getFileSets();
assertEquals( 1, fileSets.size() );
assertEquals( "/site", fileSets.get( 0 ).getOutputDirectory() );
mockManager.verifyAll();
}
public void testReadAssembly_ShouldReadAssemblyWithComponentWithoutSiteDirInclusionOrInterpolation()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final File componentsFile = fileManager.createTempFile();
final File basedir = componentsFile.getParentFile();
final String componentsFilename = componentsFile.getName();
final Component component = new Component();
final FileSet fs = new FileSet();
fs.setDirectory( "/dir" );
component.addFileSet( fs );
Writer fw = null;
try
{
fw = new OutputStreamWriter( new FileOutputStream( componentsFile ), "UTF-8" );
new ComponentXpp3Writer().write( fw, component );
fw.close();
fw = null;
}
finally
{
IOUtil.close( fw );
}
final Assembly assembly = new Assembly();
assembly.setId( "test" );
assembly.addComponentDescriptor( componentsFilename );
final StringReader sr = writeToStringReader( assembly );
expect( configSource.getBasedir() ).andReturn( basedir ).anyTimes();
final Model model = new Model();
model.setGroupId( "group" );
model.setArtifactId( "artifact" );
model.setVersion( "version" );
final MavenProject project = new MavenProject( model );
expect( configSource.getProject() ).andReturn( project ).anyTimes();
DefaultAssemblyArchiverTest.setupInterpolators( configSource );
mockManager.replayAll();
final Assembly result = new DefaultAssemblyReader().readAssembly( sr, "testLocation", null, configSource );
assertEquals( assembly.getId(), result.getId() );
final List<FileSet> fileSets = result.getFileSets();
assertEquals( 1, fileSets.size() );
assertEquals( "/dir", fileSets.get( 0 ).getDirectory() );
mockManager.verifyAll();
}
public void
testReadAssembly_ShouldReadAssemblyWithComponentInterpolationWithoutSiteDirInclusionOrAssemblyInterpolation()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final File componentsFile = fileManager.createTempFile();
final File basedir = componentsFile.getParentFile();
final String componentsFilename = componentsFile.getName();
final Component component = new Component();
final FileSet fs = new FileSet();
fs.setDirectory( "${groupId}-dir" );
component.addFileSet( fs );
Writer fw = null;
try
{
fw = new OutputStreamWriter( new FileOutputStream( componentsFile ), "UTF-8" );
new ComponentXpp3Writer().write( fw, component );
fw.close();
fw = null;
}
finally
{
IOUtil.close( fw );
}
final Assembly assembly = new Assembly();
assembly.setId( "test" );
assembly.addComponentDescriptor( componentsFilename );
final StringReader sr = writeToStringReader( assembly );
expect( configSource.getBasedir() ).andReturn( basedir ).atLeastOnce();
final Model model = new Model();
model.setGroupId( "group" );
model.setArtifactId( "artifact" );
model.setVersion( "version" );
final MavenProject project = new MavenProject( model );
expect( configSource.getProject() ).andReturn( project ).atLeastOnce();
DefaultAssemblyArchiverTest.setupInterpolators( configSource );
mockManager.replayAll();
final Assembly result = new DefaultAssemblyReader().readAssembly( sr, "testLocation", null, configSource );
assertEquals( assembly.getId(), result.getId() );
final List<FileSet> fileSets = result.getFileSets();
assertEquals( 1, fileSets.size() );
assertEquals( "group-dir", fileSets.get( 0 ).getDirectory() );
mockManager.verifyAll();
}
public void testReadAssembly_ShouldReadAssemblyWithInterpolationWithoutComponentsOrSiteDirInclusion()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final Assembly assembly = new Assembly();
assembly.setId( "${groupId}-assembly" );
final Assembly result = doReadAssembly( assembly );
assertEquals( "group-assembly", result.getId() );
mockManager.verifyAll();
}
private Assembly doReadAssembly( Assembly assembly )
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final StringReader sr = writeToStringReader( assembly );
final File basedir = fileManager.createTempDir();
expect( configSource.getBasedir() ).andReturn( basedir ).anyTimes();
final Model model = new Model();
model.setGroupId( "group" );
model.setArtifactId( "artifact" );
model.setVersion( "version" );
final MavenProject project = new MavenProject( model );
expect( configSource.getProject() ).andReturn( project ).anyTimes();
DefaultAssemblyArchiverTest.setupInterpolators( configSource );
mockManager.replayAll();
return new DefaultAssemblyReader().readAssembly( sr, "testLocation", null, configSource );
}
public void testGetAssemblyFromDescriptorFile_ShouldReadAssembly()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final Assembly assembly = new Assembly();
assembly.setId( "test" );
final FileSet fs = new FileSet();
fs.setDirectory( "/dir" );
assembly.addFileSet( fs );
final File assemblyFile = fileManager.createTempFile();
final File basedir = assemblyFile.getParentFile();
expect( configSource.getBasedir() ).andReturn( basedir ).anyTimes();
expect( configSource.getProject() ).andReturn( new MavenProject( new Model() ) ).anyTimes();
DefaultAssemblyArchiverTest.setupInterpolators( configSource );
Writer writer = null;
try
{
writer = new OutputStreamWriter( new FileOutputStream( assemblyFile ), "UTF-8" );
new AssemblyXpp3Writer().write( writer, assembly );
writer.close();
writer = null;
}
finally
{
IOUtil.close( writer );
}
mockManager.replayAll();
final Assembly result = new DefaultAssemblyReader().getAssemblyFromDescriptorFile( assemblyFile, configSource );
assertEquals( assembly.getId(), result.getId() );
mockManager.verifyAll();
}
public void testGetAssemblyForDescriptorReference_ShouldReadBinaryAssemblyRef()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final File basedir = fileManager.createTempDir();
expect( configSource.getBasedir() ).andReturn( basedir ).anyTimes();
expect( configSource.getProject() ).andReturn( new MavenProject( new Model() ) ).anyTimes();
expect( configSource.isIgnoreMissingDescriptor() ).andReturn( false ).anyTimes();
DefaultAssemblyArchiverTest.setupInterpolators( configSource );
mockManager.replayAll();
final Assembly result = new DefaultAssemblyReader().getAssemblyForDescriptorReference( "bin", configSource );
assertEquals( "bin", result.getId() );
mockManager.verifyAll();
}
public void testReadAssemblies_ShouldGetAssemblyDescriptorFromSingleFile()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final Assembly assembly = new Assembly();
assembly.setId( "test" );
final FileSet fs = new FileSet();
fs.setDirectory( "/dir" );
assembly.addFileSet( fs );
final File basedir = fileManager.createTempDir();
final List<String> files = writeAssembliesToFile( Collections.singletonList( assembly ), basedir );
final String assemblyFile = files.get( 0 );
final List<Assembly> assemblies = performReadAssemblies( basedir, new String[] { assemblyFile }, null, null );
assertNotNull( assemblies );
assertEquals( 1, assemblies.size() );
final Assembly result = assemblies.get( 0 );
assertEquals( assembly.getId(), result.getId() );
}
public void testReadAssemblies_ShouldFailWhenSingleDescriptorFileMissing()
throws IOException, InvalidAssemblerConfigurationException
{
final File basedir = fileManager.createTempDir();
final File assemblyFile = new File( basedir, "test.xml" );
assemblyFile.delete();
try
{
performReadAssemblies( basedir, null, null, null, false );
fail( "Should fail when descriptor file is missing and ignoreDescriptors == false" );
}
catch ( final AssemblyReadException e )
{
// expected.
}
}
public void testReadAssemblies_ShouldIgnoreMissingSingleDescriptorFileWhenIgnoreIsConfigured()
throws IOException, InvalidAssemblerConfigurationException
{
final File basedir = fileManager.createTempDir();
final File assemblyFile = new File( basedir, "test.xml" );
assemblyFile.delete();
try
{
performReadAssemblies( basedir, null, null, null, true );
}
catch ( final AssemblyReadException e )
{
fail( "Setting ignoreMissingDescriptor == true (true flag in performReadAssemblies, above) should NOT "
+ "produce an exception." );
}
}
public void testReadAssemblies_ShouldGetAssemblyDescriptorFromFileArray()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final Assembly assembly1 = new Assembly();
assembly1.setId( "test" );
final Assembly assembly2 = new Assembly();
assembly2.setId( "test2" );
final List<Assembly> assemblies = new ArrayList<>();
assemblies.add( assembly1 );
assemblies.add( assembly2 );
final File basedir = fileManager.createTempDir();
final List<String> files = writeAssembliesToFile( assemblies, basedir );
final List<Assembly> results =
performReadAssemblies( basedir, files.toArray( new String[files.size()] ), null, null );
assertNotNull( results );
assertEquals( 2, results.size() );
final Assembly result1 = assemblies.get( 0 );
assertEquals( assembly1.getId(), result1.getId() );
final Assembly result2 = assemblies.get( 1 );
assertEquals( assembly2.getId(), result2.getId() );
}
public void testReadAssemblies_ShouldGetAssemblyDescriptorFromMultipleRefs()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final File basedir = fileManager.createTempDir();
final List<Assembly> assemblies =
performReadAssemblies( basedir, null, new String[]{ "bin", "src" }, null );
assertNotNull( assemblies );
assertEquals( 2, assemblies.size() );
final Assembly result = assemblies.get( 0 );
assertEquals( "bin", result.getId() );
final Assembly result2 = assemblies.get( 1 );
assertEquals( "src", result2.getId() );
}
public void testReadAssemblies_ShouldGetAssemblyDescriptorFromDirectory()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final Assembly assembly1 = new Assembly();
assembly1.setId( "test" );
final Assembly assembly2 = new Assembly();
assembly2.setId( "test2" );
final List<Assembly> assemblies = new ArrayList<>();
assemblies.add( assembly1 );
assemblies.add( assembly2 );
final File basedir = fileManager.createTempDir();
writeAssembliesToFile( assemblies, basedir );
final List<Assembly> results = performReadAssemblies( basedir, null, null, basedir );
assertNotNull( results );
assertEquals( 2, results.size() );
final Assembly result1 = assemblies.get( 0 );
assertEquals( assembly1.getId(), result1.getId() );
final Assembly result2 = assemblies.get( 1 );
assertEquals( assembly2.getId(), result2.getId() );
}
public void testReadAssemblies_ShouldGetTwoAssemblyDescriptorsFromDirectoryWithThreeFiles()
throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException
{
final Assembly assembly1 = new Assembly();
assembly1.setId( "test" );
final Assembly assembly2 = new Assembly();
assembly2.setId( "test2" );
final List<Assembly> assemblies = new ArrayList<>();
assemblies.add( assembly1 );
assemblies.add( assembly2 );
final File basedir = fileManager.createTempDir();
writeAssembliesToFile( assemblies, basedir );
fileManager.createFile( basedir, "readme.txt", "This is just a readme file, not a descriptor." );
final List<Assembly> results = performReadAssemblies( basedir, null, null, basedir );
assertNotNull( results );
assertEquals( 2, results.size() );
final Assembly result1 = assemblies.get( 0 );
assertEquals( assembly1.getId(), result1.getId() );
final Assembly result2 = assemblies.get( 1 );
assertEquals( assembly2.getId(), result2.getId() );
}
private List<String> writeAssembliesToFile( final List<Assembly> assemblies, final File dir )
throws IOException
{
final List<String> files = new ArrayList<>();
for ( final Assembly assembly : assemblies )
{
final File assemblyFile = new File( dir, assembly.getId() + ".xml" );
Writer writer = null;
try
{
writer = new OutputStreamWriter( new FileOutputStream( assemblyFile ), "UTF-8" );
new AssemblyXpp3Writer().write( writer, assembly );
writer.close();
writer = null;
}
finally
{
IOUtil.close( writer );
}
files.add( assemblyFile.getAbsolutePath() );
}
return files;
}
private List<Assembly> performReadAssemblies( final File basedir, final String[] descriptors,
final String[] descriptorRefs, final File descriptorDir )
throws AssemblyReadException, InvalidAssemblerConfigurationException
{
return performReadAssemblies( basedir, descriptors, descriptorRefs, descriptorDir, false );
}
private List<Assembly> performReadAssemblies( final File basedir, final String[] descriptors,
final String[] descriptorRefs, final File descriptorDir,
final boolean ignoreMissing )
throws AssemblyReadException, InvalidAssemblerConfigurationException
{
expect( configSource.getDescriptorReferences() ).andReturn( descriptorRefs );
expect( configSource.getDescriptors() ).andReturn( descriptors );
expect( configSource.getDescriptorSourceDirectory() ).andReturn( descriptorDir );
expect( configSource.getBasedir() ).andReturn( basedir ).anyTimes();
expect( configSource.getProject() ).andReturn( new MavenProject( new Model() ) ).anyTimes();
expect( configSource.isIgnoreMissingDescriptor() ).andReturn( ignoreMissing ).anyTimes();
DefaultAssemblyArchiverTest.setupInterpolators( configSource );
mockManager.replayAll();
final List<Assembly> assemblies = new DefaultAssemblyReader().readAssemblies( configSource );
mockManager.verifyAll();
return assemblies;
}
}