1 package org.apache.maven.archetype.source;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
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
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 }