1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.deploy;
20
21 import java.io.File;
22 import java.util.ArrayList;
23 import java.util.List;
24 import java.util.Objects;
25
26 import org.apache.maven.execution.MavenSession;
27 import org.apache.maven.model.Model;
28 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
29 import org.apache.maven.project.ProjectBuildingRequest;
30 import org.eclipse.aether.DefaultRepositorySystemSession;
31 import org.eclipse.aether.internal.impl.DefaultLocalPathComposer;
32 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
33 import org.eclipse.aether.repository.LocalRepository;
34 import org.mockito.InjectMocks;
35 import org.mockito.Mock;
36 import org.mockito.MockitoAnnotations;
37
38 import static org.mockito.Mockito.mock;
39 import static org.mockito.Mockito.when;
40
41
42
43
44 public class DeployFileMojoTest extends AbstractMojoTestCase {
45 private final String LOCAL_REPO = getBasedir() + "/target/local-repo";
46
47 private List<String> expectedFiles;
48
49 private List<String> fileList;
50
51 private File remoteRepo;
52
53 @Mock
54 private MavenSession session;
55
56 @InjectMocks
57 private DeployFileMojo mojo;
58
59 public void setUp() throws Exception {
60 super.setUp();
61
62 remoteRepo = new File(getBasedir(), "target/remote-repo");
63
64 if (!remoteRepo.exists()) {
65 remoteRepo.mkdirs();
66 }
67 }
68
69 public void testDeployTestEnvironment() throws Exception {
70 File testPom = new File(getBasedir(), "target/test-classes/unit/deploy-file-test/plugin-config.xml");
71
72 AbstractDeployMojo mojo = (AbstractDeployMojo) lookupMojo("deploy-file", testPom);
73
74 assertNotNull(mojo);
75 }
76
77 public void testBasicDeployFile() throws Exception {
78 File testPom = new File(getBasedir(), "target/test-classes/unit/deploy-file-test/plugin-config.xml");
79
80 mojo = (DeployFileMojo) lookupMojo("deploy-file", testPom);
81
82 MockitoAnnotations.initMocks(this);
83
84 assertNotNull(mojo);
85
86 ProjectBuildingRequest buildingRequest = mock(ProjectBuildingRequest.class);
87 when(buildingRequest.getRepositoryMerging()).thenReturn(ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT);
88 when(session.getProjectBuildingRequest()).thenReturn(buildingRequest);
89 DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession();
90 repositorySession.setLocalRepositoryManager(
91 new SimpleLocalRepositoryManagerFactory(new DefaultLocalPathComposer())
92 .newInstance(repositorySession, new LocalRepository(LOCAL_REPO)));
93 when(buildingRequest.getRepositorySession()).thenReturn(repositorySession);
94 when(session.getRepositorySession()).thenReturn(repositorySession);
95
96 String groupId = (String) getVariableValueFromObject(mojo, "groupId");
97
98 String artifactId = (String) getVariableValueFromObject(mojo, "artifactId");
99
100 String version = (String) getVariableValueFromObject(mojo, "version");
101
102 String packaging = (String) getVariableValueFromObject(mojo, "packaging");
103
104 File file = (File) getVariableValueFromObject(mojo, "file");
105
106 String repositoryId = (String) getVariableValueFromObject(mojo, "repositoryId");
107
108 String url = (String) getVariableValueFromObject(mojo, "url");
109
110 String skip = (String) getVariableValueFromObject(mojo, "skip");
111
112 assertEquals("org.apache.maven.test", groupId);
113
114 assertEquals("maven-deploy-file-test", artifactId);
115
116 assertEquals("1.0", version);
117
118 assertEquals("jar", packaging);
119
120 assertEquals("snapshots", skip);
121
122 assertTrue(file.exists());
123
124 assertEquals("deploy-test", repositoryId);
125
126 assertEquals("file://" + getBasedir() + "/target/remote-repo/deploy-file-test", url);
127
128 mojo.execute();
129
130
131 File pom = new File(
132 remoteRepo,
133 "deploy-file-test/" + groupId.replace('.', '/') + "/"
134 + artifactId + "/" + version + "/" + artifactId + "-"
135 + version + ".pom");
136
137 assertTrue(pom.exists());
138
139 Model model = mojo.readModel(pom);
140
141 assertEquals("4.0.0", model.getModelVersion());
142
143 assertEquals(groupId, model.getGroupId());
144
145 assertEquals(artifactId, model.getArtifactId());
146
147 assertEquals(version, model.getVersion());
148
149 assertEquals(packaging, model.getPackaging());
150
151 assertEquals("POM was created from deploy:deploy-file", model.getDescription());
152
153
154 expectedFiles = new ArrayList<>();
155 fileList = new ArrayList<>();
156
157 File repo = new File(remoteRepo, "deploy-file-test");
158
159 File[] files = repo.listFiles();
160
161 for (File file1 : Objects.requireNonNull(files)) {
162 addFileToList(file1, fileList);
163 }
164
165 expectedFiles.add("org");
166 expectedFiles.add("apache");
167 expectedFiles.add("maven");
168 expectedFiles.add("test");
169 expectedFiles.add("maven-deploy-file-test");
170 expectedFiles.add("1.0");
171 expectedFiles.add("maven-metadata.xml");
172 expectedFiles.add("maven-metadata.xml.md5");
173 expectedFiles.add("maven-metadata.xml.sha1");
174 expectedFiles.add("maven-deploy-file-test-1.0.jar");
175 expectedFiles.add("maven-deploy-file-test-1.0.jar.md5");
176 expectedFiles.add("maven-deploy-file-test-1.0.jar.sha1");
177 expectedFiles.add("maven-deploy-file-test-1.0.pom");
178 expectedFiles.add("maven-deploy-file-test-1.0.pom.md5");
179 expectedFiles.add("maven-deploy-file-test-1.0.pom.sha1");
180
181 assertEquals(expectedFiles.size(), fileList.size());
182
183 assertEquals(0, getSizeOfExpectedFiles(fileList, expectedFiles));
184 }
185
186 public void testDeployIfClassifierIsSet() throws Exception {
187 File testPom = new File(getBasedir(), "target/test-classes/unit/deploy-file-classifier/plugin-config.xml");
188
189 mojo = (DeployFileMojo) lookupMojo("deploy-file", testPom);
190
191 MockitoAnnotations.initMocks(this);
192
193 assertNotNull(mojo);
194
195 ProjectBuildingRequest buildingRequest = mock(ProjectBuildingRequest.class);
196 when(buildingRequest.getRepositoryMerging()).thenReturn(ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT);
197 when(session.getProjectBuildingRequest()).thenReturn(buildingRequest);
198 DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession();
199 repositorySession.setLocalRepositoryManager(
200 new SimpleLocalRepositoryManagerFactory(new DefaultLocalPathComposer())
201 .newInstance(repositorySession, new LocalRepository(LOCAL_REPO)));
202 when(buildingRequest.getRepositorySession()).thenReturn(repositorySession);
203 when(session.getRepositorySession()).thenReturn(repositorySession);
204
205 String classifier = (String) getVariableValueFromObject(mojo, "classifier");
206
207 String groupId = (String) getVariableValueFromObject(mojo, "groupId");
208
209 String artifactId = (String) getVariableValueFromObject(mojo, "artifactId");
210
211 String version = (String) getVariableValueFromObject(mojo, "version");
212
213 assertEquals("bin", classifier);
214
215 mojo.execute();
216
217 File deployedArtifact = new File(
218 remoteRepo,
219 "deploy-file-classifier/" + groupId.replace('.', '/') + "/"
220 + artifactId + "/" + version + "/" + artifactId + "-"
221 + version + "-" + classifier + ".jar");
222
223 assertTrue(deployedArtifact.exists());
224
225 mojo.setClassifier("prod");
226
227 assertEquals("prod", mojo.getClassifier());
228
229 mojo.execute();
230
231 File prodDeployedArtifact = new File(
232 remoteRepo,
233 "deploy-file-classifier/" + groupId.replace('.', '/') + "/"
234 + artifactId + "/" + version + "/" + artifactId + "-"
235 + version + "-" + mojo.getClassifier() + ".jar");
236
237 assertTrue(prodDeployedArtifact.exists());
238 }
239
240 public void testDeployIfArtifactIsNotJar() throws Exception {
241 File testPom =
242 new File(getBasedir(), "target/test-classes/unit/deploy-file-artifact-not-jar/plugin-config.xml");
243
244 mojo = (DeployFileMojo) lookupMojo("deploy-file", testPom);
245
246 MockitoAnnotations.initMocks(this);
247
248 assertNotNull(mojo);
249
250 ProjectBuildingRequest buildingRequest = mock(ProjectBuildingRequest.class);
251 when(buildingRequest.getRepositoryMerging()).thenReturn(ProjectBuildingRequest.RepositoryMerging.POM_DOMINANT);
252 when(session.getProjectBuildingRequest()).thenReturn(buildingRequest);
253 DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession();
254 repositorySession.setLocalRepositoryManager(
255 new SimpleLocalRepositoryManagerFactory(new DefaultLocalPathComposer())
256 .newInstance(repositorySession, new LocalRepository(LOCAL_REPO)));
257 when(buildingRequest.getRepositorySession()).thenReturn(repositorySession);
258 when(session.getRepositorySession()).thenReturn(repositorySession);
259
260 String groupId = (String) getVariableValueFromObject(mojo, "groupId");
261
262 String artifactId = (String) getVariableValueFromObject(mojo, "artifactId");
263
264 String version = (String) getVariableValueFromObject(mojo, "version");
265
266 assertEquals("org.apache.maven.test", groupId);
267
268 assertEquals("maven-deploy-file-test", artifactId);
269
270 assertEquals("1.0", version);
271
272 mojo.execute();
273
274 File file = new File(
275 remoteRepo,
276 "deploy-file-artifact-not-jar/" + groupId.replace('.', '/') + "/"
277 + artifactId + "/" + version + "/" + artifactId + "-"
278 + version + ".zip");
279
280 assertTrue(file.exists());
281 }
282
283 private void addFileToList(File file, List<String> fileList) {
284 if (!file.isDirectory()) {
285 fileList.add(file.getName());
286 } else {
287 fileList.add(file.getName());
288
289 File[] files = file.listFiles();
290
291 for (File file1 : Objects.requireNonNull(files)) {
292 addFileToList(file1, fileList);
293 }
294 }
295 }
296
297 private int getSizeOfExpectedFiles(List<String> fileList, List<String> expectedFiles) {
298 for (String fileName : fileList) {
299 if (expectedFiles.contains(fileName)) {
300 expectedFiles.remove(fileName);
301 } else {
302 fail(fileName + " is not included in the expected files");
303 }
304 }
305 return expectedFiles.size();
306 }
307 }