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