View Javadoc

1   package org.apache.maven.plugin.assembly.archive.archiver;
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 static org.junit.Assert.assertEquals;
23  import static org.junit.Assert.assertNotNull;
24  import static org.junit.Assert.assertTrue;
25  
26  import org.apache.maven.plugin.assembly.testutils.TestFileManager;
27  import org.apache.maven.plugin.assembly.testutils.TrackingArchiverStub;
28  import org.apache.maven.plugin.assembly.testutils.TrackingArchiverStub.Addition;
29  import org.codehaus.plexus.archiver.Archiver;
30  import org.codehaus.plexus.archiver.ArchiverException;
31  import org.codehaus.plexus.archiver.jar.JarArchiver;
32  import org.codehaus.plexus.archiver.util.DefaultFileSet;
33  import org.codehaus.plexus.components.io.fileselectors.FileInfo;
34  import org.codehaus.plexus.components.io.fileselectors.FileSelector;
35  import org.codehaus.plexus.logging.Logger;
36  import org.codehaus.plexus.logging.console.ConsoleLogger;
37  import org.codehaus.plexus.util.FileUtils;
38  import org.easymock.MockControl;
39  import org.junit.AfterClass;
40  import org.junit.Test;
41  
42  import java.io.File;
43  import java.io.IOException;
44  import java.util.ArrayList;
45  import java.util.List;
46  
47  public class AssemblyProxyArchiverTest
48  {
49  
50      private static final TestFileManager fileManager = new TestFileManager( "massembly-proxyArchiver", "" );
51  
52      private static final Logger logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "test" );
53  
54      @AfterClass
55      public static void cleanupFiles()
56      {
57          fileManager.cleanUp();
58      }
59  
60      @Test( timeout = 5000 )
61      public void addFileSet_SkipWhenSourceIsAssemblyWorkDir()
62          throws IOException, ArchiverException
63      {
64          final File sources = fileManager.createTempDir();
65  
66          final File workdir = new File( sources, "workdir" );
67  
68          final TrackingArchiverStub tracker = new TrackingArchiverStub();
69          final AssemblyProxyArchiver archiver =
70              new AssemblyProxyArchiver( "", tracker, null, null, null, workdir, logger, false );
71  
72          archiver.setForced( true );
73  
74          final DefaultFileSet fs = new DefaultFileSet();
75          fs.setDirectory( workdir );
76  
77          archiver.addFileSet( fs );
78  
79          assertTrue( tracker.added.isEmpty() );
80      }
81  
82      @Test( timeout = 5000 )
83      public void addFileSet_addExcludeWhenSourceContainsAssemblyWorkDir()
84          throws IOException, ArchiverException
85      {
86          final File sources = fileManager.createTempDir();
87  
88          final File workdir = new File( sources, "workdir" );
89          workdir.mkdir();
90  
91          fileManager.createFile( sources, "test-included.txt", "This is included" );
92          fileManager.createFile( workdir, "test-excluded.txt", "This is excluded" );
93  
94          final TrackingArchiverStub tracker = new TrackingArchiverStub();
95          final AssemblyProxyArchiver archiver =
96              new AssemblyProxyArchiver( "", tracker, null, null, null, workdir, logger, false );
97  
98          archiver.setForced( true );
99  
100         final DefaultFileSet fs = new DefaultFileSet();
101         fs.setDirectory( sources );
102 
103         archiver.addFileSet( fs );
104 
105         assertEquals( 1, tracker.added.size() );
106 
107         final Addition addition = tracker.added.get( 0 );
108         assertNotNull( addition.excludes );
109         assertEquals( 1, addition.excludes.length );
110         assertEquals( workdir.getName(), addition.excludes[0] );
111     }
112 
113     @Test
114     public void addFile_NoPerms_CallAcceptFilesOnlyOnce()
115         throws IOException, ArchiverException
116     {
117         final MockControl delegateControl = MockControl.createControl( Archiver.class );
118         final Archiver delegate = (Archiver) delegateControl.getMock();
119 
120         delegate.addFile( null, null );
121         delegateControl.setMatcher( MockControl.ALWAYS_MATCHER );
122         delegateControl.setVoidCallable();
123 
124         delegate.setForced( true );
125         delegateControl.setVoidCallable( MockControl.ZERO_OR_MORE );
126 
127         final CounterSelector counter = new CounterSelector( true );
128         final List<FileSelector> selectors = new ArrayList<FileSelector>();
129         selectors.add( counter );
130 
131         delegateControl.replay();
132 
133         final AssemblyProxyArchiver archiver =
134             new AssemblyProxyArchiver( "", delegate, null, selectors, null, new File( "." ),
135                                        new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ), false );
136 
137         archiver.setForced( true );
138 
139         final File inputFile = fileManager.createTempFile();
140 
141         archiver.addFile( inputFile, "file.txt" );
142 
143         assertEquals( 1, counter.getCount() );
144 
145         delegateControl.verify();
146     }
147 
148     @Test
149     public void addDirectory_NoPerms_CallAcceptFilesOnlyOnce()
150         throws IOException, ArchiverException
151     {
152         final Archiver delegate = new JarArchiver();
153 
154         final File output = fileManager.createTempFile();
155 
156         delegate.setDestFile( output );
157 
158         final CounterSelector counter = new CounterSelector( true );
159         final List<FileSelector> selectors = new ArrayList<FileSelector>();
160         selectors.add( counter );
161 
162         final AssemblyProxyArchiver archiver =
163             new AssemblyProxyArchiver( "", delegate, null, selectors, null, new File( "." ),
164                                        new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ), false );
165 
166         archiver.setForced( true );
167 
168         final File dir = fileManager.createTempDir();
169         FileUtils.cleanDirectory( dir );
170         fileManager.createFile( dir, "file.txt", "This is a test." );
171 
172         archiver.addDirectory( dir );
173 
174         archiver.createArchive();
175 
176         assertEquals( 1, counter.getCount() );
177     }
178 
179     private static final class CounterSelector
180         implements FileSelector
181     {
182 
183         private int count = 0;
184 
185         private boolean answer = false;
186 
187         public CounterSelector( final boolean answer )
188         {
189             this.answer = answer;
190         }
191 
192         public int getCount()
193         {
194             return count;
195         }
196 
197         public boolean isSelected( final FileInfo fileInfo )
198             throws IOException
199         {
200             if ( fileInfo.isFile() )
201             {
202                 count++;
203                 System.out.println( "Counting file: " + fileInfo.getName() + ". Current count: " + count );
204             }
205 
206             return answer;
207         }
208 
209     }
210 
211 }