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.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 }