1 package org.apache.maven.shared.release.scm;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.scm.manager.NoSuchScmProviderException;
23 import org.apache.maven.scm.provider.ScmProvider;
24 import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
25 import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
26 import org.apache.maven.scm.repository.ScmRepository;
27 import org.apache.maven.scm.repository.ScmRepositoryException;
28 import org.apache.maven.settings.Server;
29 import org.apache.maven.settings.Settings;
30 import org.apache.maven.shared.release.config.ReleaseDescriptor;
31 import org.codehaus.plexus.PlexusTestCase;
32
33
34
35
36
37
38 public class DefaultScmRepositoryConfiguratorTest
39 extends PlexusTestCase
40 {
41 private ScmRepositoryConfigurator scmRepositoryConfigurator;
42
43 private static final int CVS_PORT = 2401;
44
45 protected void setUp()
46 throws Exception
47 {
48 super.setUp();
49
50 scmRepositoryConfigurator = (ScmRepositoryConfigurator) lookup( ScmRepositoryConfigurator.ROLE );
51 }
52
53 public void testGetConfiguredRepository()
54 throws ScmRepositoryException, NoSuchScmProviderException
55 {
56 ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
57
58 ScmRepository repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, null );
59
60 assertEquals( "check provider", "cvs", repository.getProvider() );
61 assertEquals( "check username", "anoncvs", repository.getProviderRepository().getUser() );
62 assertNull( "check password", repository.getProviderRepository().getPassword() );
63 }
64
65 public void testGetConfiguredRepositoryWithUsernameAndPassword()
66 throws ScmRepositoryException, NoSuchScmProviderException
67 {
68 ReleaseDescriptor releaseDescriptor = createReleaseDescriptor( "username", "password" );
69
70 ScmRepository repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, null );
71
72 assertEquals( "check username", "username", repository.getProviderRepository().getUser() );
73 assertEquals( "check password", "password", repository.getProviderRepository().getPassword() );
74 }
75
76 public void testGetConfiguredRepositoryWithTagBase()
77 throws ScmRepositoryException, NoSuchScmProviderException
78 {
79 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
80 releaseDescriptor.setScmSourceUrl( "scm:svn:http://localhost/home/svn/module/trunk" );
81 releaseDescriptor.setScmTagBase( "http://localhost/home/svn/module/tags" );
82
83 ScmRepository repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, null );
84
85 SvnScmProviderRepository providerRepository = (SvnScmProviderRepository) repository.getProviderRepository();
86 assertEquals( "check tag base", "http://localhost/home/svn/module/tags", providerRepository.getTagBase() );
87 }
88
89 public void testGetConfiguredRepositoryWithHost()
90 throws ScmRepositoryException, NoSuchScmProviderException
91 {
92 Settings settings = new Settings();
93 Server server = new Server();
94 server.setId( "localhost:" + CVS_PORT );
95 server.setUsername( "settings-username" );
96 server.setPassword( "settings-password" );
97 server.setPrivateKey( "settings-private-key" );
98 server.setPassphrase( "settings-passphrase" );
99 settings.addServer( server );
100
101 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
102 releaseDescriptor.setScmSourceUrl( "scm:cvs:pserver:anoncvs@localhost:/home/cvs:module" );
103
104 ScmRepository repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, settings );
105
106 ScmProviderRepositoryWithHost providerRepository =
107 (ScmProviderRepositoryWithHost) repository.getProviderRepository();
108 assertEquals( "check host", "localhost", providerRepository.getHost() );
109 assertEquals( "check port", CVS_PORT, providerRepository.getPort() );
110 assertEquals( "check username", "settings-username", providerRepository.getUser() );
111 assertEquals( "check password", "settings-password", providerRepository.getPassword() );
112 assertEquals( "check private key", "settings-private-key", providerRepository.getPrivateKey() );
113 assertEquals( "check passphrase", "settings-passphrase", providerRepository.getPassphrase() );
114 }
115
116 public void testGetConfiguredRepositoryWithEncryptedPasswords()
117 throws ScmRepositoryException, NoSuchScmProviderException
118 {
119 Settings settings = new Settings();
120 Server server = new Server();
121 server.setId( "localhost" );
122 server.setUsername( "testuser" );
123 server.setPassword( "{Ael0S2tnXv8H3X+gHKpZAvAA25D8+gmU2w2RrGaf5v8=}" );
124 server.setPassphrase( "{7zK9P8hNVeUHbTsjiA/vnOs0zUXbND+9MBNPvdvl+x4=}" );
125 settings.addServer( server );
126
127 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
128 releaseDescriptor.setScmSourceUrl( "scm:svn:svn://localhost/repo" );
129
130 ScmRepository repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, settings );
131
132 ScmProviderRepositoryWithHost providerRepository =
133 (ScmProviderRepositoryWithHost) repository.getProviderRepository();
134 assertEquals( "check host", "localhost", providerRepository.getHost() );
135 assertEquals( "check username", "testuser", providerRepository.getUser() );
136 assertEquals( "check password", "testpass", providerRepository.getPassword() );
137 assertEquals( "check passphrase", "testphrase", providerRepository.getPassphrase() );
138 }
139
140 public void testGetConfiguredRepositoryInvalidScmUrl()
141 throws Exception
142 {
143 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
144 releaseDescriptor.setScmSourceUrl( "scm-url" );
145
146 try
147 {
148 scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, null );
149
150 fail( "Expected failure to get a repository with an invalid SCM URL" );
151 }
152 catch ( IllegalArgumentException e )
153 {
154
155 }
156 }
157
158 public void testGetConfiguredRepositoryInvalidScmProvider()
159 throws ScmRepositoryException
160 {
161 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
162 releaseDescriptor.setScmSourceUrl( "scm:url:" );
163
164 try
165 {
166 scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, null );
167
168 fail( "Expected failure to get a repository with an invalid SCM URL" );
169 }
170 catch ( NoSuchScmProviderException e )
171 {
172
173 }
174 }
175
176 public void testGetConfiguredRepositoryInvalidScmUrlParameters()
177 throws NoSuchScmProviderException
178 {
179 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
180 releaseDescriptor.setScmSourceUrl( "scm:cvs:" );
181
182 try
183 {
184 scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, null );
185
186 fail( "Expected failure to get a repository with an invalid SCM URL" );
187 }
188 catch ( ScmRepositoryException e )
189 {
190
191 }
192 }
193
194 public void testGetRepositoryProvider()
195 throws ScmRepositoryException, NoSuchScmProviderException
196 {
197 ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
198
199 ScmRepository repository = scmRepositoryConfigurator.getConfiguredRepository( releaseDescriptor, null );
200
201 ScmProvider provider = scmRepositoryConfigurator.getRepositoryProvider( repository );
202 assertEquals( "Check SCM provider", "cvs", provider.getScmType() );
203 }
204
205 private static ReleaseDescriptor createReleaseDescriptor()
206 {
207 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
208 releaseDescriptor.setScmSourceUrl( "scm:cvs:pserver:anoncvs@localhost:/home/cvs:module" );
209 return releaseDescriptor;
210 }
211
212 private static ReleaseDescriptor createReleaseDescriptor( String username, String password )
213 {
214 ReleaseDescriptor releaseDescriptor = createReleaseDescriptor();
215 releaseDescriptor.setScmUsername( username );
216 releaseDescriptor.setScmPassword( password );
217 return releaseDescriptor;
218 }
219 }