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