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