1 package org.apache.maven.plugin.assembly.archive.phase;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24
25 import junit.framework.Assert;
26 import junit.framework.TestCase;
27
28 import org.apache.maven.model.Model;
29 import org.apache.maven.plugin.assembly.AssemblerConfigurationSource;
30 import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException;
31 import org.apache.maven.plugin.assembly.archive.ArchiveCreationException;
32 import org.apache.maven.plugin.assembly.format.AssemblyFormattingException;
33 import org.apache.maven.plugin.assembly.model.Assembly;
34 import org.apache.maven.plugin.assembly.model.Repository;
35 import org.apache.maven.plugin.assembly.testutils.TestFileManager;
36 import org.apache.maven.plugin.assembly.utils.TypeConversionUtils;
37 import org.apache.maven.project.MavenProject;
38 import org.apache.maven.shared.repository.RepositoryAssembler;
39 import org.apache.maven.shared.repository.RepositoryAssemblyException;
40 import org.apache.maven.shared.repository.RepositoryBuilderConfigSource;
41 import org.apache.maven.shared.repository.model.RepositoryInfo;
42 import org.codehaus.plexus.archiver.Archiver;
43 import org.codehaus.plexus.archiver.ArchiverException;
44 import org.codehaus.plexus.archiver.FileSet;
45 import org.codehaus.plexus.archiver.util.DefaultFileSet;
46 import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator;
47 import org.codehaus.plexus.logging.Logger;
48 import org.codehaus.plexus.logging.console.ConsoleLogger;
49 import org.easymock.classextension.EasyMock;
50 import org.easymock.classextension.EasyMockSupport;
51
52 import static org.easymock.EasyMock.anyObject;
53 import static org.easymock.EasyMock.expect;
54
55 public class RepositoryAssemblyPhaseTest
56 extends TestCase
57 {
58
59 private final TestFileManager fileManager = new TestFileManager( "repository-phase.test.", "" );
60
61 @Override
62 public void tearDown()
63 throws IOException
64 {
65 fileManager.cleanUp();
66 }
67
68 public void testExecute_ShouldNotIncludeRepositoryIfNonSpecifiedInAssembly()
69 throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
70 {
71 final EasyMockSupport mm = new EasyMockSupport();
72
73 final MockAndControlForRepositoryAssembler macRepo = new MockAndControlForRepositoryAssembler( mm );
74 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
75 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
76
77 final File tempRoot = fileManager.createTempDir();
78
79 macCS.expectGetTemporaryRootDirectory( tempRoot );
80
81 final Assembly assembly = new Assembly();
82
83 assembly.setId( "test" );
84
85 mm.replayAll();
86
87 createPhase( macRepo.repositoryAssembler, new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ).execute( assembly,
88 macArchiver.archiver,
89 macCS.configSource );
90
91 mm.verifyAll();
92 }
93
94 public void testExecute_ShouldIncludeOneRepository()
95 throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
96 {
97 final EasyMockSupport mm = new EasyMockSupport();
98
99 final MockAndControlForRepositoryAssembler macRepo = new MockAndControlForRepositoryAssembler( mm );
100 final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
101 final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
102
103 final File tempRoot = fileManager.createTempDir();
104
105 macCS.expectGetTemporaryRootDirectory( tempRoot );
106 macCS.expectGetProject( new MavenProject( new Model() ) );
107 macCS.expectGetFinalName( "final-name" );
108 macCS.expectInterpolators();
109
110
111 final Assembly assembly = new Assembly();
112
113 assembly.setId( "test" );
114
115 final Repository repo = new Repository();
116
117 repo.setOutputDirectory( "out" );
118 repo.setDirectoryMode( "777" );
119 repo.setFileMode( "777" );
120
121 final int mode = TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
122
123 final File outDir = new File( tempRoot, "out" );
124
125 macArchiver.expectModeChange( -1, -1, mode, mode, true );
126 macArchiver.expectAddDirectory( outDir, "out/", null, null );
127
128 macRepo.expectAssemble();
129
130 assembly.addRepository( repo );
131
132 mm.replayAll();
133
134 createPhase( macRepo.repositoryAssembler, new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ).execute( assembly,
135 macArchiver.archiver,
136 macCS.configSource );
137
138 mm.verifyAll();
139 }
140
141 private RepositoryAssemblyPhase createPhase( final RepositoryAssembler repositoryAssembler, final Logger logger )
142 {
143 final RepositoryAssemblyPhase phase = new RepositoryAssemblyPhase( repositoryAssembler );
144 phase.enableLogging( logger );
145
146 return phase;
147 }
148
149 private final class MockAndControlForArchiver
150 {
151 final Archiver archiver;
152
153 public MockAndControlForArchiver( final EasyMockSupport mockManager )
154 {
155
156 archiver = mockManager.createMock (Archiver.class);
157 }
158
159 public void expectAddDirectory( final File outDir, final String location, final String[] includes,
160 final String[] excludes )
161 {
162 try
163 {
164 final DefaultFileSet fs = new DefaultFileSet();
165 fs.setDirectory( outDir );
166 fs.setPrefix( location );
167 fs.setIncludes( includes );
168 fs.setExcludes( excludes );
169
170 archiver.addFileSet( (FileSet)anyObject() );
171 }
172 catch ( final ArchiverException e )
173 {
174 Assert.fail( "Should never happen." );
175 }
176
177 EasyMock.expectLastCall().atLeastOnce();
178 }
179
180 void expectModeChange( final int defaultDirMode, final int defaultFileMode, final int dirMode,
181 final int fileMode, final boolean expectTwoSets )
182 {
183 expect( archiver.getOverrideDirectoryMode()).andReturn( defaultDirMode );
184
185 expect( archiver.getOverrideFileMode()).andReturn( defaultFileMode );
186
187 if ( expectTwoSets )
188 {
189 archiver.setDirectoryMode( dirMode );
190 archiver.setFileMode( fileMode );
191 }
192
193 archiver.setDirectoryMode( defaultDirMode );
194 archiver.setFileMode( defaultFileMode );
195 }
196
197
198
199
200
201
202
203
204
205
206
207
208 }
209
210 private final class MockAndControlForConfigSource
211 {
212 final AssemblerConfigurationSource configSource;
213
214 public MockAndControlForConfigSource( final EasyMockSupport mockManager )
215 {
216 configSource = mockManager.createMock(AssemblerConfigurationSource.class);
217
218 expect( configSource.getMavenSession()).andReturn( null ).anyTimes();
219 }
220
221 public void expectGetProject( final MavenProject project )
222 {
223 expect(configSource.getProject()).andReturn( project ).atLeastOnce();
224 }
225
226 public void expectGetFinalName( final String finalName )
227 {
228 expect(configSource.getFinalName()).andReturn( finalName ).atLeastOnce();
229 }
230
231 public void expectInterpolators( )
232 {
233 expect(configSource.getCommandLinePropsInterpolator()).andReturn( FixedStringSearchInterpolator.empty() ).anyTimes();
234 expect(configSource.getEnvInterpolator()).andReturn( FixedStringSearchInterpolator.empty() ).anyTimes();
235 expect(configSource.getMainProjectInterpolator()).andReturn( FixedStringSearchInterpolator.empty() ).anyTimes();
236 }
237
238 public void expectGetTemporaryRootDirectory( final File tempRoot )
239 {
240 expect(configSource.getTemporaryRootDirectory()).andReturn( tempRoot ).atLeastOnce();
241 }
242
243
244
245
246
247
248
249 }
250
251 private final class MockAndControlForRepositoryAssembler
252 {
253 final RepositoryAssembler repositoryAssembler;
254
255 MockAndControlForRepositoryAssembler( final EasyMockSupport mockManager )
256 {
257 repositoryAssembler = mockManager.createMock(RepositoryAssembler.class);
258 }
259
260 public void expectAssemble()
261 {
262 try
263 {
264 repositoryAssembler.buildRemoteRepository( (File)anyObject(),
265 (RepositoryInfo) anyObject(),
266 ( RepositoryBuilderConfigSource)anyObject() );
267 EasyMock.expectLastCall().atLeastOnce();
268 }
269 catch ( final RepositoryAssemblyException e )
270 {
271 Assert.fail( "Should never happen" );
272 }
273
274 }
275 }
276
277 }