1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.rar;
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 import java.io.File;
41 import java.util.ArrayList;
42 import java.util.Enumeration;
43 import java.util.List;
44 import java.util.Objects;
45 import java.util.zip.ZipEntry;
46 import java.util.zip.ZipFile;
47
48 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
49 import org.codehaus.plexus.util.FileUtils;
50
51
52
53
54 public class RarMojoTest extends AbstractMojoTestCase {
55 public void testRarTestEnvironment() throws Exception {
56 File testPom = new File(getBasedir(), "target/test-classes/unit/basic-rar-test/plugin-config.xml");
57
58 RarMojo mojo = (RarMojo) lookupMojo("rar", testPom);
59
60 assertNotNull(mojo);
61 }
62
63 public void testBasicRar() throws Exception {
64 File testPom = new File(getBasedir(), "target/test-classes/unit/basic-rar-test/plugin-config.xml");
65
66 RarMojo mojo = (RarMojo) lookupMojo("rar", testPom);
67
68 assertNotNull(mojo);
69
70 String finalName = (String) getVariableValueFromObject(mojo, "finalName");
71
72 String workDir = (String) getVariableValueFromObject(mojo, "workDirectory");
73
74 File outputDir = (File) getVariableValueFromObject(mojo, "outputDirectory");
75
76 Boolean includeJar = (Boolean) getVariableValueFromObject(mojo, "includeJar");
77
78 assertTrue(includeJar);
79
80
81 File projectJar = new File(getBasedir(), "src/test/resources/unit/basic-rar-test/target/test-rar.jar");
82
83 FileUtils.copyFileToDirectory(projectJar, outputDir);
84
85 mojo.execute();
86
87
88 File workDirectory = new File(workDir);
89
90 assertTrue(workDirectory.exists());
91
92 assertTrue(workDirectory.isDirectory());
93
94 File[] fileNames = workDirectory.listFiles();
95 assertNotNull(fileNames);
96
97 List<String> expectedFiles = new ArrayList<>();
98
99 expectedFiles.add("maven-artifact01-1.0-SNAPSHOT.jar");
100 expectedFiles.add("maven-artifact02-1.0-SNAPSHOT.jar");
101 expectedFiles.add("test-rar.jar");
102
103 assertEquals("Files in working directory", expectedFiles.size(), fileNames.length);
104
105 for (File fileName1 : fileNames) {
106 String fileName = fileName1.getName();
107
108 assertTrue(expectedFiles.contains(fileName));
109
110 if (expectedFiles.contains(fileName)) {
111 expectedFiles.remove(fileName);
112 assertFalse(expectedFiles.contains(fileName));
113 } else {
114 fail(fileName + " is not included in expected files.");
115 }
116 }
117
118 assertEquals(0, expectedFiles.size());
119
120
121 File rarFile = new File(outputDir.getPath(), finalName + ".rar");
122
123 assertTrue(rarFile.exists());
124
125
126 expectedFiles = new ArrayList<>();
127
128 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/pom.properties");
129 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/pom.xml");
130 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/");
131 expectedFiles.add("META-INF/maven/org.apache.maven.test/");
132 expectedFiles.add("META-INF/maven/");
133 expectedFiles.add("META-INF/MANIFEST.MF");
134 expectedFiles.add("META-INF/");
135 expectedFiles.add("maven-artifact01-1.0-SNAPSHOT.jar");
136 expectedFiles.add("maven-artifact02-1.0-SNAPSHOT.jar");
137 expectedFiles.add("test-rar.jar");
138
139 try (ZipFile rar = new ZipFile(rarFile)) {
140 Enumeration<? extends ZipEntry> entries = rar.entries();
141
142 assertTrue(entries.hasMoreElements());
143
144 assertEquals(0, getSizeOfExpectedFiles(entries, expectedFiles));
145 }
146 }
147
148 public void testBasicRarWithDescriptor() throws Exception {
149 File testPom = new File(getBasedir(), "target/test-classes/unit/basic-rar-with-descriptor/plugin-config.xml");
150
151 RarMojo mojo = (RarMojo) lookupMojo("rar", testPom);
152
153 assertNotNull(mojo);
154
155 String finalName = (String) getVariableValueFromObject(mojo, "finalName");
156
157 String workDir = (String) getVariableValueFromObject(mojo, "workDirectory");
158
159 File outputDir = (File) getVariableValueFromObject(mojo, "outputDirectory");
160
161 mojo.execute();
162
163
164 File workDirectory = new File(workDir);
165
166 assertTrue(workDirectory.exists());
167
168 assertTrue(workDirectory.isDirectory());
169
170 File[] fileNames = workDirectory.listFiles();
171 assertNotNull(fileNames);
172
173 List<String> expectedFiles = new ArrayList<>();
174 List<String> fileList = new ArrayList<>();
175
176 for (File fileName : fileNames) {
177 addFileToList(fileName, fileList);
178 }
179
180 expectedFiles.add("ra.xml");
181 expectedFiles.add("maven-artifact01-1.0-SNAPSHOT.jar");
182 expectedFiles.add("maven-artifact02-1.0-SNAPSHOT.jar");
183 expectedFiles.add("META-INF");
184
185 assertEquals(expectedFiles.size(), fileList.size());
186
187 assertEquals(0, getSizeOfExpectedFiles(fileList, expectedFiles));
188
189
190 File rarFile = new File(outputDir.getPath(), finalName + ".rar");
191
192 assertTrue(rarFile.exists());
193
194
195 expectedFiles = new ArrayList<>();
196
197 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/pom.properties");
198 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/pom.xml");
199 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/");
200 expectedFiles.add("META-INF/maven/org.apache.maven.test/");
201 expectedFiles.add("META-INF/maven/");
202 expectedFiles.add("META-INF/MANIFEST.MF");
203 expectedFiles.add("META-INF/ra.xml");
204 expectedFiles.add("META-INF/");
205 expectedFiles.add("maven-artifact01-1.0-SNAPSHOT.jar");
206 expectedFiles.add("maven-artifact02-1.0-SNAPSHOT.jar");
207
208 try (ZipFile rar = new ZipFile(rarFile)) {
209 Enumeration<? extends ZipEntry> entries = rar.entries();
210
211 assertTrue(entries.hasMoreElements());
212
213 assertEquals(0, getSizeOfExpectedFiles(entries, expectedFiles));
214 }
215 }
216
217 public void testBasicRarWithManifest() throws Exception {
218 File testPom = new File(getBasedir(), "target/test-classes/unit/basic-rar-with-manifest/plugin-config.xml");
219
220 RarMojo mojo = (RarMojo) lookupMojo("rar", testPom);
221
222 assertNotNull(mojo);
223
224 String finalName = (String) getVariableValueFromObject(mojo, "finalName");
225
226 String workDir = (String) getVariableValueFromObject(mojo, "workDirectory");
227
228 File outputDir = (File) getVariableValueFromObject(mojo, "outputDirectory");
229
230 mojo.execute();
231
232
233 File workDirectory = new File(workDir);
234
235 assertTrue(workDirectory.exists());
236
237 assertTrue(workDirectory.isDirectory());
238
239 File[] fileNames = workDirectory.listFiles();
240 assertNotNull(fileNames);
241
242 List<String> expectedFiles = new ArrayList<>();
243 List<String> fileList = new ArrayList<>();
244
245 for (File file : fileNames) {
246 addFileToList(file, fileList);
247 }
248
249 expectedFiles.add("ra.xml");
250 expectedFiles.add("maven-artifact01-1.0-SNAPSHOT.jar");
251 expectedFiles.add("maven-artifact02-1.0-SNAPSHOT.jar");
252 expectedFiles.add("META-INF");
253 expectedFiles.add("MANIFEST.MF");
254
255 assertEquals(expectedFiles.size(), fileList.size());
256
257 assertEquals(0, getSizeOfExpectedFiles(fileList, expectedFiles));
258
259
260 File rarFile = new File(outputDir.getPath(), finalName + ".rar");
261
262 assertTrue(rarFile.exists());
263
264
265 expectedFiles = new ArrayList<>();
266
267 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/pom.properties");
268 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/pom.xml");
269 expectedFiles.add("META-INF/maven/org.apache.maven.test/maven-rar-test/");
270 expectedFiles.add("META-INF/maven/org.apache.maven.test/");
271 expectedFiles.add("META-INF/maven/");
272 expectedFiles.add("META-INF/MANIFEST.MF");
273 expectedFiles.add("META-INF/ra.xml");
274 expectedFiles.add("META-INF/");
275 expectedFiles.add("maven-artifact01-1.0-SNAPSHOT.jar");
276 expectedFiles.add("maven-artifact02-1.0-SNAPSHOT.jar");
277
278 try (ZipFile rar = new ZipFile(rarFile)) {
279 Enumeration<? extends ZipEntry> entries = rar.entries();
280
281 assertTrue(entries.hasMoreElements());
282
283 assertEquals(0, getSizeOfExpectedFiles(entries, expectedFiles));
284 }
285 }
286
287 private int getSizeOfExpectedFiles(Enumeration<? extends ZipEntry> entries, List<String> expectedFiles) {
288 while (entries.hasMoreElements()) {
289 ZipEntry entry = entries.nextElement();
290
291 if (expectedFiles.contains(entry.getName())) {
292 expectedFiles.remove(entry.getName());
293 assertFalse(expectedFiles.contains(entry.getName()));
294 } else {
295 fail(entry.getName() + " is not included in the expected files");
296 }
297 }
298 return expectedFiles.size();
299 }
300
301 private int getSizeOfExpectedFiles(List<String> fileList, List<String> expectedFiles) {
302 for (String fileName : fileList) {
303 if (expectedFiles.contains(fileName)) {
304 expectedFiles.remove(fileName);
305 assertFalse(expectedFiles.contains(fileName));
306 } else {
307 fail(fileName + " is not included in the expected files");
308 }
309 }
310 return expectedFiles.size();
311 }
312
313 private void addFileToList(File file, List<String> fileList) {
314 if (!file.isDirectory()) {
315 fileList.add(file.getName());
316 } else {
317 fileList.add(file.getName());
318
319 File[] files = file.listFiles();
320
321 for (File file1 : Objects.requireNonNull(files)) {
322 addFileToList(file1, fileList);
323 }
324 }
325 }
326 }