View Javadoc
1   package org.apache.maven.archetype.test;
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  
24  import org.apache.maven.archetype.ArchetypeGenerationRequest;
25  import org.apache.maven.archetype.ArchetypeGenerationResult;
26  import org.apache.maven.archetype.ArchetypeManager;
27  import org.apache.maven.archetype.catalog.Archetype;
28  import org.apache.maven.archetype.catalog.ArchetypeCatalog;
29  import org.apache.maven.artifact.repository.ArtifactRepository;
30  import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
31  import org.apache.maven.artifact.repository.MavenArtifactRepository;
32  import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
33  import org.apache.maven.project.DefaultProjectBuildingRequest;
34  import org.apache.maven.project.ProjectBuildingRequest;
35  import org.apache.maven.repository.internal.MavenRepositorySystemSession;
36  import org.codehaus.plexus.PlexusTestCase;
37  import org.codehaus.plexus.util.FileUtils;
38  import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
39  
40  /**
41   *
42   * @author rafale
43   */
44  public class InternalCatalogArchetypesVerificationTest
45      extends PlexusTestCase
46  {
47      private static final String CENTRAL = "https://repo.maven.apache.org/maven2";
48  
49      public void testInternalCatalog()
50          throws Exception
51      {
52          ArtifactRepository localRepository = createRepository( new File( getBasedir(),
53                  "target/test-classes/repositories/local" ).toURI().toURL().toExternalForm(),
54                  "local-repo");
55  
56          File outputDirectory = new File( getBasedir(), "target/internal-archetypes-projects" );
57          outputDirectory.mkdirs();
58          FileUtils.cleanDirectory( outputDirectory );
59  
60          ArchetypeManager archetype = (ArchetypeManager) lookup( ArchetypeManager.class.getName() );
61  
62          ArchetypeCatalog catalog = archetype.getInternalCatalog();
63  
64          int count = 1;
65          for ( Archetype a : catalog.getArchetypes() )
66          {
67              Archetype ar = new Archetype();
68              ar.setGroupId( a.getGroupId() );
69              ar.setArtifactId( a.getArtifactId() );
70              ar.setVersion( a.getVersion() );
71              ar.setDescription( a.getDescription() );
72              ar.setGoals( a.getGoals() );
73              ar.setProperties( a.getProperties() );
74              ar.setRepository( a.getRepository() );
75              if ( ar.getRepository() == null )
76              {
77                  ar.setRepository( CENTRAL );
78              }
79  
80              ArchetypeGenerationRequest request =
81                  new ArchetypeGenerationRequest( ar )
82                  .setGroupId( "org.apache.maven.archetype.test" )
83                  .setArtifactId( "archetype" + count )
84                  .setVersion( "1.0-SNAPSHOT" )
85                  .setPackage( "com.acme" )
86                  .setOutputDirectory( outputDirectory.getPath() )
87                  .setLocalRepository( localRepository );
88              
89              ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest();
90              MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession();
91              repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( localRepository.getBasedir() ) );
92              buildingRequest.setRepositorySession( repositorySession );
93              request.setProjectBuildingRequest( buildingRequest );
94  
95              ArchetypeGenerationResult generationResult = archetype.generateProjectFromArchetype( request );
96              
97              assertTrue ( "Archetype wasn't generated successfully", generationResult.getCause() == null );
98              
99              count++;
100         }
101     }
102     
103     private ArtifactRepository createRepository( String url, String repositoryId )
104     {
105         String updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS;
106 
107         String checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN;
108 
109         ArtifactRepositoryPolicy snapshotsPolicy =
110             new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag );
111 
112         ArtifactRepositoryPolicy releasesPolicy =
113             new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag );
114         
115         return new MavenArtifactRepository( repositoryId, url, new DefaultRepositoryLayout() , snapshotsPolicy,
116                                             releasesPolicy );
117     }
118 
119 }