/* * Copyright 2007 Alin Dreghiciu. * * Licensed 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. */ package org.ops4j.pax.url.mvn.internal.config; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import java.util.Properties; import org.apache.maven.settings.Profile; import org.apache.maven.settings.Repository; import org.apache.maven.settings.Settings; import org.apache.maven.settings.building.DefaultSettingsBuilder; import org.apache.maven.settings.building.DefaultSettingsBuilderFactory; import org.apache.maven.settings.building.DefaultSettingsBuildingRequest; import org.apache.maven.settings.building.SettingsBuildingException; import org.apache.maven.settings.building.SettingsBuildingRequest; import org.apache.maven.settings.building.SettingsBuildingResult; import org.apache.maven.settings.building.SettingsProblem; import org.junit.Assume; import org.junit.Test; import org.ops4j.io.FileUtils; import org.ops4j.util.property.PropertiesPropertyResolver; import org.ops4j.util.property.PropertyResolver; public class ConfigurationImplTest { private static final String PID = "org.ops4j.pax.url.mvn"; @Test( expected = IllegalArgumentException.class ) public void constructorWithNullResolver() { new MavenConfigurationImpl( null, PID ); } @Test public void getCertificateCheck() { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.certificateCheck" ) ).andReturn( "true" ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Certificate check", true, config.getCertificateCheck() ); verify( propertyResolver ); } @Test public void getDefaultCertificateCheck() { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.certificateCheck" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Certificate check", false, config.getCertificateCheck() ); verify( propertyResolver ); } @Test public void getSettingsAsURL() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( "file:somewhere/settings.xml" ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Settings", new URL( "file:somewhere/settings.xml" ), config.getSettingsFileUrl() ); verify( propertyResolver ); } @Test public void getSettingsAsFilePath() throws MalformedURLException, FileNotFoundException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); File validSettings = FileUtils.getFileFromClasspath( "configuration/settings.xml" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( validSettings.getAbsolutePath() ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Settings", validSettings.toURI().toURL(), config.getSettingsFileUrl() ); verify( propertyResolver ); } /** * Test that a malformed url will not trigger an exception ( will be skipped) * * @throws MalformedURLException not expected */ @Test public void getSettingsAsMalformedURL() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( "noprotocol:settings.xml" ); replay( propertyResolver ); new MavenConfigurationImpl( propertyResolver, PID ).getSettingsFileUrl(); } @Test public void getSettingsWithoutPropertySet() throws MalformedURLException { File settingsFile = new File( System.getProperty( "user.home" ) + "/.m2/settings.xml" ); Assume.assumeTrue( settingsFile.exists() ); PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ).atLeastOnce(); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); URL settings = config.getSettingsFileUrl(); assertNotNull( settings ); assertEquals( "Settings", settingsFile.toURI().toASCIIString(), settings.toExternalForm() ); verify( propertyResolver ); } @Test public void getGetLocalRepository() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( "file:/user/home/.m2/repository" ).atLeastOnce(); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); MavenRepositoryURL localRepo = config.getLocalRepository(); assertNotNull( localRepo ); verify( propertyResolver ); } @Test public void getRepositoriesWithOneRepository() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "file:repository1/@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertNotNull( "Repositories is null", repositories ); assertEquals( "Repositories size", 1, repositories.size() ); assertEquals( "Repository", new URL( "file:repository1/" ), repositories.get( 0 ).getURL() ); verify( propertyResolver ); } @Test public void getRepositoriesWithoutSlash() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "file:repository1@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertNotNull( "Repositories is null", repositories ); assertEquals( "Repositories size", 1, repositories.size() ); assertEquals( "Repository", new URL( "file:repository1/" ), repositories.get( 0 ).getURL() ); verify( propertyResolver ); } @Test public void getRepositoriesWithSlash() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "file:repository1/@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertNotNull( "Repositories is null", repositories ); assertEquals( "Repositories size", 1, repositories.size() ); assertEquals( "Repository", new URL( "file:repository1/" ), repositories.get( 0 ).getURL() ); verify( propertyResolver ); } @Test public void getRepositoriesWithBackSlash() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "file:repository1\\@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertNotNull( "Repositories is null", repositories ); assertEquals( "Repositories size", 1, repositories.size() ); assertEquals( "Repository", new URL( "file:repository1\\" ), repositories.get( 0 ).getURL() ); verify( propertyResolver ); } @Test public void getRepositoriesWithAtSnapshotsAndAtNoReleases() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "http:repository1@snapshots@noreleases@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertTrue( "Repository as snapshot enabled:", repositories.get( 0 ).isSnapshotsEnabled() ); assertFalse( "Repository as release enabled:", repositories.get( 0 ).isReleasesEnabled() ); verify( propertyResolver ); } @Test public void getRepositoriesWithAtSnapshots() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "http:repository1@snapshots@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertTrue( "Repository as snapshot enabled:", repositories.get( 0 ).isSnapshotsEnabled() ); assertTrue( "Repository as release enabled:", repositories.get( 0 ).isReleasesEnabled() ); verify( propertyResolver ); } @Test public void getRepositoriesWithAtNoReleases() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "http:repository1@noreleases@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertFalse( "Repository as snapshot not enabled:", repositories.get( 0 ).isSnapshotsEnabled() ); assertFalse( "Repository as release not enabled:", repositories.get( 0 ).isReleasesEnabled() ); verify( propertyResolver ); } @Test public void getRepositoriesWithMoreRepositories() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "file:repository1/@id=repository1,file:repository2/@id=repository2" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertNotNull( "Repositories is null", repositories ); assertEquals( "Repositories size", 2, repositories.size() ); assertEquals( "Repository 1", new URL( "file:repository1/" ), repositories.get( 0 ).getURL() ); assertEquals( "Repository 2", new URL( "file:repository2/" ), repositories.get( 1 ).getURL() ); verify( propertyResolver ); } @Test public void getRepositoriesFromSettings() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); Settings settings = settingsForRepository( "repository1", "file:repository1" ); replay( propertyResolver ); MavenConfigurationImpl config = new MavenConfigurationImpl( propertyResolver, PID ); config.setSettings( settings ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertNotNull( "Repositories is null", repositories ); assertEquals( "Repositories size", 1, repositories.size() ); assertEquals( "Repository", new URL( "file:repository1/" ), repositories.get( 0 ).getURL() ); verify( propertyResolver ); } private Settings settingsForRepository(String id, String url) { Settings settings = new Settings(); Profile profile = new Profile(); profile.setId( "test" ); Repository repo = new Repository(); repo.setId( id ); repo.setUrl( url ); profile.addRepository( repo ); settings.addProfile( profile ); settings.addActiveProfile( "test" ); return settings; } @Test public void getRepositoriesFromConfigAndSettings() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "+file:repository1/@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); Settings settings = settingsForRepository( "repository2", "file:repository2" ); replay( propertyResolver ); MavenConfigurationImpl config = new MavenConfigurationImpl( propertyResolver, PID ); config.setSettings( settings ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertNotNull( "Repositories is null", repositories ); assertEquals( "Repositories size", 2, repositories.size() ); assertEquals( "Repository 1", new URL( "file:repository1/" ), repositories.get( 0 ).getURL() ); assertEquals( "Repository 2", new URL( "file:repository2/" ), repositories.get( 1 ).getURL() ); verify( propertyResolver ); } @Test public void getRepositoriesWithLocalRepository() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( "file:repository1/@id=repository1" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( "file:localRepository/" ).atLeastOnce(); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertNotNull( "Repositories is null", repositories ); assertEquals( "Repositories size", 1, repositories.size() ); assertEquals( "Local repository", new URL( "file:localRepository/" ), config.getLocalRepository().getURL() ); assertEquals( "Repository", new URL( "file:repository1/" ), repositories.get( 0 ).getURL() ); verify( propertyResolver ); } @Test public void getLocalRepositoryAsURL() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( "file:somewhere/localrepository/" ).atLeastOnce(); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Local repository", new URL( "file:somewhere/localrepository/" ), config.getLocalRepository().getURL() ); verify( propertyResolver ); } @Test public void getLocalRepositoryAsURLWithoutSlash() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( "file:somewhere/localrepository" ).atLeastOnce(); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Local repository", new URL( "file:somewhere/localrepository/" ), config.getLocalRepository().getURL() ); verify( propertyResolver ); } @Test public void getLocalRepositoryAsURLWithBackSlash() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( "file:somewhere/localrepository\\" ).atLeastOnce(); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Local repository", new URL( "file:somewhere/localrepository\\" ), config.getLocalRepository().getURL() ); verify( propertyResolver ); } @Test public void getLocalRepositoryAsFilePath() throws MalformedURLException, FileNotFoundException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); File valid = FileUtils.getFileFromClasspath( "configuration/localrepository" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( valid.getAbsolutePath() ).atLeastOnce(); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Local repository", valid.toURI().toURL(), config.getLocalRepository().getURL() ); verify( propertyResolver ); } @Test public void getLocalRepositoryAsFilePathWithoutSlash() throws MalformedURLException, FileNotFoundException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); File valid = FileUtils.getFileFromClasspath( "configuration/localrepository" ); File validWithSlash = FileUtils.getFileFromClasspath( "configuration/localrepository/" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( valid.getAbsolutePath() ).atLeastOnce(); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Local repository", validWithSlash.toURI().toURL(), config.getLocalRepository().getURL() ); verify( propertyResolver ); } /** * Test that an url that is malformed will not trigger an exception. * * @throws MalformedURLException never */ @Test public void getLocalRepositoryAsMalformedURL() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( "noprotocol://localrepository" ).atLeastOnce(); replay( propertyResolver ); new MavenConfigurationImpl( propertyResolver, PID ).getLocalRepository(); } /** * Test that a path to a file that does not exist will not trigger an exception. * * @throws MalformedURLException never */ @Test public void getLocalRepositoryToAnInexistentDirectory() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( "c:/this/should/be/an/inexistent/directory" ).atLeastOnce(); replay( propertyResolver ); new MavenConfigurationImpl( propertyResolver, PID ).getLocalRepository(); } @Test public void getLocalRepositoryWithoutPropertySet() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ).atLeastOnce(); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); MavenRepositoryURL localRepo = config.getLocalRepository(); assertNotNull( localRepo ); assertEquals("Local repository", System.getProperty("user.home") + File.separator + ".m2" + File.separator + "repository", localRepo.getFile().toString()); verify( propertyResolver ); } private Settings buildSettings( String settingsPath ) { Settings settings = null; if( settingsPath == null ) { settings = new Settings(); } else { DefaultSettingsBuilderFactory factory = new DefaultSettingsBuilderFactory(); DefaultSettingsBuilder builder = factory.newInstance(); SettingsBuildingRequest request = new DefaultSettingsBuildingRequest(); request.setUserSettingsFile( new File( settingsPath ) ); try { SettingsBuildingResult result = builder.build( request ); assertThat( result, is( notNullValue() ) ); for ( SettingsProblem sp : result.getProblems() ) { if ( sp.getSeverity() != SettingsProblem.Severity.WARNING ) { fail( "There should be no serious problems in settings.xml" ); } } settings = result.getEffectiveSettings(); } catch( SettingsBuildingException exc ) { throw new AssertionError( "cannot build settings", exc ); } } return settings; } @Test public void getLocalRepositoryFromSettings() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ).atLeastOnce(); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); Settings settings = buildSettings("src/test/resources/settings/settingsWithLocalRepository.xml"); replay( propertyResolver ); MavenConfigurationImpl config = new MavenConfigurationImpl( propertyResolver, PID ); config.setSettings( settings ); assertEquals( "Local repository", new URL( "file:" + new File("repository").getAbsolutePath() + "/" ), config.getLocalRepository().getURL() ); verify( propertyResolver ); } @Test public void getRepositoriesFromActiveProfilesInSettings() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ).atLeastOnce(); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( "false" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( null ).anyTimes(); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ).anyTimes(); Settings settings = buildSettings("src/test/resources/settings/settingsWithRepositories.xml"); replay( propertyResolver ); MavenConfigurationImpl config = new MavenConfigurationImpl( propertyResolver, PID ); config.setSettings( settings ); assertThat(config.getRepositories().size(), equalTo(6)); verify( propertyResolver ); } @Test public void getRepositoriesFromProfilesActiveByDefaultInSettings() throws MalformedURLException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ).atLeastOnce(); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( "false" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( null ).anyTimes(); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ).anyTimes(); Settings settings = buildSettings("src/test/resources/settings/settingsWithActiveProfiles.xml"); replay( propertyResolver ); MavenConfigurationImpl config = new MavenConfigurationImpl( propertyResolver, PID ); config.setSettings( settings ); assertThat(config.getRepositories().size(), equalTo(3)); assertThat(config.getRepositories().get(0).getId(), equalTo("repository1")); assertThat(config.getRepositories().get(1).getId(), equalTo("repository2")); assertThat(config.getRepositories().get(2).getId(), equalTo("repository4")); verify( propertyResolver ); } @Test public void useFallbackRepositories() { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( "true" ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals( "Use Fallback Repositories", true, config.useFallbackRepositories() ); verify( propertyResolver ); } @Test public void defaultUseFallbackRepositories() { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( null ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); assertEquals("Use Fallback Repositories", true, config.useFallbackRepositories()); verify( propertyResolver ); } @Test public void getRepossitoryPoliciesFromSettings() throws MalformedURLException, FileNotFoundException { PropertyResolver propertyResolver = createMock( PropertyResolver.class ); File validSettings = FileUtils.getFileFromClasspath( "settings-policies.xml" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.repositories" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.defaultLocalRepoAsRemote" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.localRepository" ) ).andReturn( null ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.useFallbackRepositories" ) ).andReturn( "false" ); expect( propertyResolver.get( "org.ops4j.pax.url.mvn.settings" ) ).andReturn( validSettings.getAbsolutePath() ); replay( propertyResolver ); MavenConfiguration config = new MavenConfigurationImpl( propertyResolver, PID ); List<MavenRepositoryURL> repositories = config.getRepositories(); assertEquals(1, repositories.size()); MavenRepositoryURL mavenRepositoryURL = repositories.get(0); assertEquals("always", mavenRepositoryURL.getReleasesUpdatePolicy()); assertEquals("never", mavenRepositoryURL.getSnapshotsUpdatePolicy()); assertEquals("fail", mavenRepositoryURL.getReleasesChecksumPolicy()); assertEquals("warn", mavenRepositoryURL.getSnapshotsChecksumPolicy()); verify( propertyResolver ); } @Test public void getRepositoryProperties() { Properties props = new Properties(); PropertyResolver propertyResolver = new PropertiesPropertyResolver(props); props.setProperty("org.ops4j.pax.url.mvn.i", "1"); props.setProperty("org.ops4j.pax.url.mvn.l", "1"); props.setProperty("org.ops4j.pax.url.mvn.s", "hello"); props.setProperty("org.ops4j.pax.url.mvn.x", "hello"); props.setProperty("org.ops4j.pax.url.mvn.b1", "true"); props.setProperty("org.ops4j.pax.url.mvn.b2", "false"); props.setProperty("org.ops4j.pax.url.mvn.b3", "0"); MavenConfiguration config = new MavenConfigurationImpl(propertyResolver, PID); assertThat(config.getProperty("i", 42, Integer.class), equalTo(1)); assertThat(config.getProperty("i2", 42, Integer.class), equalTo(42)); assertThat(config.getProperty("l", 42L, Long.class), equalTo(1L)); assertThat(config.getProperty("s", "unknown", String.class), equalTo("hello")); assertThat(config.getProperty("b1", false, Boolean.class), equalTo(true)); assertThat(config.getProperty("b2", true, Boolean.class), equalTo(false)); assertThat(config.getProperty("b3", true, Boolean.class), equalTo(false)); assertThat(config.getProperty("b4", true, Boolean.class), equalTo(true)); try { config.getProperty("x", null, InputStream.class); fail("Should not be able to convert"); } catch (IllegalArgumentException ignored) { } try { Integer i = config.getProperty("s", null, Integer.class); fail("Should throw ClassCastException, because \"s\" was already cached"); } catch (ClassCastException ignored) { } } }