View Javadoc
1   package org.apache.maven.plugin.rar;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * @author <a href="mailto:aramirez@apache.org">Allan Ramirez</a>
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          //include the project jar to the rar
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          //check the working directory
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         //check the generated rar file
107         File rarFile = new File( outputDir.getPath(), finalName + ".rar" );
108 
109         assertTrue( rarFile.exists() );
110 
111         //expected files/directories inside the rar file
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         //check the working directory
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         //check the generated rar file
178         File rarFile = new File( outputDir.getPath(), finalName + ".rar" );
179 
180         assertTrue( rarFile.exists() );
181 
182         //expected files/directories inside the rar file
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         //check the working directory
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         //check the generated rar file
251         File rarFile = new File( outputDir.getPath(), finalName + ".rar" );
252 
253         assertTrue( rarFile.exists() );
254 
255         //expected files/directories inside the rar file
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 }