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