001    package org.apache.maven.repository.legacy;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *  http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import java.io.File;
023    
024    import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
025    import org.apache.maven.artifact.Artifact;
026    import org.apache.maven.artifact.factory.ArtifactFactory;
027    import org.apache.maven.artifact.repository.ArtifactRepository;
028    import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
029    import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
030    import org.apache.maven.repository.legacy.DefaultUpdateCheckManager;
031    import org.codehaus.plexus.logging.Logger;
032    import org.codehaus.plexus.logging.console.ConsoleLogger;
033    
034    public class DefaultUpdateCheckManagerTest
035        extends AbstractArtifactComponentTestCase
036    {
037    
038        DefaultUpdateCheckManager updateCheckManager;
039    
040        @Override
041        protected String component()
042        {
043            return "updateCheckManager";
044        }
045    
046        @Override
047        protected void setUp()
048            throws Exception
049        {
050            super.setUp();
051    
052            updateCheckManager = new DefaultUpdateCheckManager( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) );
053        }
054    
055        public void testArtifact() throws Exception
056        {
057            ArtifactRepository remoteRepository = remoteRepository();
058    
059            ArtifactRepository localRepository = localRepository();
060    
061            Artifact a = createArtifact( "a", "0.0.1-SNAPSHOT" );
062            File file = new File( localRepository.getBasedir(), 
063                                  localRepository.pathOf( a ) );
064            file.delete();
065            a.setFile( file );
066    
067            File touchFile = updateCheckManager.getTouchfile( a );
068            touchFile.delete();
069    
070            assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
071    
072            file.getParentFile().mkdirs();
073            file.createNewFile();
074            updateCheckManager.touch( a, remoteRepository, null );
075    
076            assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
077    
078            assertNull( updateCheckManager.readLastUpdated( touchFile,
079                                                            updateCheckManager.getRepositoryKey( remoteRepository ) ) );
080            
081            assertFalse( updateCheckManager.getTouchfile( a ).exists() );
082        }
083    
084        public void testMissingArtifact()
085            throws Exception
086        {
087            ArtifactRepository remoteRepository = remoteRepository();
088    
089            ArtifactRepository localRepository = localRepository();
090    
091            Artifact a = createArtifact( "a", "0.0.1-SNAPSHOT" );
092            File file = new File( localRepository.getBasedir(), 
093                                  localRepository.pathOf( a ) );
094            file.delete();
095            a.setFile( file );
096    
097            File touchFile = updateCheckManager.getTouchfile( a );
098            touchFile.delete();
099    
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    }