]> source.dussan.org Git - archiva.git/blob
c016fe0bc0ebf72004e3bb8a7cfb9ed5e8e28336
[archiva.git] /
1 package org.apache.maven.repository.discovery;
2
3 /*
4  * Copyright 2005-2006 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import org.apache.maven.artifact.Artifact;
20 import org.apache.maven.artifact.factory.ArtifactFactory;
21 import org.apache.maven.artifact.repository.ArtifactRepository;
22 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
23 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
24 import org.codehaus.plexus.PlexusTestCase;
25 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
26
27 import java.io.File;
28 import java.io.IOException;
29 import java.text.ParseException;
30 import java.text.SimpleDateFormat;
31 import java.util.Date;
32 import java.util.List;
33 import java.util.Locale;
34
35 /**
36  * @author Edwin Punzalan
37  */
38 public abstract class AbstractArtifactDiscovererTest
39     extends PlexusTestCase
40 {
41     protected ArtifactDiscoverer discoverer;
42
43     private ArtifactFactory factory;
44
45     protected ArtifactRepository repository;
46
47     protected static final String TEST_OPERATION = "test";
48
49     protected abstract String getLayout();
50
51     protected abstract File getRepositoryFile();
52
53     protected void setUp()
54         throws Exception
55     {
56         super.setUp();
57
58         discoverer = (ArtifactDiscoverer) lookup( ArtifactDiscoverer.ROLE, getLayout() );
59
60         factory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
61
62         repository = getRepository();
63
64         removeTimestampMetadata();
65     }
66
67     protected ArtifactRepository getRepository()
68         throws Exception
69     {
70         File basedir = getRepositoryFile();
71
72         ArtifactRepositoryFactory factory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
73
74         ArtifactRepositoryLayout layout =
75             (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, getLayout() );
76
77         return factory.createArtifactRepository( "discoveryRepo", "file://" + basedir, layout, null, null );
78     }
79
80     protected Artifact createArtifact( String groupId, String artifactId, String version )
81     {
82         Artifact artifact = factory.createArtifact( groupId, artifactId, version, null, "jar" );
83         artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
84         artifact.setRepository( repository );
85         return artifact;
86     }
87
88     protected Artifact createArtifact( String groupId, String artifactId, String version, String type )
89     {
90         return factory.createArtifact( groupId, artifactId, version, null, type );
91     }
92
93     protected Artifact createArtifact( String groupId, String artifactId, String version, String type,
94                                        String classifier )
95     {
96         return factory.createArtifactWithClassifier( groupId, artifactId, version, type, classifier );
97     }
98
99     public void testUpdatedInRepository()
100         throws ComponentLookupException, DiscovererException, ParseException, IOException
101     {
102         // Set repository time to 1-1-2000, a time in the distant past so definitely updated
103         discoverer.setLastCheckedTime( repository, "update",
104                                        new SimpleDateFormat( "yyyy-MM-dd", Locale.US ).parse( "2000-01-01" ) );
105
106         List artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
107         assertNotNull( "Check artifacts not null", artifacts );
108
109         assertTrue( "Check included",
110                     artifacts.contains( createArtifact( "org.apache.maven.update", "test-updated", "1.0" ) ) );
111
112         // try again with the updated timestamp
113         artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
114         assertNotNull( "Check artifacts not null", artifacts );
115
116         assertFalse( "Check not included",
117                      artifacts.contains( createArtifact( "org.apache.maven.update", "test-updated", "1.0" ) ) );
118     }
119
120     public void testNotUpdatedInRepository()
121         throws ComponentLookupException, DiscovererException, IOException
122     {
123         // Set repository time to now, which is after any artifacts, so definitely not updated
124         discoverer.setLastCheckedTime( repository, "update", new Date() );
125
126         List artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
127         assertNotNull( "Check artifacts not null", artifacts );
128
129         assertFalse( "Check not included",
130                      artifacts.contains( createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" ) ) );
131     }
132
133     public void testNotUpdatedInRepositoryForcedDiscovery()
134         throws ComponentLookupException, DiscovererException, IOException
135     {
136         discoverer.resetLastCheckedTime( repository, "update" );
137
138         List artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
139         assertNotNull( "Check artifacts not null", artifacts );
140
141         assertTrue( "Check included",
142                     artifacts.contains( createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" ) ) );
143
144         // try again with the updated timestamp
145         artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
146         assertNotNull( "Check artifacts not null", artifacts );
147
148         assertFalse( "Check not included",
149                      artifacts.contains( createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" ) ) );
150     }
151
152     public void testUpdatedInRepositoryBlackout()
153         throws ComponentLookupException, DiscovererException, IOException
154     {
155         discoverer.resetLastCheckedTime( repository, "update" );
156
157         Artifact artifact = createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" );
158         artifact.getFile().setLastModified( System.currentTimeMillis() );
159
160         List artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
161         assertNotNull( "Check artifacts not null", artifacts );
162
163         assertFalse( "Check not included", artifacts.contains( artifact ) );
164
165         // try again with the updated timestamp
166         artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
167         assertNotNull( "Check artifacts not null", artifacts );
168
169         assertFalse( "Check not included", artifacts.contains( artifact ) );
170     }
171
172     public void testUpdatedInRepositoryNotBlackout()
173         throws ComponentLookupException, DiscovererException, IOException
174     {
175         discoverer.resetLastCheckedTime( repository, "update" );
176
177         Artifact artifact = createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" );
178         artifact.getFile().setLastModified( System.currentTimeMillis() - 61000 );
179
180         List artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
181         assertNotNull( "Check artifacts not null", artifacts );
182
183         assertTrue( "Check included", artifacts.contains( artifact ) );
184
185         // try again with the updated timestamp
186         artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
187         assertNotNull( "Check artifacts not null", artifacts );
188
189         assertFalse( "Check not included", artifacts.contains( artifact ) );
190     }
191
192     public void testNotUpdatedInRepositoryForcedDiscoveryMetadataAlreadyExists()
193         throws ComponentLookupException, DiscovererException, IOException
194     {
195         discoverer.setLastCheckedTime( repository, "update", new Date() );
196
197         discoverer.resetLastCheckedTime( repository, "update" );
198
199         List artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
200         assertNotNull( "Check artifacts not null", artifacts );
201
202         assertTrue( "Check included",
203                     artifacts.contains( createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" ) ) );
204
205         // try again with the updated timestamp
206         artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
207         assertNotNull( "Check artifacts not null", artifacts );
208
209         assertFalse( "Check not included",
210                      artifacts.contains( createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" ) ) );
211     }
212
213     public void testNotUpdatedInRepositoryForcedDiscoveryOtherMetadataAlreadyExists()
214         throws ComponentLookupException, DiscovererException, IOException
215     {
216         discoverer.setLastCheckedTime( repository, "test", new Date() );
217
218         discoverer.resetLastCheckedTime( repository, "update" );
219
220         List artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
221         assertNotNull( "Check artifacts not null", artifacts );
222
223         assertTrue( "Check included",
224                     artifacts.contains( createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" ) ) );
225
226         // try again with the updated timestamp
227         artifacts = discoverer.discoverArtifacts( repository, "update", null, true );
228         assertNotNull( "Check artifacts not null", artifacts );
229
230         assertFalse( "Check not included",
231                      artifacts.contains( createArtifact( "org.apache.maven.update", "test-not-updated", "1.0" ) ) );
232     }
233
234     public void testNoRepositoryMetadata()
235         throws ComponentLookupException, DiscovererException, ParseException, IOException
236     {
237         removeTimestampMetadata();
238
239         // should find all
240         List artifacts = discoverer.discoverArtifacts( repository, TEST_OPERATION, null, true );
241         assertNotNull( "Check artifacts not null", artifacts );
242
243         assertTrue( "Check included",
244                     artifacts.contains( createArtifact( "org.apache.maven.update", "test-updated", "1.0" ) ) );
245     }
246
247     private void removeTimestampMetadata()
248     {
249         // remove the metadata that tracks time
250         File file = new File( repository.getBasedir(), "maven-metadata.xml" );
251         file.delete();
252         assertFalse( file.exists() );
253     }
254 }