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