| package org.apache.maven.repository; |
| |
| /* |
| * 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 java.util.Arrays; |
| import java.util.List; |
| |
| import org.apache.maven.test.PlexusTestCase; |
| import org.apache.maven.artifact.repository.ArtifactRepository; |
| import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; |
| import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory; |
| import org.apache.maven.settings.Mirror; |
| import org.junit.jupiter.api.AfterEach; |
| import org.junit.jupiter.api.BeforeEach; |
| import org.junit.jupiter.api.Test; |
| |
| import static org.junit.jupiter.api.Assertions.assertFalse; |
| import static org.junit.jupiter.api.Assertions.assertNull; |
| import static org.junit.jupiter.api.Assertions.assertSame; |
| import static org.junit.jupiter.api.Assertions.assertTrue; |
| |
| import javax.inject.Inject; |
| |
| public class MirrorProcessorTest |
| extends PlexusTestCase |
| { |
| @Inject |
| private DefaultMirrorSelector mirrorSelector; |
| |
| @Inject |
| private ArtifactRepositoryFactory repositorySystem; |
| |
| @Test |
| public void testExternalURL() |
| { |
| assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://somehost" ) ) ); |
| assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) ); |
| assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) ); |
| assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) ); |
| assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://" ) ) ); |
| // these are local |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) ); |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) ); |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) ); |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) ); |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://localhost" ) ) ); |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) ); |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) ); |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) ); |
| |
| // not a proper url so returns false; |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) ); |
| assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "" ) ) ); |
| } |
| |
| @Test |
| public void testMirrorLookup() |
| { |
| Mirror mirrorA = newMirror( "a", "a", "http://a" ); |
| Mirror mirrorB = newMirror( "b", "b", "http://b" ); |
| |
| List<Mirror> mirrors = Arrays.asList( mirrorA, mirrorB ); |
| |
| assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) ); |
| |
| assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) ); |
| |
| assertNull( mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) ); |
| } |
| |
| @Test |
| public void testMirrorWildcardLookup() |
| { |
| Mirror mirrorA = newMirror( "a", "a", "http://a" ); |
| Mirror mirrorB = newMirror( "b", "b", "http://b" ); |
| Mirror mirrorC = newMirror( "c", "*", "http://wildcard" ); |
| |
| List<Mirror> mirrors = Arrays.asList( mirrorA, mirrorB, mirrorC ); |
| |
| assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) ); |
| |
| assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) ); |
| |
| assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) ); |
| } |
| |
| @Test |
| public void testMirrorStopOnFirstMatch() |
| { |
| // exact matches win first |
| Mirror mirrorA2 = newMirror( "a2", "a,b", "http://a2" ); |
| Mirror mirrorA = newMirror( "a", "a", "http://a" ); |
| // make sure repeated entries are skipped |
| Mirror mirrorA3 = newMirror( "a", "a", "http://a3" ); |
| |
| Mirror mirrorB = newMirror( "b", "b", "http://b" ); |
| Mirror mirrorC = newMirror( "c", "d,e", "http://de" ); |
| Mirror mirrorC2 = newMirror( "c", "*", "http://wildcard" ); |
| Mirror mirrorC3 = newMirror( "c", "e,f", "http://ef" ); |
| |
| List<Mirror> mirrors = Arrays.asList( mirrorA2, mirrorA, mirrorA3, mirrorB, mirrorC, mirrorC2, mirrorC3 ); |
| |
| assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) ); |
| |
| assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) ); |
| |
| assertSame( mirrorC2, mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) ); |
| |
| assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "d", "http://d" ), mirrors ) ); |
| |
| assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "e", "http://e" ), mirrors ) ); |
| |
| assertSame( mirrorC2, mirrorSelector.getMirror( getRepo( "f", "http://f" ), mirrors ) ); |
| } |
| |
| @Test |
| public void testPatterns() |
| { |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*" ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*," ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), ",*," ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*," ) ); |
| |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a" ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a," ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), ",a," ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a," ) ); |
| |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a" ) ); |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a," ) ); |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), ",a" ) ); |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), ",a," ) ); |
| |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a,b" ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a,b" ) ); |
| |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "a,b" ) ); |
| |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*" ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,b" ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,!b" ) ); |
| |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,!a" ) ); |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "!a,*" ) ); |
| |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "*,!a" ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "!a,*" ) ); |
| |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "!a,!c" ) ); |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "d" ), "!a,!c*" ) ); |
| } |
| |
| @Test |
| public void testPatternsWithExternal() |
| { |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "*" ) ); |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) ); |
| |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) ); |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) ); |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) ); |
| |
| assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) ); |
| assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) ); |
| } |
| |
| @Test |
| public void testLayoutPattern() |
| { |
| assertTrue( DefaultMirrorSelector.matchesLayout( "default", null ) ); |
| assertTrue( DefaultMirrorSelector.matchesLayout( "default", "" ) ); |
| assertTrue( DefaultMirrorSelector.matchesLayout( "default", "*" ) ); |
| |
| assertTrue( DefaultMirrorSelector.matchesLayout( "default", "default" ) ); |
| assertFalse( DefaultMirrorSelector.matchesLayout( "default", "legacy" ) ); |
| |
| assertTrue( DefaultMirrorSelector.matchesLayout( "default", "legacy,default" ) ); |
| assertTrue( DefaultMirrorSelector.matchesLayout( "default", "default,legacy" ) ); |
| |
| assertFalse( DefaultMirrorSelector.matchesLayout( "default", "legacy,!default" ) ); |
| assertFalse( DefaultMirrorSelector.matchesLayout( "default", "!default,legacy" ) ); |
| |
| assertFalse( DefaultMirrorSelector.matchesLayout( "default", "*,!default" ) ); |
| assertFalse( DefaultMirrorSelector.matchesLayout( "default", "!default,*" ) ); |
| } |
| |
| @Test |
| public void testMirrorLayoutConsideredForMatching() |
| { |
| ArtifactRepository repo = getRepo( "a" ); |
| |
| Mirror mirrorA = newMirror( "a", "a", null, "http://a" ); |
| Mirror mirrorB = newMirror( "b", "a", "p2", "http://b" ); |
| |
| Mirror mirrorC = newMirror( "c", "*", null, "http://c" ); |
| Mirror mirrorD = newMirror( "d", "*", "p2", "http://d" ); |
| |
| assertSame( mirrorA, mirrorSelector.getMirror( repo, Arrays.asList( mirrorA ) ) ); |
| assertNull( mirrorSelector.getMirror( repo, Arrays.asList( mirrorB ) ) ); |
| |
| assertSame( mirrorC, mirrorSelector.getMirror( repo, Arrays.asList( mirrorC ) ) ); |
| assertNull( mirrorSelector.getMirror( repo, Arrays.asList( mirrorD ) ) ); |
| } |
| |
| /** |
| * Build an ArtifactRepository object. |
| * |
| * @param id |
| * @param url |
| * @return |
| */ |
| private ArtifactRepository getRepo( String id, String url ) |
| { |
| return repositorySystem.createArtifactRepository( id, url, new DefaultRepositoryLayout(), null, null ); |
| } |
| |
| /** |
| * Build an ArtifactRepository object. |
| * |
| * @param id |
| * @return |
| */ |
| private ArtifactRepository getRepo( String id ) |
| { |
| return getRepo( id, "http://something" ); |
| } |
| |
| private Mirror newMirror( String id, String mirrorOf, String url ) |
| { |
| return newMirror( id, mirrorOf, null, url ); |
| } |
| |
| private Mirror newMirror( String id, String mirrorOf, String layouts, String url ) |
| { |
| Mirror mirror = new Mirror(); |
| |
| mirror.setId( id ); |
| mirror.setMirrorOf( mirrorOf ); |
| mirror.setMirrorOfLayouts( layouts ); |
| mirror.setUrl( url ); |
| |
| return mirror; |
| } |
| |
| } |