View Javadoc

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.ArchivaDatabaseException;
26  import org.apache.maven.archiva.database.ArtifactDAO;
27  import org.apache.maven.archiva.database.SimpleConstraint;
28  import org.apache.maven.archiva.model.ArchivaArtifact;
29  
30  import java.util.Arrays;
31  import java.util.Date;
32  import java.util.Iterator;
33  import java.util.List;
34  
35  /**
36   * UniqueArtifactIdConstraintTest 
37   *
38   * @version $Id: UniqueArtifactIdConstraintTest.java 755266 2009-03-17 14:28:40Z brett $
39   */
40  public class UniqueArtifactIdConstraintTest
41      extends AbstractArchivaDatabaseTestCase
42  {
43      private ArtifactDAO artifactDao;
44  
45      protected void setUp()
46          throws Exception
47      {
48          super.setUp();
49  
50          ArchivaDAO dao = (ArchivaDAO) lookup( ArchivaDAO.ROLE, "jdo" );
51          artifactDao = dao.getArtifactDAO();
52      }
53  
54      public ArchivaArtifact createArtifact( String groupId, String artifactId, String version )
55      {
56          ArchivaArtifact artifact = artifactDao.createArtifact( groupId, artifactId, version, "", "jar", "testable_repo" );
57          artifact.getModel().setLastModified( new Date() ); // mandatory field.
58          artifact.getModel().setRepositoryId( "testable_repo" );
59          return artifact;
60      }
61  
62      public void testConstraint()
63          throws Exception
64      {
65          setUpArtifacts();
66  
67          assertConstraint( new String[] {}, new UniqueArtifactIdConstraint( "org.apache" ) );
68          assertConstraint( new String[] { "commons-lang" }, new UniqueArtifactIdConstraint( "commons-lang" ) );
69          assertConstraint( new String[] { "test-one" }, new UniqueArtifactIdConstraint( "org.apache.maven.test" ) );
70          assertConstraint( new String[] { "test-two", "test-bar" },
71                            new UniqueArtifactIdConstraint( "org.apache.maven.shared" ) );
72          assertConstraint( new String[] { "modellong" }, new UniqueArtifactIdConstraint( "org.codehaus.modello" ) );
73      }
74      
75      public void testConstraintDisregardGroupId()
76          throws Exception
77      {
78          setUpArtifacts();
79          
80          assertConstraintWithMultipleResultTypes( new String[] { "commons-lang", "test-one", "test-two", "test-two", "test-bar", "modellong" },
81                            new UniqueArtifactIdConstraint( "testable_repo", true ) );
82      }
83  
84      private void setUpArtifacts()
85          throws ArchivaDatabaseException
86      {
87          ArchivaArtifact artifact;
88          
89       // Setup artifacts in fresh DB.
90          artifact = createArtifact( "commons-lang", "commons-lang", "2.0" );
91          artifactDao.saveArtifact( artifact );
92  
93          artifact = createArtifact( "commons-lang", "commons-lang", "2.1" );
94          artifactDao.saveArtifact( artifact );
95  
96          artifact = createArtifact( "org.apache.maven.test", "test-one", "1.2" );
97          artifactDao.saveArtifact( artifact );
98  
99          artifact = createArtifact( "org.apache.maven.test.foo", "test-two", "1.0" );
100         artifactDao.saveArtifact( artifact );
101 
102         artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.0" );
103         artifactDao.saveArtifact( artifact );
104 
105         artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1" );
106         artifactDao.saveArtifact( artifact );
107 
108         artifact = createArtifact( "org.apache.maven.shared", "test-bar", "2.1" );
109         artifactDao.saveArtifact( artifact );
110 
111         artifact = createArtifact( "org.codehaus.modello", "modellong", "3.0" );
112         artifactDao.saveArtifact( artifact );
113     }
114     
115     @SuppressWarnings("unchecked")
116     private void assertConstraintWithMultipleResultTypes( String[] artifactIds, SimpleConstraint constraint )
117         throws Exception
118     {
119         String prefix = "Unique Artifact IDs: ";
120     
121         List<Object[]> results = (List<Object[]>) dao.query( constraint );
122         assertNotNull( prefix + "Not Null", results );
123         assertEquals( prefix + "Results.size", artifactIds.length, results.size() );
124     
125         List<String> expectedArtifactIds = Arrays.asList( artifactIds );
126     
127         Iterator<Object[]> it = results.iterator();
128         while ( it.hasNext() )
129         {
130             Object[] actualArtifactIds = (Object[]) it.next();            
131             String actualArtifactId = ( String ) actualArtifactIds[1];
132             assertTrue( prefix + "artifactId result should not be blank.", StringUtils.isNotBlank( actualArtifactId ) );
133             assertTrue( prefix + " artifactId result <" + actualArtifactId + "> exists in expected artifactIds.",
134                         expectedArtifactIds.contains( actualArtifactId ) );            
135         }
136     }
137     
138     @SuppressWarnings("unchecked")
139     private void assertConstraint( String[] artifactIds, SimpleConstraint constraint )
140     {
141         String prefix = "Unique Artifact IDs: ";
142 
143         List<String> results = (List<String>) dao.query( constraint );
144         assertNotNull( prefix + "Not Null", results );
145         assertEquals( prefix + "Results.size", artifactIds.length, results.size() );
146 
147         List<String> expectedArtifactIds = Arrays.asList( artifactIds );
148 
149         Iterator<String> it = results.iterator();
150         while ( it.hasNext() )
151         {
152             String actualArtifactId = (String) it.next();
153             assertTrue( prefix + "artifactId result should not be blank.", StringUtils.isNotBlank( actualArtifactId ) );
154             assertTrue( prefix + " artifactId result <" + actualArtifactId + "> exists in expected artifactIds.",
155                         expectedArtifactIds.contains( actualArtifactId ) );
156         }
157     }
158 }