]> source.dussan.org Git - archiva.git/blob
8439d532a706c5115b9c0a4fca8d00ec9475d104
[archiva.git] /
1 package org.apache.maven.archiva.database.constraints;
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.commons.lang.StringUtils;
23 import org.apache.maven.archiva.database.AbstractArchivaDatabaseTestCase;
24 import org.apache.maven.archiva.database.ArchivaDAO;
25 import org.apache.maven.archiva.database.ArtifactDAO;
26 import org.apache.maven.archiva.database.SimpleConstraint;
27 import org.apache.maven.archiva.model.ArchivaArtifact;
28
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Date;
32 import java.util.Iterator;
33 import java.util.List;
34
35 /**
36  * UniqueGroupIdConstraintTest 
37  *
38  * @version $Id$
39  */
40 public class UniqueGroupIdConstraintTest
41     extends AbstractArchivaDatabaseTestCase
42 {
43     private ArtifactDAO artifactDao;
44
45     public void testConstraintGroupIdParamCommonsLang()
46         throws Exception
47     {
48         setupArtifacts();
49
50         assertConstraint( new String[] { "commons-lang" }, new UniqueGroupIdConstraint( "commons-lang" ) );
51     }
52
53     public void testConstraintGroupIdParamNoRepos()
54         throws Exception
55     {
56         try
57         {
58             List<String> selectedRepos = new ArrayList<String>();
59             new UniqueGroupIdConstraint( selectedRepos, "org" );
60             fail( "Should have thrown an IllegalArgumentException due to lack of specified repos." );
61         }
62         catch ( IllegalArgumentException e )
63         {
64             // expected path.
65         }
66     }
67
68     public void testConstraintGroupIdParamNullRepos()
69         throws Exception
70     {
71         try
72         {
73             new UniqueGroupIdConstraint( (List<String>) null, "org" );
74             fail( "Should have thrown an NullPointerException due to lack of specified repos." );
75         }
76         catch ( NullPointerException e )
77         {
78             // expected path.
79         }
80     }
81
82     public void testConstraintGroupIdParamOrg()
83         throws Exception
84     {
85         setupArtifacts();
86
87         assertConstraint( new String[] {
88             "org.apache.maven.test",
89             "org.apache.maven.test.foo",
90             "org.apache.maven.shared",
91             "org.apache.archiva",
92             "org.codehaus.modello",
93             "org.codehaus.mojo" }, new UniqueGroupIdConstraint( "org" ) );
94     }
95
96     public void testConstraintGroupIdParamOrgApache()
97         throws Exception
98     {
99         setupArtifacts();
100
101         assertConstraint( new String[] {
102             "org.apache.maven.test",
103             "org.apache.maven.test.foo",
104             "org.apache.maven.shared",
105             "org.apache.archiva" }, new UniqueGroupIdConstraint( "org.apache" ) );
106     }
107
108     public void testConstraintGroupIdParamOrgApacheMaven()
109         throws Exception
110     {
111         setupArtifacts();
112
113         assertConstraint( new String[] {
114             "org.apache.maven.test",
115             "org.apache.maven.test.foo",
116             "org.apache.maven.shared" }, new UniqueGroupIdConstraint( "org.apache.maven" ) );
117     }
118
119     public void testConstraintGroupIdParamOrgApacheSnapshotsOnly()
120         throws Exception
121     {
122         setupArtifacts();
123
124         List<String> observableRepositories = new ArrayList<String>();
125         observableRepositories.add( "snapshots" );
126
127         assertConstraint( new String[] { "org.apache.archiva" }, new UniqueGroupIdConstraint( observableRepositories,
128                                                                                               "org.apache" ) );
129     }
130
131     public void testConstraintGroupIdParamOrgSnapshotsOnly()
132         throws Exception
133     {
134         setupArtifacts();
135
136         List<String> observableRepositories = new ArrayList<String>();
137         observableRepositories.add( "snapshots" );
138
139         assertConstraint( new String[] { "org.apache.archiva", "org.codehaus.modello", "org.codehaus.mojo" },
140                           new UniqueGroupIdConstraint( observableRepositories, "org" ) );
141     }
142
143     public void testConstraintNoGroupIdParam()
144         throws Exception
145     {
146         setupArtifacts();
147
148         assertConstraint( new String[] {
149             "commons-lang",
150             "org.apache.maven.test",
151             "org.apache.maven.test.foo",
152             "org.apache.maven.shared",
153             "org.codehaus.modello",
154             "org.codehaus.mojo",
155             "org.apache.archiva" }, new UniqueGroupIdConstraint() );
156     }
157
158     public void testConstraintNoGroupIdParamCentralAndSnapshots()
159         throws Exception
160     {
161         setupArtifacts();
162
163         List<String> observableRepositories = new ArrayList<String>();
164         observableRepositories.add( "central" );
165         observableRepositories.add( "snapshots" );
166
167         assertConstraint( new String[] {
168             "commons-lang",
169             "org.apache.maven.test",
170             "org.apache.maven.test.foo",
171             "org.apache.maven.shared",
172             "org.codehaus.modello",
173             "org.codehaus.mojo",
174             "org.apache.archiva" }, new UniqueGroupIdConstraint( observableRepositories ) );
175     }
176
177     public void testConstraintNoGroupIdParamCentralOnly()
178         throws Exception
179     {
180         setupArtifacts();
181
182         List<String> observableRepositories = new ArrayList<String>();
183         observableRepositories.add( "central" );
184
185         assertConstraint( new String[] {
186             "commons-lang",
187             "org.apache.maven.test",
188             "org.apache.maven.test.foo",
189             "org.apache.maven.shared",
190             "org.codehaus.modello" }, new UniqueGroupIdConstraint( observableRepositories ) );
191     }
192
193     public void testConstraintNoGroupIdParamNoRepos()
194         throws Exception
195     {
196         try
197         {
198             List<String> selectedRepos = new ArrayList<String>();
199             new UniqueGroupIdConstraint( selectedRepos );
200             fail( "Should have thrown an IllegalArgumentException due to lack of specified repos." );
201         }
202         catch ( IllegalArgumentException e )
203         {
204             // expected path.
205         }
206     }
207
208     public void testConstraintNoGroupIdParamNullRepos()
209         throws Exception
210     {
211         try
212         {
213             new UniqueGroupIdConstraint( (List<String>) null );
214             fail( "Should have thrown an NullPointerException due to lack of specified repos." );
215         }
216         catch ( NullPointerException e )
217         {
218             // expected path.
219         }
220     }
221
222     public void testConstraintNoGroupIdParamSnapshotsOnly()
223         throws Exception
224     {
225         setupArtifacts();
226
227         List<String> observableRepositories = new ArrayList<String>();
228         observableRepositories.add( "snapshots" );
229
230         assertConstraint( new String[] { "org.codehaus.modello", "org.codehaus.mojo", "org.apache.archiva" },
231                           new UniqueGroupIdConstraint( observableRepositories ) );
232     }   
233     
234     private void assertConstraint( String[] expectedGroupIds, SimpleConstraint constraint )
235         throws Exception
236     {
237         String prefix = "Unique Group IDs: ";
238
239         List<String> results = dao.query( constraint );
240         assertNotNull( prefix + "Not Null", results );
241         assertEquals( prefix + "Results.size", expectedGroupIds.length, results.size() );
242
243         List<String> groupIdList = Arrays.asList( expectedGroupIds );
244
245         Iterator<String> it = results.iterator();
246         while ( it.hasNext() )
247         {
248             String actualGroupId = (String) it.next();
249             assertTrue( prefix + "groupId result should not be blank.", StringUtils.isNotBlank( actualGroupId ) );
250             assertTrue( prefix + " groupId result <" + actualGroupId + "> exists in expected GroupIds.", groupIdList
251                 .contains( actualGroupId ) );
252         }
253     }
254
255     private ArchivaArtifact createArtifact( String repoId, String groupId, String artifactId, String version )
256     {
257         ArchivaArtifact artifact = artifactDao.createArtifact( groupId, artifactId, version, "", "jar", "testrepo" );
258         artifact.getModel().setLastModified( new Date() ); // mandatory field.
259         artifact.getModel().setRepositoryId( repoId );
260         return artifact;
261     }
262
263     private void setupArtifacts()
264         throws Exception
265     {
266         ArchivaArtifact artifact;
267
268         // Setup artifacts in fresh DB.
269         artifact = createArtifact( "central", "commons-lang", "commons-lang", "2.0" );
270         artifactDao.saveArtifact( artifact );
271
272         artifact = createArtifact( "central", "commons-lang", "commons-lang", "2.1" );
273         artifactDao.saveArtifact( artifact );
274
275         artifact = createArtifact( "central", "org.apache.maven.test", "test-one", "1.2" );
276         artifactDao.saveArtifact( artifact );
277
278         artifact = createArtifact( "central", "org.apache.maven.test.foo", "test-two", "1.0" );
279         artifactDao.saveArtifact( artifact );
280
281         artifact = createArtifact( "central", "org.apache.maven.shared", "test-two", "2.0" );
282         artifactDao.saveArtifact( artifact );
283
284         artifact = createArtifact( "central", "org.apache.maven.shared", "test-two", "2.1" );
285         artifactDao.saveArtifact( artifact );
286
287         artifact = createArtifact( "central", "org.codehaus.modello", "test-two", "3.0" );
288         artifactDao.saveArtifact( artifact );
289
290         // Snapshots repository artifacts
291         artifact = createArtifact( "snapshots", "org.codehaus.modello", "test-three", "1.0-SNAPSHOT" );
292         artifactDao.saveArtifact( artifact );
293
294         artifact = createArtifact( "snapshots", "org.codehaus.mojo", "testable-maven-plugin", "2.1-SNAPSHOT" );
295         artifactDao.saveArtifact( artifact );
296
297         artifact = createArtifact( "snapshots", "org.apache.archiva", "testable", "1.1-alpha-1-20070822.033400-43" );
298         artifactDao.saveArtifact( artifact );
299     }
300
301     protected void setUp()
302         throws Exception
303     {
304         super.setUp();
305
306         ArchivaDAO dao = (ArchivaDAO) lookup( ArchivaDAO.ROLE, "jdo" );
307         artifactDao = dao.getArtifactDAO();
308     }
309 }