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