View Javadoc
1   package org.apache.maven.plugins.assembly.archive.task;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.mockito.Mockito.any;
23  import static org.mockito.Mockito.atLeastOnce;
24  import static org.mockito.Mockito.isNull;
25  import static org.mockito.Mockito.mock;
26  import static org.mockito.Mockito.verify;
27  import static org.mockito.Mockito.when;
28  
29  import java.io.File;
30  import java.io.IOException;
31  import java.nio.charset.Charset;
32  import java.util.Arrays;
33  
34  import org.apache.maven.artifact.Artifact;
35  import org.apache.maven.artifact.handler.ArtifactHandler;
36  import org.apache.maven.model.Model;
37  import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
38  import org.apache.maven.plugins.assembly.archive.DefaultAssemblyArchiverTest;
39  import org.apache.maven.plugins.assembly.model.DependencySet;
40  import org.apache.maven.plugins.assembly.utils.TypeConversionUtils;
41  import org.apache.maven.project.MavenProject;
42  import org.codehaus.plexus.archiver.ArchivedFileSet;
43  import org.codehaus.plexus.archiver.Archiver;
44  import org.codehaus.plexus.logging.Logger;
45  import org.codehaus.plexus.logging.console.ConsoleLogger;
46  import org.junit.After;
47  import org.junit.Before;
48  import org.junit.Rule;
49  import org.junit.Test;
50  import org.junit.rules.TemporaryFolder;
51  import org.junit.runner.RunWith;
52  import org.mockito.junit.MockitoJUnitRunner;
53  
54  @RunWith( MockitoJUnitRunner.class )
55  public class AddArtifactTaskTest
56  {
57      @Rule
58      public TemporaryFolder temporaryFolder = new TemporaryFolder();
59  
60      private MavenProject mainProject;
61      
62      private AssemblerConfigurationSource configSource;
63  
64      @Before
65      public void setUp()
66          throws IOException
67      {
68          Model model = new Model();
69          model.setGroupId( "group" );
70          model.setArtifactId( "main" );
71          model.setVersion( "1000" );
72  
73          this.mainProject = new MavenProject( model );
74  
75          this.configSource = mock( AssemblerConfigurationSource.class );
76          when( configSource.getFinalName() ).thenReturn( "final-name" );
77      }
78      
79      @After
80      public void tearDown()
81      {
82          // result of easymock migration, should be assert of expected result instead of verifying methodcalls
83          verify( configSource, atLeastOnce() ).getFinalName();
84          verify( configSource, atLeastOnce() ).getMavenSession();
85      }
86  
87      @Test
88      public void testShouldAddArchiveFileWithoutUnpacking()
89          throws Exception
90      {
91          String outputLocation = "artifact";
92  
93          Artifact artifact = mock( Artifact.class );
94          when( artifact.getGroupId() ).thenReturn( "GROUPID" );
95          File artifactFile = temporaryFolder.newFile();
96          when( artifact.getFile() ).thenReturn( artifactFile );
97  
98          final Archiver archiver = mock( Archiver.class );
99          when( archiver.getOverrideDirectoryMode() ).thenReturn( 0222 );
100         when( archiver.getOverrideFileMode() ).thenReturn( 0222 );
101         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
102         
103         when( configSource.getProject() ).thenReturn( mainProject );
104         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
105 
106         AddArtifactTask task = createTask( artifact );
107 
108         task.execute( archiver, configSource );
109 
110         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
111         verify( configSource, atLeastOnce() ).getProject();
112 
113         verify( archiver ).getOverrideDirectoryMode();
114         verify( archiver ).getOverrideFileMode();
115         verify( archiver, atLeastOnce() ).getDestFile();
116         verify( archiver ).addFile( artifactFile, outputLocation );
117     }
118 
119     @Test
120     public void testShouldAddArchiveFileWithDefaultOutputLocation()
121         throws Exception
122     {
123         String artifactId = "myArtifact";
124         String version = "1";
125         String ext = "jar";
126         String outputDir = "tmp/";
127 
128         Artifact artifact = mock( Artifact.class );
129         ArtifactHandler artifactHandler = mock( ArtifactHandler.class );
130         when( artifact.getGroupId() ).thenReturn( "GROUPID" );
131         when( artifactHandler.getExtension() ).thenReturn( ext );
132         when( artifact.getArtifactHandler() ).thenReturn( artifactHandler );
133         File artifactFile = temporaryFolder.newFile();
134         when( artifact.getFile() ).thenReturn( artifactFile );
135 
136         final Archiver archiver = mock( Archiver.class );
137         when( archiver.getOverrideDirectoryMode() ).thenReturn( 0222 );
138         when( archiver.getOverrideFileMode() ).thenReturn( 0222 );
139         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
140 
141         when( configSource.getProject() ).thenReturn( mainProject );
142 
143         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
144 
145         AddArtifactTask task = new AddArtifactTask( artifact, new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ), null );
146         task.setOutputDirectory( outputDir );
147         task.setFileNameMapping( new DependencySet().getOutputFileNameMapping() );
148 
149         Model model = new Model();
150         model.setArtifactId( artifactId );
151         model.setVersion( version );
152 
153         MavenProject project = new MavenProject( model );
154         project.setGroupId( "GROUPID" );
155         task.setProject( project );
156 
157         task.execute( archiver, configSource );
158 
159         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
160         verify( configSource, atLeastOnce() ).getProject();
161         
162         verify( archiver ).getOverrideDirectoryMode();
163         verify( archiver ).getOverrideFileMode();
164         verify( archiver, atLeastOnce() ).getDestFile();
165         verify( archiver ).addFile( artifactFile, outputDir + artifactId + "-" + version + "." + ext );
166     }
167 
168     private AddArtifactTask createTask( Artifact artifact )
169     {
170         AddArtifactTask task = new AddArtifactTask( artifact, new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ), null );
171 
172         task.setFileNameMapping( "artifact" );
173 
174         return task;
175     }
176 
177     @Test
178     public void testShouldAddArchiveFileWithUnpack()
179         throws Exception
180     {
181         final int originalDirMode = -1;
182         final int originalFileMode = -1;
183 
184         final Archiver archiver = mock( Archiver.class );
185         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
186         when( archiver.getOverrideDirectoryMode() ).thenReturn( originalDirMode );
187         when( archiver.getOverrideFileMode() ).thenReturn( originalFileMode );
188         
189         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
190 
191         Artifact artifact = mock( Artifact.class );
192         when( artifact.getFile() ).thenReturn( temporaryFolder.newFile() );
193         
194         AddArtifactTask task = createTask( artifact );
195         task.setUnpack( true );
196 
197         task.execute( archiver, configSource );
198         
199         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
200         verify( archiver ).addArchivedFileSet( any( ArchivedFileSet.class ), isNull( Charset.class ) );
201         verify( archiver, atLeastOnce() ).getDestFile();
202         verify( archiver ).getOverrideDirectoryMode();
203         verify( archiver ).getOverrideFileMode();
204     }
205 
206     @Test
207     public void testShouldAddArchiveFileWithUnpackAndModes()
208         throws Exception
209     {
210         final int directoryMode = TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
211         final int fileMode = TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
212         final int originalDirMode = -1;
213         final int originalFileMode = -1;
214         
215         final Archiver archiver = mock( Archiver.class );
216         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
217         when( archiver.getOverrideDirectoryMode() ).thenReturn( originalDirMode );
218         when( archiver.getOverrideFileMode() ).thenReturn( originalFileMode );
219         
220         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
221 
222         Artifact artifact = mock( Artifact.class );
223         when( artifact.getFile() ).thenReturn( temporaryFolder.newFile() );
224 
225         AddArtifactTask task = createTask( artifact );
226         task.setUnpack( true );
227         task.setDirectoryMode( directoryMode );
228         task.setFileMode( fileMode );
229 
230         task.execute( archiver, configSource );
231 
232         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
233         verify( archiver ).addArchivedFileSet( any( ArchivedFileSet.class ), isNull( Charset.class ) );
234         verify( archiver, atLeastOnce() ).getDestFile();
235         verify( archiver ).getOverrideDirectoryMode();
236         verify( archiver ).getOverrideFileMode();
237         verify( archiver ).setDirectoryMode( directoryMode );
238         verify( archiver ).setFileMode( fileMode );
239         verify( archiver ).setDirectoryMode( originalDirMode );
240         verify( archiver ).setFileMode( originalFileMode );
241     }
242 
243     @Test
244     public void testShouldAddArchiveFileWithUnpackIncludesAndExcludes()
245         throws Exception
246     {
247         final int originalDirMode = -1;
248         final int originalFileMode = -1;
249         
250         final Archiver archiver = mock( Archiver.class );
251         when( archiver.getOverrideDirectoryMode() ).thenReturn( originalDirMode );
252         when( archiver.getOverrideFileMode() ).thenReturn( originalFileMode );
253         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
254 
255         String[] includes = { "**/*.txt" };
256         String[] excludes = { "**/README.txt" };
257 
258         Artifact artifact = mock( Artifact.class );
259         when( artifact.getFile() ).thenReturn( temporaryFolder.newFile() );
260 
261         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
262 
263         AddArtifactTask task = createTask( artifact );
264         task.setUnpack( true );
265         task.setIncludes( Arrays.asList( includes ) );
266         task.setExcludes( Arrays.asList( excludes ) );
267 
268         task.execute( archiver, configSource );
269 
270         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
271         verify( archiver ).addArchivedFileSet( any( ArchivedFileSet.class ), isNull( Charset.class ) );
272         verify( archiver, atLeastOnce() ).getDestFile();
273         verify( archiver ).getOverrideDirectoryMode();
274         verify( archiver ).getOverrideFileMode();
275     }
276 }