View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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          // result of easymock migration, should be assert of expected result instead of verifying methodcalls
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         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
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         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
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         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
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         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
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         // result of easymock migration, should be assert of expected result instead of verifying methodcalls
256         verify(archiver).addArchivedFileSet(any(ArchivedFileSet.class), isNull());
257         verify(archiver, atLeastOnce()).getDestFile();
258         verify(archiver).getOverrideDirectoryMode();
259         verify(archiver).getOverrideFileMode();
260     }
261 }