View Javadoc
1   package org.apache.maven.archetype.source;
2   
3   /*
4    *  Copyright 2007 rafale.
5    *
6    *  Licensed under the Apache License, Version 2.0 (the "License");
7    *  you may not use this file except in compliance with the License.
8    *  You may obtain a copy of the License at
9    *
10   *       http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing, software
13   *  distributed under the License is distributed on an "AS IS" BASIS,
14   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   *  See the License for the specific language governing permissions and
16   *  limitations under the License.
17   *  under the License.
18   */
19  
20  import java.io.File;
21  import java.io.FileWriter;
22  import java.io.Writer;
23  
24  import org.apache.commons.io.IOUtils;
25  import org.apache.maven.archetype.ArchetypeManager;
26  import org.apache.maven.archetype.catalog.Archetype;
27  import org.apache.maven.archetype.catalog.ArchetypeCatalog;
28  import org.apache.maven.archetype.catalog.io.xpp3.ArchetypeCatalogXpp3Writer;
29  import org.apache.maven.artifact.repository.MavenArtifactRepository;
30  import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
31  import org.apache.maven.plugin.LegacySupport;
32  import org.apache.maven.plugin.testing.AbstractMojoTestCase;
33  import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
34  import org.apache.maven.project.DefaultProjectBuildingRequest;
35  import org.apache.maven.project.ProjectBuildingRequest;
36  import org.mortbay.jetty.Server;
37  import org.mortbay.jetty.webapp.WebAppContext;
38  
39  public class RemoteCatalogArchetypeDataSourceTest extends AbstractMojoTestCase
40  {
41      private Server server;
42  
43      int port;
44  
45      protected void setUp()
46          throws Exception
47      {
48          super.setUp();
49  
50          System.setProperty( "org.apache.maven.archetype.repository.directory",
51                              getTestPath( "target/test-classes/repositories/test-catalog" ) );
52  
53          // Start Jetty
54          server = new Server( 0 );
55  
56          WebAppContext webapp = new WebAppContext();
57          webapp.setContextPath( "/repo" );
58          webapp.setWar( "target/wars/archetype-repository.war" );
59          server.setHandler( webapp );
60  
61          server.start();
62  
63          port = server.getConnectors()[0].getLocalPort();
64  
65          File catalogDirectory = getTestFile( "target/test-classes/repositories/test-catalog" );
66          catalogDirectory.mkdirs();
67  
68          getTestFile( "target/test-classes/repositories/test-catalog/dummy" ).createNewFile();
69  
70          ArchetypeCatalog catalog = new ArchetypeCatalog();
71          Archetype generatedArchetype = new Archetype();
72          generatedArchetype.setGroupId( "groupId" );
73          generatedArchetype.setArtifactId( "artifactId" );
74          generatedArchetype.setVersion( "1" );
75          generatedArchetype.setRepository( "http://localhost:" + port + "/repo/" );
76          catalog.addArchetype( generatedArchetype );
77  
78          File catalogFile = new File( catalogDirectory, "archetype-catalog.xml" );
79          ArchetypeCatalogXpp3Writer catalogWriter = new ArchetypeCatalogXpp3Writer();
80          Writer writer = new FileWriter( catalogFile );
81          catalogWriter.write( writer, catalog );
82          IOUtils.closeQuietly( writer );
83      }
84  
85      protected void tearDown()
86          throws Exception
87      {
88          super.tearDown();
89          // Stop Jetty
90          server.stop();
91      }
92      
93      public void testRemoteCatalog()
94          throws Exception
95      {
96          ArchetypeManager archetype = lookup( ArchetypeManager.class );
97          
98          LegacySupport legacySupport = lookup( LegacySupport.class );
99          legacySupport.setSession( newMavenSession( new MavenProjectStub() ) );
100 
101         ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest();
102         buildingRequest.getRemoteRepositories().add( new MavenArtifactRepository( "central",
103                                                                                   "http://localhost:" + port + "/repo/",
104                                                                                   new DefaultRepositoryLayout(), null,
105                                                                                   null ) );
106 
107         ArchetypeCatalog result = archetype.getRemoteCatalog( buildingRequest );
108 
109         assertEquals( 1, result.getArchetypes().size() );
110         assertEquals( "groupId", result.getArchetypes().get( 0 ).getGroupId() );
111         assertEquals( "artifactId", result.getArchetypes().get( 0 ).getArtifactId() );
112         assertEquals( "1", result.getArchetypes().get( 0 ).getVersion() );
113         assertEquals( "http://localhost:" + port + "/repo/", result.getArchetypes().get( 0 ).getRepository() );
114     }
115 
116 }