View Javadoc
1   package org.apache.maven.plugin.assembly.archive.phase;
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 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         // public void expectAddFile( File file, String outputLocation, int fileMode )
198         // {
199         // try
200         // {
201         // archiver.addFile( file, outputLocation, fileMode );
202         // }
203         // catch ( ArchiverException e )
204         // {
205         // Assert.fail( "Should never happen." );
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         // public void expectGetBasedir( File basedir )
245         // {
246         // configSource.getBasedir();
247         // control.setReturnValue( basedir, MockControl.ONE_OR_MORE );
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 }