1   package org.apache.maven.repository.legacy;
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 java.io.File;
23  
24  import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
25  import org.apache.maven.artifact.Artifact;
26  import org.apache.maven.artifact.factory.ArtifactFactory;
27  import org.apache.maven.artifact.repository.ArtifactRepository;
28  import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
29  import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
30  import org.apache.maven.repository.legacy.DefaultUpdateCheckManager;
31  import org.codehaus.plexus.logging.Logger;
32  import org.codehaus.plexus.logging.console.ConsoleLogger;
33  
34  public class DefaultUpdateCheckManagerTest
35      extends AbstractArtifactComponentTestCase
36  {
37  
38      DefaultUpdateCheckManager updateCheckManager;
39  
40      @Override
41      protected String component()
42      {
43          return "updateCheckManager";
44      }
45  
46      @Override
47      protected void setUp()
48          throws Exception
49      {
50          super.setUp();
51  
52          updateCheckManager = new DefaultUpdateCheckManager( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
53      }
54  
55      public void testArtifact() throws Exception
56      {
57          ArtifactRepository remoteRepository = remoteRepository();
58  
59          ArtifactRepository localRepository = localRepository();
60  
61          Artifact a = createArtifact( "a", "0.0.1-SNAPSHOT" );
62          File file = new File( localRepository.getBasedir(), 
63                                localRepository.pathOf( a ) );
64          file.delete();
65          a.setFile( file );
66  
67          File touchFile = updateCheckManager.getTouchfile( a );
68          touchFile.delete();
69  
70          assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
71  
72          file.getParentFile().mkdirs();
73          file.createNewFile();
74          updateCheckManager.touch( a, remoteRepository, null );
75  
76          assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
77  
78          assertNull( updateCheckManager.readLastUpdated( touchFile,
79                                                          updateCheckManager.getRepositoryKey( remoteRepository ) ) );
80          
81          assertFalse( updateCheckManager.getTouchfile( a ).exists() );
82      }
83  
84      public void testMissingArtifact()
85          throws Exception
86      {
87          ArtifactRepository remoteRepository = remoteRepository();
88  
89          ArtifactRepository localRepository = localRepository();
90  
91          Artifact a = createArtifact( "a", "0.0.1-SNAPSHOT" );
92          File file = new File( localRepository.getBasedir(), 
93                                localRepository.pathOf( a ) );
94          file.delete();
95          a.setFile( file );
96  
97          File touchFile = updateCheckManager.getTouchfile( a );
98          touchFile.delete();
99  
100         assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
101 
102         updateCheckManager.touch( a, remoteRepository, null );
103 
104         assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
105 
106         assertFalse( file.exists() );
107         assertNotNull( updateCheckManager.readLastUpdated( touchFile,
108                                                            updateCheckManager.getRepositoryKey( remoteRepository ) ) );
109     }
110 
111     public void testPom() throws Exception
112     {
113         ArtifactRepository remoteRepository = remoteRepository();
114 
115         ArtifactRepository localRepository = localRepository();
116 
117         Artifact a = createArtifact( "a", "0.0.1", "pom" );
118         File file = new File( localRepository.getBasedir(), 
119                               localRepository.pathOf( a ) );
120         file.delete();
121         a.setFile( file );
122 
123         File touchFile = updateCheckManager.getTouchfile( a );
124         touchFile.delete();
125 
126         assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
127 
128         file.getParentFile().mkdirs();
129         file.createNewFile();
130         updateCheckManager.touch( a, remoteRepository, null );
131 
132         assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
133 
134         assertNull( updateCheckManager.readLastUpdated( touchFile,
135                                                         updateCheckManager.getRepositoryKey( remoteRepository ) ) );
136         
137         assertFalse( updateCheckManager.getTouchfile( a ).exists() );
138     }
139 
140     public void testMissingPom()
141         throws Exception
142     {
143         ArtifactRepository remoteRepository = remoteRepository();
144 
145         ArtifactRepository localRepository = localRepository();
146 
147         Artifact a = createArtifact( "a", "0.0.1", "pom" );
148         File file = new File( localRepository.getBasedir(), 
149                               localRepository.pathOf( a ) );
150         file.delete();
151         a.setFile( file );
152 
153         File touchFile = updateCheckManager.getTouchfile( a );
154         touchFile.delete();
155 
156         assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
157 
158         updateCheckManager.touch( a, remoteRepository, null );
159 
160         assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
161 
162         assertFalse( file.exists() );
163         assertNotNull( updateCheckManager.readLastUpdated( touchFile,
164                                                            updateCheckManager.getRepositoryKey( remoteRepository ) ) );
165     }
166 
167     public void testMetadata() throws Exception
168     {
169         ArtifactRepository remoteRepository = remoteRepository();
170 
171         ArtifactRepository localRepository = localRepository();
172 
173         Artifact a = createRemoteArtifact( "a", "0.0.1-SNAPSHOT" );
174         RepositoryMetadata metadata = new ArtifactRepositoryMetadata( a );
175 
176         File file = new File( localRepository.getBasedir(),
177                               localRepository.pathOfLocalRepositoryMetadata( metadata, localRepository ) );
178         file.delete();
179 
180         File touchFile = updateCheckManager.getTouchfile( metadata, file );
181         touchFile.delete();
182 
183         assertTrue( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
184 
185         file.getParentFile().mkdirs();
186         file.createNewFile();
187         updateCheckManager.touch( metadata, remoteRepository, file );
188 
189         assertFalse( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
190 
191         assertNotNull( updateCheckManager.readLastUpdated( touchFile, updateCheckManager.getMetadataKey( remoteRepository, file ) ) );
192     }
193 
194     public void testMissingMetadata() throws Exception
195     {
196         ArtifactRepository remoteRepository = remoteRepository();
197 
198         ArtifactRepository localRepository = localRepository();
199 
200         Artifact a = createRemoteArtifact( "a", "0.0.1-SNAPSHOT" );
201         RepositoryMetadata metadata = new ArtifactRepositoryMetadata( a );
202 
203         File file = new File( localRepository.getBasedir(),
204                               localRepository.pathOfLocalRepositoryMetadata( metadata, localRepository ) );
205         file.delete();
206 
207         File touchFile = updateCheckManager.getTouchfile( metadata, file );
208         touchFile.delete();
209 
210         assertTrue( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
211 
212         updateCheckManager.touch( metadata, remoteRepository, file );
213 
214         assertFalse( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
215 
216         assertNotNull( updateCheckManager.readLastUpdated( touchFile, updateCheckManager.getMetadataKey( remoteRepository, file ) ) );
217     }
218 
219     public void testArtifactTouchFileName() throws Exception
220     {
221         ArtifactFactory artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
222 
223         ArtifactRepository localRepository = localRepository();
224 
225         Artifact a = artifactFactory.createArtifactWithClassifier( "groupdId", "a", "0.0.1-SNAPSHOT", "jar", null );
226         File file = new File( localRepository.getBasedir(), 
227                               localRepository.pathOf( a ) );
228         a.setFile( file );
229 
230         assertEquals( "a-0.0.1-SNAPSHOT.jar.lastUpdated", updateCheckManager.getTouchfile( a ).getName() );
231 
232         a = artifactFactory.createArtifactWithClassifier( "groupdId", "a", "0.0.1-SNAPSHOT", "jar", "classifier" );
233         file = new File( localRepository.getBasedir(), 
234                               localRepository.pathOf( a ) );
235         a.setFile( file );
236 
237         assertEquals( "a-0.0.1-SNAPSHOT-classifier.jar.lastUpdated", updateCheckManager.getTouchfile( a ).getName() );
238     }
239 
240 }