001package org.apache.maven.repository; 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 022import java.util.Arrays; 023import java.util.List; 024 025import org.apache.maven.artifact.repository.ArtifactRepository; 026import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory; 027import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; 028import org.apache.maven.settings.Mirror; 029import org.codehaus.plexus.PlexusTestCase; 030 031public class MirrorProcessorTest 032 extends PlexusTestCase 033{ 034 private DefaultMirrorSelector mirrorSelector; 035 private ArtifactRepositoryFactory repositorySystem; 036 037 protected void setUp() 038 throws Exception 039 { 040 mirrorSelector = (DefaultMirrorSelector) lookup( MirrorSelector.class ); 041 repositorySystem = lookup( ArtifactRepositoryFactory.class ); 042 } 043 044 @Override 045 protected void tearDown() 046 throws Exception 047 { 048 mirrorSelector = null; 049 repositorySystem = null; 050 051 super.tearDown(); 052 } 053 054 public void testExternalURL() 055 { 056 assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://somehost" ) ) ); 057 assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) ); 058 assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) ); 059 assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) ); 060 assertTrue( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://" ) ) ); 061 // these are local 062 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) ); 063 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) ); 064 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) ); 065 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) ); 066 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://localhost" ) ) ); 067 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) ); 068 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) ); 069 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) ); 070 071 // not a proper url so returns false; 072 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) ); 073 assertFalse( DefaultMirrorSelector.isExternalRepo( getRepo( "foo", "" ) ) ); 074 } 075 076 public void testMirrorLookup() 077 { 078 Mirror mirrorA = newMirror( "a", "a", "http://a" ); 079 Mirror mirrorB = newMirror( "b", "b", "http://b" ); 080 081 List<Mirror> mirrors = Arrays.asList( mirrorA, mirrorB ); 082 083 assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) ); 084 085 assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) ); 086 087 assertNull( mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) ); 088 } 089 090 public void testMirrorWildcardLookup() 091 { 092 Mirror mirrorA = newMirror( "a", "a", "http://a" ); 093 Mirror mirrorB = newMirror( "b", "b", "http://b" ); 094 Mirror mirrorC = newMirror( "c", "*", "http://wildcard" ); 095 096 List<Mirror> mirrors = Arrays.asList( mirrorA, mirrorB, mirrorC ); 097 098 assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) ); 099 100 assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) ); 101 102 assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) ); 103 } 104 105 public void testMirrorStopOnFirstMatch() 106 { 107 // exact matches win first 108 Mirror mirrorA2 = newMirror( "a2", "a,b", "http://a2" ); 109 Mirror mirrorA = newMirror( "a", "a", "http://a" ); 110 // make sure repeated entries are skipped 111 Mirror mirrorA3 = newMirror( "a", "a", "http://a3" ); 112 113 Mirror mirrorB = newMirror( "b", "b", "http://b" ); 114 Mirror mirrorC = newMirror( "c", "d,e", "http://de" ); 115 Mirror mirrorC2 = newMirror( "c", "*", "http://wildcard" ); 116 Mirror mirrorC3 = newMirror( "c", "e,f", "http://ef" ); 117 118 List<Mirror> mirrors = Arrays.asList( mirrorA2, mirrorA, mirrorA3, mirrorB, mirrorC, mirrorC2, mirrorC3 ); 119 120 assertSame( mirrorA, mirrorSelector.getMirror( getRepo( "a", "http://a.a" ), mirrors ) ); 121 122 assertSame( mirrorB, mirrorSelector.getMirror( getRepo( "b", "http://a.a" ), mirrors ) ); 123 124 assertSame( mirrorC2, mirrorSelector.getMirror( getRepo( "c", "http://c.c" ), mirrors ) ); 125 126 assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "d", "http://d" ), mirrors ) ); 127 128 assertSame( mirrorC, mirrorSelector.getMirror( getRepo( "e", "http://e" ), mirrors ) ); 129 130 assertSame( mirrorC2, mirrorSelector.getMirror( getRepo( "f", "http://f" ), mirrors ) ); 131 } 132 133 public void testPatterns() 134 { 135 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*" ) ); 136 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*," ) ); 137 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), ",*," ) ); 138 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*," ) ); 139 140 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a" ) ); 141 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a," ) ); 142 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), ",a," ) ); 143 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a," ) ); 144 145 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a" ) ); 146 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a," ) ); 147 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), ",a" ) ); 148 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "b" ), ",a," ) ); 149 150 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "a,b" ) ); 151 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "b" ), "a,b" ) ); 152 153 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "a,b" ) ); 154 155 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*" ) ); 156 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,b" ) ); 157 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,!b" ) ); 158 159 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "*,!a" ) ); 160 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a" ), "!a,*" ) ); 161 162 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "*,!a" ) ); 163 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "!a,*" ) ); 164 165 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c" ), "!a,!c" ) ); 166 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "d" ), "!a,!c*" ) ); 167 } 168 169 public void testPatternsWithExternal() 170 { 171 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "*" ) ); 172 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) ); 173 174 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) ); 175 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) ); 176 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) ); 177 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) ); 178 179 assertFalse( DefaultMirrorSelector.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) ); 180 assertTrue( DefaultMirrorSelector.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) ); 181 } 182 183 public void testLayoutPattern() 184 { 185 assertTrue( DefaultMirrorSelector.matchesLayout( "default", null ) ); 186 assertTrue( DefaultMirrorSelector.matchesLayout( "default", "" ) ); 187 assertTrue( DefaultMirrorSelector.matchesLayout( "default", "*" ) ); 188 189 assertTrue( DefaultMirrorSelector.matchesLayout( "default", "default" ) ); 190 assertFalse( DefaultMirrorSelector.matchesLayout( "default", "legacy" ) ); 191 192 assertTrue( DefaultMirrorSelector.matchesLayout( "default", "legacy,default" ) ); 193 assertTrue( DefaultMirrorSelector.matchesLayout( "default", "default,legacy" ) ); 194 195 assertFalse( DefaultMirrorSelector.matchesLayout( "default", "legacy,!default" ) ); 196 assertFalse( DefaultMirrorSelector.matchesLayout( "default", "!default,legacy" ) ); 197 198 assertFalse( DefaultMirrorSelector.matchesLayout( "default", "*,!default" ) ); 199 assertFalse( DefaultMirrorSelector.matchesLayout( "default", "!default,*" ) ); 200 } 201 202 public void testMirrorLayoutConsideredForMatching() 203 { 204 ArtifactRepository repo = getRepo( "a" ); 205 206 Mirror mirrorA = newMirror( "a", "a", null, "http://a" ); 207 Mirror mirrorB = newMirror( "b", "a", "p2", "http://b" ); 208 209 Mirror mirrorC = newMirror( "c", "*", null, "http://c" ); 210 Mirror mirrorD = newMirror( "d", "*", "p2", "http://d" ); 211 212 assertSame( mirrorA, mirrorSelector.getMirror( repo, Arrays.asList( mirrorA ) ) ); 213 assertNull( mirrorSelector.getMirror( repo, Arrays.asList( mirrorB ) ) ); 214 215 assertSame( mirrorC, mirrorSelector.getMirror( repo, Arrays.asList( mirrorC ) ) ); 216 assertNull( mirrorSelector.getMirror( repo, Arrays.asList( mirrorD ) ) ); 217 } 218 219 /** 220 * Build an ArtifactRepository object. 221 * 222 * @param id 223 * @param url 224 * @return 225 */ 226 private ArtifactRepository getRepo( String id, String url ) 227 { 228 return repositorySystem.createArtifactRepository( id, url, new DefaultRepositoryLayout(), null, null ); 229 } 230 231 /** 232 * Build an ArtifactRepository object. 233 * 234 * @param id 235 * @return 236 */ 237 private ArtifactRepository getRepo( String id ) 238 { 239 return getRepo( id, "http://something" ); 240 } 241 242 private Mirror newMirror( String id, String mirrorOf, String url ) 243 { 244 return newMirror( id, mirrorOf, null, url ); 245 } 246 247 private Mirror newMirror( String id, String mirrorOf, String layouts, String url ) 248 { 249 Mirror mirror = new Mirror(); 250 251 mirror.setId( id ); 252 mirror.setMirrorOf( mirrorOf ); 253 mirror.setMirrorOfLayouts( layouts ); 254 mirror.setUrl( url ); 255 256 return mirror; 257 } 258 259}