1 package org.apache.maven.plugins.assembly.archive.task;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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
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
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
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
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
272 verify( archiver ).addArchivedFileSet( any( ArchivedFileSet.class ), isNull() );
273 verify( archiver, atLeastOnce() ).getDestFile();
274 verify( archiver ).getOverrideDirectoryMode();
275 verify( archiver ).getOverrideFileMode();
276 }
277 }