| package org.eclipse.aether.internal.impl; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import static org.junit.Assert.*; |
| |
| import java.io.File; |
| import java.net.URI; |
| import java.util.Calendar; |
| import java.util.Date; |
| import java.util.TimeZone; |
| |
| import org.eclipse.aether.DefaultRepositorySystemSession; |
| import org.eclipse.aether.RepositorySystemSession; |
| import org.eclipse.aether.artifact.Artifact; |
| import org.eclipse.aether.artifact.DefaultArtifact; |
| import org.eclipse.aether.impl.UpdateCheck; |
| import org.eclipse.aether.internal.impl.DefaultUpdateCheckManager; |
| import org.eclipse.aether.internal.test.util.TestFileUtils; |
| import org.eclipse.aether.internal.test.util.TestUtils; |
| import org.eclipse.aether.metadata.DefaultMetadata; |
| import org.eclipse.aether.metadata.Metadata; |
| import org.eclipse.aether.repository.RemoteRepository; |
| import org.eclipse.aether.repository.RepositoryPolicy; |
| import org.eclipse.aether.transfer.ArtifactNotFoundException; |
| import org.eclipse.aether.transfer.ArtifactTransferException; |
| import org.eclipse.aether.transfer.MetadataNotFoundException; |
| import org.eclipse.aether.transfer.MetadataTransferException; |
| import org.eclipse.aether.util.repository.SimpleResolutionErrorPolicy; |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| /** |
| */ |
| public class DefaultUpdateCheckManagerTest |
| { |
| |
| private static final int HOUR = 60 * 60 * 1000; |
| |
| private DefaultUpdateCheckManager manager; |
| |
| private DefaultRepositorySystemSession session; |
| |
| private Metadata metadata; |
| |
| private RemoteRepository repository; |
| |
| private Artifact artifact; |
| |
| @Before |
| public void setup() |
| throws Exception |
| { |
| File dir = TestFileUtils.createTempFile( "" ); |
| TestFileUtils.deleteFile( dir ); |
| |
| File metadataFile = new File( dir, "metadata.txt" ); |
| TestFileUtils.writeString( metadataFile, "metadata" ); |
| File artifactFile = new File( dir, "artifact.txt" ); |
| TestFileUtils.writeString( artifactFile, "artifact" ); |
| |
| session = TestUtils.newSession(); |
| repository = |
| new RemoteRepository.Builder( "id", "default", TestFileUtils.createTempDir().toURI().toURL().toString() ).build(); |
| manager = new DefaultUpdateCheckManager().setUpdatePolicyAnalyzer( new DefaultUpdatePolicyAnalyzer() ); |
| metadata = |
| new DefaultMetadata( "gid", "aid", "ver", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT, |
| metadataFile ); |
| artifact = new DefaultArtifact( "gid", "aid", "", "ext", "ver" ).setFile( artifactFile ); |
| } |
| |
| @After |
| public void teardown() |
| throws Exception |
| { |
| new File( metadata.getFile().getParent(), "resolver-status.properties" ).delete(); |
| new File( artifact.getFile().getPath() + ".lastUpdated" ).delete(); |
| metadata.getFile().delete(); |
| artifact.getFile().delete(); |
| TestFileUtils.deleteFile( new File( new URI( repository.getUrl() ) ) ); |
| } |
| |
| static void resetSessionData( RepositorySystemSession session ) |
| { |
| session.getData().set( "updateCheckManager.checks", null ); |
| } |
| |
| private UpdateCheck<Metadata, MetadataTransferException> newMetadataCheck() |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = new UpdateCheck<Metadata, MetadataTransferException>(); |
| check.setItem( metadata ); |
| check.setFile( metadata.getFile() ); |
| check.setRepository( repository ); |
| check.setAuthoritativeRepository( repository ); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":10" ); |
| return check; |
| } |
| |
| private UpdateCheck<Artifact, ArtifactTransferException> newArtifactCheck() |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = new UpdateCheck<Artifact, ArtifactTransferException>(); |
| check.setItem( artifact ); |
| check.setFile( artifact.getFile() ); |
| check.setRepository( repository ); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":10" ); |
| return check; |
| } |
| |
| @Test( expected = Exception.class ) |
| public void testCheckMetadataFailOnNoFile() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setItem( metadata.setFile( null ) ); |
| check.setFile( null ); |
| |
| manager.checkMetadata( session, check ); |
| } |
| |
| @Test |
| public void testCheckMetadataUpdatePolicyRequired() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| |
| Calendar cal = Calendar.getInstance(); |
| cal.add( Calendar.DATE, -1 ); |
| check.setLocalLastUpdated( cal.getTimeInMillis() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| manager.checkMetadata( session, check ); |
| assertNull( check.getException() ); |
| assertTrue( check.isRequired() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| manager.checkMetadata( session, check ); |
| assertNull( check.getException() ); |
| assertTrue( check.isRequired() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":60" ); |
| manager.checkMetadata( session, check ); |
| assertNull( check.getException() ); |
| assertTrue( check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataUpdatePolicyNotRequired() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| |
| check.setLocalLastUpdated( System.currentTimeMillis() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_NEVER ); |
| manager.checkMetadata( session, check ); |
| assertFalse( check.isRequired() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| manager.checkMetadata( session, check ); |
| assertFalse( check.isRequired() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":61" ); |
| manager.checkMetadata( session, check ); |
| assertFalse( check.isRequired() ); |
| |
| check.setPolicy( "no particular policy" ); |
| manager.checkMetadata( session, check ); |
| assertFalse( check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadata() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| |
| // existing file, never checked before |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| // just checked |
| manager.touchMetadata( session, check ); |
| resetSessionData( session ); |
| |
| check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":60" ); |
| |
| manager.checkMetadata( session, check ); |
| assertEquals( false, check.isRequired() ); |
| |
| // no local file |
| check.getFile().delete(); |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| // (! file.exists && ! repoKey) -> no timestamp |
| } |
| |
| @Test |
| public void testCheckMetadataNoLocalFile() |
| throws Exception |
| { |
| metadata.getFile().delete(); |
| |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| |
| long lastUpdate = new Date().getTime() - HOUR; |
| check.setLocalLastUpdated( lastUpdate ); |
| |
| // ! file.exists && updateRequired -> check in remote repo |
| check.setLocalLastUpdated( lastUpdate ); |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataNotFoundInRepoCachingEnabled() |
| throws Exception |
| { |
| metadata.getFile().delete(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| |
| check.setException( new MetadataNotFoundException( metadata, repository, "" ) ); |
| manager.touchMetadata( session, check ); |
| resetSessionData( session ); |
| |
| // ! file.exists && ! updateRequired -> artifact not found in remote repo |
| check = newMetadataCheck().setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| manager.checkMetadata( session, check ); |
| assertEquals( false, check.isRequired() ); |
| assertTrue( check.getException() instanceof MetadataNotFoundException ); |
| assertTrue( check.getException().isFromCache() ); |
| } |
| |
| @Test |
| public void testCheckMetadataNotFoundInRepoCachingDisabled() |
| throws Exception |
| { |
| metadata.getFile().delete(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( false, false ) ); |
| |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| |
| check.setException( new MetadataNotFoundException( metadata, repository, "" ) ); |
| manager.touchMetadata( session, check ); |
| resetSessionData( session ); |
| |
| // ! file.exists && updateRequired -> check in remote repo |
| check = newMetadataCheck().setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| assertNull( check.getException() ); |
| } |
| |
| @Test |
| public void testCheckMetadataErrorFromRepoCachingEnabled() |
| throws Exception |
| { |
| metadata.getFile().delete(); |
| |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| |
| check.setException( new MetadataTransferException( metadata, repository, "some error" ) ); |
| manager.touchMetadata( session, check ); |
| resetSessionData( session ); |
| |
| // ! file.exists && ! updateRequired && previousError -> depends on transfer error caching |
| check = newMetadataCheck(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( false, true ) ); |
| manager.checkMetadata( session, check ); |
| assertEquals( false, check.isRequired() ); |
| assertTrue( check.getException() instanceof MetadataTransferException ); |
| assertTrue( String.valueOf( check.getException() ), check.getException().getMessage().contains( "some error" ) ); |
| assertTrue( check.getException().isFromCache() ); |
| } |
| |
| @Test |
| public void testCheckMetadataErrorFromRepoCachingDisabled() |
| throws Exception |
| { |
| metadata.getFile().delete(); |
| |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| |
| check.setException( new MetadataTransferException( metadata, repository, "some error" ) ); |
| manager.touchMetadata( session, check ); |
| resetSessionData( session ); |
| |
| // ! file.exists && ! updateRequired && previousError -> depends on transfer error caching |
| check = newMetadataCheck(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( false, false ) ); |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| assertNull( check.getException() ); |
| } |
| |
| @Test |
| public void testCheckMetadataAtMostOnceDuringSessionEvenIfUpdatePolicyAlways() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| |
| // first check |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| manager.touchMetadata( session, check ); |
| |
| // second check in same session |
| manager.checkMetadata( session, check ); |
| assertEquals( false, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataSessionStateModes() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| manager.touchMetadata( session, check ); |
| |
| session.setConfigProperty( DefaultUpdateCheckManager.CONFIG_PROP_SESSION_STATE, "bypass" ); |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| resetSessionData( session ); |
| manager.touchMetadata( session, check ); |
| |
| session.setConfigProperty( DefaultUpdateCheckManager.CONFIG_PROP_SESSION_STATE, "true" ); |
| manager.checkMetadata( session, check ); |
| assertEquals( false, check.isRequired() ); |
| |
| session.setConfigProperty( DefaultUpdateCheckManager.CONFIG_PROP_SESSION_STATE, "false" ); |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataAtMostOnceDuringSessionEvenIfUpdatePolicyAlways_InvalidFile() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| check.setFileValid( false ); |
| |
| // first check |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| // first touch, without exception |
| manager.touchMetadata( session, check ); |
| |
| // another check in same session |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| // another touch, with exception |
| check.setException( new MetadataNotFoundException( check.getItem(), check.getRepository() ) ); |
| manager.touchMetadata( session, check ); |
| |
| // another check in same session |
| manager.checkMetadata( session, check ); |
| assertEquals( false, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataAtMostOnceDuringSessionEvenIfUpdatePolicyAlways_DifferentRepoIdSameUrl() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| check.setFileValid( false ); |
| |
| // first check |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| manager.touchMetadata( session, check ); |
| |
| // second check in same session but for repo with different id |
| check.setRepository( new RemoteRepository.Builder( check.getRepository() ).setId( "check" ).build() ); |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataWhenLocallyMissingEvenIfUpdatePolicyIsNever() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_NEVER ); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| check.getFile().delete(); |
| assertEquals( check.getFile().getAbsolutePath(), false, check.getFile().exists() ); |
| |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataWhenLocallyPresentButInvalidEvenIfUpdatePolicyIsNever() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_NEVER ); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| manager.touchMetadata( session, check ); |
| resetSessionData( session ); |
| |
| check.setFileValid( false ); |
| |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataWhenLocallyDeletedEvenIfTimestampUpToDate() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| manager.touchMetadata( session, check ); |
| resetSessionData( session ); |
| |
| check.getFile().delete(); |
| assertEquals( check.getFile().getAbsolutePath(), false, check.getFile().exists() ); |
| |
| manager.checkMetadata( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckMetadataNotWhenUpdatePolicyIsNeverAndTimestampIsUnavailable() |
| throws Exception |
| { |
| UpdateCheck<Metadata, MetadataTransferException> check = newMetadataCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_NEVER ); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| manager.checkMetadata( session, check ); |
| assertEquals( false, check.isRequired() ); |
| } |
| |
| @Test( expected = IllegalArgumentException.class ) |
| public void testCheckArtifactFailOnNoFile() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setItem( artifact.setFile( null ) ); |
| check.setFile( null ); |
| |
| manager.checkArtifact( session, check ); |
| assertNotNull( check.getException() ); |
| } |
| |
| @Test |
| public void testCheckArtifactUpdatePolicyRequired() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setItem( artifact ); |
| check.setFile( artifact.getFile() ); |
| |
| Calendar cal = Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) ); |
| cal.add( Calendar.DATE, -1 ); |
| long lastUpdate = cal.getTimeInMillis(); |
| artifact.getFile().setLastModified( lastUpdate ); |
| check.setLocalLastUpdated( lastUpdate ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| manager.checkArtifact( session, check ); |
| assertNull( check.getException() ); |
| assertTrue( check.isRequired() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| manager.checkArtifact( session, check ); |
| assertNull( check.getException() ); |
| assertTrue( check.isRequired() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":60" ); |
| manager.checkArtifact( session, check ); |
| assertNull( check.getException() ); |
| assertTrue( check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactUpdatePolicyNotRequired() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setItem( artifact ); |
| check.setFile( artifact.getFile() ); |
| |
| Calendar cal = Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) ); |
| cal.add( Calendar.HOUR_OF_DAY, -1 ); |
| check.setLocalLastUpdated( cal.getTimeInMillis() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_NEVER ); |
| manager.checkArtifact( session, check ); |
| assertFalse( check.isRequired() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| manager.checkArtifact( session, check ); |
| assertFalse( check.isRequired() ); |
| |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":61" ); |
| manager.checkArtifact( session, check ); |
| assertFalse( check.isRequired() ); |
| |
| check.setPolicy( "no particular policy" ); |
| manager.checkArtifact( session, check ); |
| assertFalse( check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifact() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| long fifteenMinutes = new Date().getTime() - ( 15 * 60 * 1000 ); |
| check.getFile().setLastModified( fifteenMinutes ); |
| // time is truncated on setLastModfied |
| fifteenMinutes = check.getFile().lastModified(); |
| |
| // never checked before |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| // just checked |
| check.setLocalLastUpdated( 0 ); |
| long lastUpdate = new Date().getTime(); |
| check.getFile().setLastModified( lastUpdate ); |
| lastUpdate = check.getFile().lastModified(); |
| |
| manager.checkArtifact( session, check ); |
| assertEquals( false, check.isRequired() ); |
| |
| // no local file, no repo timestamp |
| check.setLocalLastUpdated( 0 ); |
| check.getFile().delete(); |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactNoLocalFile() |
| throws Exception |
| { |
| artifact.getFile().delete(); |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| |
| long lastUpdate = new Date().getTime() - HOUR; |
| |
| // ! file.exists && updateRequired -> check in remote repo |
| check.setLocalLastUpdated( lastUpdate ); |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactNotFoundInRepoCachingEnabled() |
| throws Exception |
| { |
| artifact.getFile().delete(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setException( new ArtifactNotFoundException( artifact, repository ) ); |
| manager.touchArtifact( session, check ); |
| resetSessionData( session ); |
| |
| // ! file.exists && ! updateRequired -> artifact not found in remote repo |
| check = newArtifactCheck().setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| manager.checkArtifact( session, check ); |
| assertEquals( false, check.isRequired() ); |
| assertTrue( check.getException() instanceof ArtifactNotFoundException ); |
| assertTrue( check.getException().isFromCache() ); |
| } |
| |
| @Test |
| public void testCheckArtifactNotFoundInRepoCachingDisabled() |
| throws Exception |
| { |
| artifact.getFile().delete(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( false, false ) ); |
| |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setException( new ArtifactNotFoundException( artifact, repository ) ); |
| manager.touchArtifact( session, check ); |
| resetSessionData( session ); |
| |
| // ! file.exists && updateRequired -> check in remote repo |
| check = newArtifactCheck().setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| assertNull( check.getException() ); |
| } |
| |
| @Test |
| public void testCheckArtifactErrorFromRepoCachingEnabled() |
| throws Exception |
| { |
| artifact.getFile().delete(); |
| |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| check.setException( new ArtifactTransferException( artifact, repository, "some error" ) ); |
| manager.touchArtifact( session, check ); |
| resetSessionData( session ); |
| |
| // ! file.exists && ! updateRequired && previousError -> depends on transfer error caching |
| check = newArtifactCheck(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( false, true ) ); |
| manager.checkArtifact( session, check ); |
| assertEquals( false, check.isRequired() ); |
| assertTrue( check.getException() instanceof ArtifactTransferException ); |
| assertTrue( check.getException().isFromCache() ); |
| } |
| |
| @Test |
| public void testCheckArtifactErrorFromRepoCachingDisabled() |
| throws Exception |
| { |
| artifact.getFile().delete(); |
| |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_DAILY ); |
| check.setException( new ArtifactTransferException( artifact, repository, "some error" ) ); |
| manager.touchArtifact( session, check ); |
| resetSessionData( session ); |
| |
| // ! file.exists && ! updateRequired && previousError -> depends on transfer error caching |
| check = newArtifactCheck(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( false, false ) ); |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| assertNull( check.getException() ); |
| } |
| |
| @Test |
| public void testCheckArtifactAtMostOnceDuringSessionEvenIfUpdatePolicyAlways() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| |
| // first check |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| manager.touchArtifact( session, check ); |
| |
| // second check in same session |
| manager.checkArtifact( session, check ); |
| assertEquals( false, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactSessionStateModes() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| manager.touchArtifact( session, check ); |
| |
| session.setConfigProperty( DefaultUpdateCheckManager.CONFIG_PROP_SESSION_STATE, "bypass" ); |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| resetSessionData( session ); |
| manager.touchArtifact( session, check ); |
| |
| session.setConfigProperty( DefaultUpdateCheckManager.CONFIG_PROP_SESSION_STATE, "true" ); |
| manager.checkArtifact( session, check ); |
| assertEquals( false, check.isRequired() ); |
| |
| session.setConfigProperty( DefaultUpdateCheckManager.CONFIG_PROP_SESSION_STATE, "false" ); |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactAtMostOnceDuringSessionEvenIfUpdatePolicyAlways_InvalidFile() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| check.setFileValid( false ); |
| |
| // first check |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| // first touch, without exception |
| manager.touchArtifact( session, check ); |
| |
| // another check in same session |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| // another touch, with exception |
| check.setException( new ArtifactNotFoundException( check.getItem(), check.getRepository() ) ); |
| manager.touchArtifact( session, check ); |
| |
| // another check in same session |
| manager.checkArtifact( session, check ); |
| assertEquals( false, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactAtMostOnceDuringSessionEvenIfUpdatePolicyAlways_DifferentRepoIdSameUrl() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_ALWAYS ); |
| |
| // first check |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| |
| manager.touchArtifact( session, check ); |
| |
| // second check in same session but for repo with different id |
| check.setRepository( new RemoteRepository.Builder( check.getRepository() ).setId( "check" ).build() ); |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactWhenLocallyMissingEvenIfUpdatePolicyIsNever() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_NEVER ); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| check.getFile().delete(); |
| assertEquals( check.getFile().getAbsolutePath(), false, check.getFile().exists() ); |
| |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactWhenLocallyPresentButInvalidEvenIfUpdatePolicyIsNever() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_NEVER ); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| manager.touchArtifact( session, check ); |
| resetSessionData( session ); |
| |
| check.setFileValid( false ); |
| |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactWhenLocallyDeletedEvenIfTimestampUpToDate() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| manager.touchArtifact( session, check ); |
| resetSessionData( session ); |
| |
| check.getFile().delete(); |
| assertEquals( check.getFile().getAbsolutePath(), false, check.getFile().exists() ); |
| |
| manager.checkArtifact( session, check ); |
| assertEquals( true, check.isRequired() ); |
| } |
| |
| @Test |
| public void testCheckArtifactNotWhenUpdatePolicyIsNeverAndTimestampIsUnavailable() |
| throws Exception |
| { |
| UpdateCheck<Artifact, ArtifactTransferException> check = newArtifactCheck(); |
| check.setPolicy( RepositoryPolicy.UPDATE_POLICY_NEVER ); |
| session.setResolutionErrorPolicy( new SimpleResolutionErrorPolicy( true, false ) ); |
| |
| manager.checkArtifact( session, check ); |
| assertEquals( false, check.isRequired() ); |
| } |
| |
| } |