1 package org.apache.maven.plugins.assembly.archive.archiver;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }