1 package org.apache.maven.plugin.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 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 }