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.util.Arrays;
32  
33  import org.apache.maven.artifact.Artifact;
34  import org.apache.maven.artifact.handler.ArtifactHandler;
35  import org.apache.maven.model.Model;
36  import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
37  import org.apache.maven.plugins.assembly.archive.DefaultAssemblyArchiverTest;
38  import org.apache.maven.plugins.assembly.model.DependencySet;
39  import org.apache.maven.plugins.assembly.utils.TypeConversionUtils;
40  import org.apache.maven.project.MavenProject;
41  import org.codehaus.plexus.archiver.ArchivedFileSet;
42  import org.codehaus.plexus.archiver.Archiver;
43  import org.junit.After;
44  import org.junit.Before;
45  import org.junit.Rule;
46  import org.junit.Test;
47  import org.junit.rules.TemporaryFolder;
48  import org.junit.runner.RunWith;
49  import org.mockito.junit.MockitoJUnitRunner;
50  import org.slf4j.Logger;
51  import org.slf4j.LoggerFactory;
52  
53  @RunWith( MockitoJUnitRunner.class )
54  public class AddArtifactTaskTest
55  {
56      private final Logger logger = LoggerFactory.getLogger( getClass() );
57  
58      @Rule
59      public TemporaryFolder temporaryFolder = new TemporaryFolder();
60  
61      private MavenProject mainProject;
62      
63      private AssemblerConfigurationSource configSource;
64  
65      @Before
66      public void setUp()
67          throws IOException
68      {
69          Model model = new Model();
70          model.setGroupId( "group" );
71          model.setArtifactId( "main" );
72          model.setVersion( "1000" );
73  
74          this.mainProject = new MavenProject( model );
75  
76          this.configSource = mock( AssemblerConfigurationSource.class );
77          when( configSource.getFinalName() ).thenReturn( "final-name" );
78      }
79      
80      @After
81      public void tearDown()
82      {
83          // result of easymock migration, should be assert of expected result instead of verifying methodcalls
84          verify( configSource, atLeastOnce() ).getFinalName();
85          verify( configSource, atLeastOnce() ).getMavenSession();
86      }
87  
88      @Test
89      public void testShouldAddArchiveFileWithoutUnpacking()
90          throws Exception
91      {
92          String outputLocation = "artifact";
93  
94          Artifact artifact = mock( Artifact.class );
95          when( artifact.getGroupId() ).thenReturn( "GROUPID" );
96          File artifactFile = temporaryFolder.newFile();
97          when( artifact.getFile() ).thenReturn( artifactFile );
98  
99          final Archiver archiver = mock( Archiver.class );
100         when( archiver.getOverrideDirectoryMode() ).thenReturn( 0222 );
101         when( archiver.getOverrideFileMode() ).thenReturn( 0222 );
102         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
103         
104         when( configSource.getProject() ).thenReturn( mainProject );
105         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
106 
107         AddArtifactTask task = createTask( artifact );
108 
109         task.execute( archiver, configSource );
110 
111         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
112         verify( configSource, atLeastOnce() ).getProject();
113 
114         verify( archiver ).getOverrideDirectoryMode();
115         verify( archiver ).getOverrideFileMode();
116         verify( archiver, atLeastOnce() ).getDestFile();
117         verify( archiver ).addFile( artifactFile, outputLocation );
118     }
119 
120     @Test
121     public void testShouldAddArchiveFileWithDefaultOutputLocation()
122         throws Exception
123     {
124         String artifactId = "myArtifact";
125         String version = "1";
126         String ext = "jar";
127         String outputDir = "tmp/";
128 
129         Artifact artifact = mock( Artifact.class );
130         ArtifactHandler artifactHandler = mock( ArtifactHandler.class );
131         when( artifact.getGroupId() ).thenReturn( "GROUPID" );
132         when( artifactHandler.getExtension() ).thenReturn( ext );
133         when( artifact.getArtifactHandler() ).thenReturn( artifactHandler );
134         File artifactFile = temporaryFolder.newFile();
135         when( artifact.getFile() ).thenReturn( artifactFile );
136 
137         final Archiver archiver = mock( Archiver.class );
138         when( archiver.getOverrideDirectoryMode() ).thenReturn( 0222 );
139         when( archiver.getOverrideFileMode() ).thenReturn( 0222 );
140         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
141 
142         when( configSource.getProject() ).thenReturn( mainProject );
143 
144         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
145 
146         AddArtifactTask task = new AddArtifactTask( artifact, null );
147         task.setOutputDirectory( outputDir );
148         task.setFileNameMapping( new DependencySet().getOutputFileNameMapping() );
149 
150         Model model = new Model();
151         model.setArtifactId( artifactId );
152         model.setVersion( version );
153 
154         MavenProject project = new MavenProject( model );
155         project.setGroupId( "GROUPID" );
156         task.setProject( project );
157 
158         task.execute( archiver, configSource );
159 
160         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
161         verify( configSource, atLeastOnce() ).getProject();
162         
163         verify( archiver ).getOverrideDirectoryMode();
164         verify( archiver ).getOverrideFileMode();
165         verify( archiver, atLeastOnce() ).getDestFile();
166         verify( archiver ).addFile( artifactFile, outputDir + artifactId + "-" + version + "." + ext );
167     }
168 
169     private AddArtifactTask createTask( Artifact artifact )
170     {
171         AddArtifactTask task = new AddArtifactTask( artifact, null );
172 
173         task.setFileNameMapping( "artifact" );
174 
175         return task;
176     }
177 
178     @Test
179     public void testShouldAddArchiveFileWithUnpack()
180         throws Exception
181     {
182         final int originalDirMode = -1;
183         final int originalFileMode = -1;
184 
185         final Archiver archiver = mock( Archiver.class );
186         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
187         when( archiver.getOverrideDirectoryMode() ).thenReturn( originalDirMode );
188         when( archiver.getOverrideFileMode() ).thenReturn( originalFileMode );
189         
190         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
191 
192         Artifact artifact = mock( Artifact.class );
193         when( artifact.getFile() ).thenReturn( temporaryFolder.newFile() );
194         
195         AddArtifactTask task = createTask( artifact );
196         task.setUnpack( true );
197 
198         task.execute( archiver, configSource );
199         
200         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
201         verify( archiver ).addArchivedFileSet( any( ArchivedFileSet.class ), isNull() );
202         verify( archiver, atLeastOnce() ).getDestFile();
203         verify( archiver ).getOverrideDirectoryMode();
204         verify( archiver ).getOverrideFileMode();
205     }
206 
207     @Test
208     public void testShouldAddArchiveFileWithUnpackAndModes()
209         throws Exception
210     {
211         final int directoryMode = TypeConversionUtils.modeToInt( "777", logger );
212         final int fileMode = TypeConversionUtils.modeToInt( "777", logger );
213         final int originalDirMode = -1;
214         final int originalFileMode = -1;
215         
216         final Archiver archiver = mock( Archiver.class );
217         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
218         when( archiver.getOverrideDirectoryMode() ).thenReturn( originalDirMode );
219         when( archiver.getOverrideFileMode() ).thenReturn( originalFileMode );
220         
221         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
222 
223         Artifact artifact = mock( Artifact.class );
224         when( artifact.getFile() ).thenReturn( temporaryFolder.newFile() );
225 
226         AddArtifactTask task = createTask( artifact );
227         task.setUnpack( true );
228         task.setDirectoryMode( directoryMode );
229         task.setFileMode( fileMode );
230 
231         task.execute( archiver, configSource );
232 
233         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
234         verify( archiver ).addArchivedFileSet( any( ArchivedFileSet.class ), isNull() );
235         verify( archiver, atLeastOnce() ).getDestFile();
236         verify( archiver ).getOverrideDirectoryMode();
237         verify( archiver ).getOverrideFileMode();
238         verify( archiver ).setDirectoryMode( directoryMode );
239         verify( archiver ).setFileMode( fileMode );
240         verify( archiver ).setDirectoryMode( originalDirMode );
241         verify( archiver ).setFileMode( originalFileMode );
242     }
243 
244     @Test
245     public void testShouldAddArchiveFileWithUnpackIncludesAndExcludes()
246         throws Exception
247     {
248         final int originalDirMode = -1;
249         final int originalFileMode = -1;
250         
251         final Archiver archiver = mock( Archiver.class );
252         when( archiver.getOverrideDirectoryMode() ).thenReturn( originalDirMode );
253         when( archiver.getOverrideFileMode() ).thenReturn( originalFileMode );
254         when( archiver.getDestFile() ).thenReturn( new File( "junk" ) );
255 
256         String[] includes = { "**/*.txt" };
257         String[] excludes = { "**/README.txt" };
258 
259         Artifact artifact = mock( Artifact.class );
260         when( artifact.getFile() ).thenReturn( temporaryFolder.newFile() );
261 
262         DefaultAssemblyArchiverTest.setupInterpolators( configSource, mainProject );
263 
264         AddArtifactTask task = createTask( artifact );
265         task.setUnpack( true );
266         task.setIncludes( Arrays.asList( includes ) );
267         task.setExcludes( Arrays.asList( excludes ) );
268 
269         task.execute( archiver, configSource );
270 
271         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
272         verify( archiver ).addArchivedFileSet( any( ArchivedFileSet.class ), isNull() );
273         verify( archiver, atLeastOnce() ).getDestFile();
274         verify( archiver ).getOverrideDirectoryMode();
275         verify( archiver ).getOverrideFileMode();
276     }
277 }