| package org.eclipse.aether.util.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 static org.junit.Assert.*; |
| |
| import java.util.Arrays; |
| |
| import org.eclipse.aether.repository.RemoteRepository; |
| import org.eclipse.aether.util.repository.DefaultMirrorSelector.*; |
| import org.junit.Test; |
| |
| /** |
| */ |
| public class DefaultMirrorSelectorTest |
| { |
| |
| private RemoteRepository newRepo( String id, String type, String url ) |
| { |
| return new RemoteRepository.Builder( id, type, url ).build(); |
| } |
| |
| private static boolean matchesType( String repoType, String mirrorType ) |
| { |
| return new TypeMatcher( DefaultMirrorSelector.split( mirrorType ) ).isMatch( repoType ); |
| } |
| |
| private boolean matchesPattern( RemoteRepository repository, String pattern ) |
| { |
| return new IdMatcher( DefaultMirrorSelector.split( pattern ) ).isMatch( repository ); |
| } |
| |
| private static boolean isExternalRepo( RemoteRepository repository ) |
| { |
| return IdMatcher.isExternalRepo( repository ); |
| } |
| |
| @Test |
| public void testIsExternalRepo() |
| { |
| assertEquals( false, isExternalRepo( newRepo( "", "", "http://localhost/path" ) ) ); |
| assertEquals( false, isExternalRepo( newRepo( "", "", "http://127.0.0.1/path" ) ) ); |
| assertEquals( false, isExternalRepo( newRepo( "", "", "file:/path" ) ) ); |
| assertEquals( true, isExternalRepo( newRepo( "", "", "http://eclipse.org/" ) ) ); |
| assertEquals( true, isExternalRepo( newRepo( "", "", "" ) ) ); |
| } |
| |
| @Test |
| public void testMatchesType() |
| { |
| assertEquals( true, matchesType( null, null ) ); |
| assertEquals( true, matchesType( "any", null ) ); |
| assertEquals( true, matchesType( "any", "" ) ); |
| assertEquals( true, matchesType( "any", "*" ) ); |
| |
| assertEquals( false, matchesType( null, "default" ) ); |
| assertEquals( false, matchesType( "", "default" ) ); |
| assertEquals( false, matchesType( "any", "default" ) ); |
| |
| assertEquals( true, matchesType( "default", "default" ) ); |
| |
| assertEquals( false, matchesType( "default", "DEFAULT" ) ); |
| assertEquals( false, matchesType( "DEFAULT", "default" ) ); |
| |
| assertEquals( true, matchesType( "default", "default,foo" ) ); |
| assertEquals( true, matchesType( "default", "foo,default" ) ); |
| |
| assertEquals( true, matchesType( "default", "*,foo" ) ); |
| assertEquals( true, matchesType( "default", "foo,*" ) ); |
| |
| assertEquals( false, matchesType( "p2", "*,!p2" ) ); |
| assertEquals( false, matchesType( "p2", "!p2,*" ) ); |
| } |
| |
| @Test |
| public void testMatchesType_Trimming() |
| { |
| assertEquals( true, matchesType( "any", " " ) ); |
| assertEquals( true, matchesType( "default", " default " ) ); |
| assertEquals( true, matchesType( "default", "foo, default ,bar" ) ); |
| assertEquals( true, matchesType( "default", " default ,bar" ) ); |
| assertEquals( true, matchesType( "default", "foo, default " ) ); |
| } |
| |
| @Test |
| public void testMatchesPattern() |
| { |
| assertEquals( false, matchesPattern( newRepo( "id", "type", "url" ), null ) ); |
| assertEquals( false, matchesPattern( newRepo( "id", "type", "url" ), "" ) ); |
| assertEquals( false, matchesPattern( newRepo( "id", "type", "url" ), "central" ) ); |
| |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "central" ) ); |
| |
| assertEquals( false, matchesPattern( newRepo( "central", "type", "url" ), "CENTRAL" ) ); |
| assertEquals( false, matchesPattern( newRepo( "CENTRAL", "type", "url" ), "central" ) ); |
| |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "central,foo" ) ); |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "foo,central" ) ); |
| |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "*,foo" ) ); |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "foo,*" ) ); |
| |
| assertEquals( false, matchesPattern( newRepo( "central", "type", "url" ), "*,!central" ) ); |
| assertEquals( false, matchesPattern( newRepo( "central", "type", "url" ), "!central,*" ) ); |
| } |
| |
| @Test |
| public void testMatchesPattern_Trimming() |
| { |
| assertEquals( false, matchesPattern( newRepo( "central", "type", "url" ), " " ) ); |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), " central " ) ); |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "foo, central ,bar" ) ); |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), " central ,bar" ) ); |
| assertEquals( true, matchesPattern( newRepo( "central", "type", "url" ), "foo, central " ) ); |
| } |
| |
| @Test |
| public void testGetMirror_FirstMatchWins() |
| { |
| DefaultMirrorSelector selector = new DefaultMirrorSelector(); |
| selector.add( "mirror1", "http://host1", "default", false, "*", "*" ); |
| selector.add( "mirror2", "http://host2", "default", false, "*", "*" ); |
| RemoteRepository mirror = selector.getMirror( newRepo( "central", "default", "http://localhost" ) ); |
| assertNotNull( mirror ); |
| assertEquals( "mirror1", mirror.getId() ); |
| assertEquals( "http://host1", mirror.getUrl() ); |
| } |
| |
| @Test |
| public void testGetMirror_ExactMatchWins() |
| { |
| DefaultMirrorSelector selector = new DefaultMirrorSelector(); |
| selector.add( "mirror1", "http://host1", "default", false, "*", "*" ); |
| selector.add( "mirror2", "http://host2", "default", false, "central", "*" ); |
| selector.add( "mirror3", "http://host3", "default", false, "*", "*" ); |
| RemoteRepository mirror = selector.getMirror( newRepo( "central", "default", "http://localhost" ) ); |
| assertNotNull( mirror ); |
| assertEquals( "mirror2", mirror.getId() ); |
| assertEquals( "http://host2", mirror.getUrl() ); |
| } |
| |
| @Test |
| public void testGetMirror_WithoutMirrorLayout() |
| { |
| DefaultMirrorSelector selector = new DefaultMirrorSelector(); |
| selector.add( "mirror", "http://host", "", false, "*", "*" ); |
| RemoteRepository mirror = selector.getMirror( newRepo( "central", "default", "http://localhost" ) ); |
| assertNotNull( mirror ); |
| assertEquals( "mirror", mirror.getId() ); |
| assertEquals( "http://host", mirror.getUrl() ); |
| assertEquals( "default", mirror.getContentType() ); |
| } |
| |
| @Test |
| public void testGetMirror_WithMirrorLayout() |
| { |
| DefaultMirrorSelector selector = new DefaultMirrorSelector(); |
| selector.add( "mirror", "http://host", "layout", false, "*", "*" ); |
| RemoteRepository mirror = selector.getMirror( newRepo( "central", "default", "http://localhost" ) ); |
| assertNotNull( mirror ); |
| assertEquals( "mirror", mirror.getId() ); |
| assertEquals( "http://host", mirror.getUrl() ); |
| assertEquals( "layout", mirror.getContentType() ); |
| } |
| |
| @Test |
| public void testGetMirror_MirroredRepos() |
| { |
| DefaultMirrorSelector selector = new DefaultMirrorSelector(); |
| selector.add( "mirror", "http://host", "layout", false, "*", "*" ); |
| RemoteRepository repo = newRepo( "central", "default", "http://localhost" ); |
| RemoteRepository mirror = selector.getMirror( repo ); |
| assertNotNull( mirror ); |
| assertEquals( Arrays.asList( repo ), mirror.getMirroredRepositories() ); |
| } |
| |
| } |