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