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.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
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
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
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
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
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
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 }