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