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 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   * @author <a href="mailto:aramirez@apache.org">Allan Ramirez</a>
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          //include the project jar to the rar
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          //check the working directory
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         //check the generated rar file
112         File rarFile = new File( outputDir, finalName + ".rar" );
113 
114         assertTrue( rarFile.exists() );
115 
116         //expected files/directories inside the rar file
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         //check the working directory
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         //check the generated rar file
183         File rarFile = new File( outputDir, finalName + ".rar" );
184 
185         assertTrue( rarFile.exists() );
186 
187         //expected files/directories inside the rar file
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         //check the working directory
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         //check the generated rar file
255         File rarFile = new File( outputDir, finalName + ".rar" );
256 
257         assertTrue( rarFile.exists() );
258 
259         //expected files/directories inside the rar file
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 }