View Javadoc

1   package org.apache.maven.shared.release.scm;
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 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   * Test the default SCM repository configurator.
35   *
36   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
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             // expected
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             // expected
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             // expected
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 }