/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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.guvnor.common.services.project.backend.server;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Collection;
import java.util.Set;
import javax.enterprise.inject.Instance;
import org.apache.maven.project.MavenProject;
import org.guvnor.common.services.project.model.GAV;
import org.guvnor.common.services.project.model.MavenRepositoryMetadata;
import org.guvnor.common.services.project.model.MavenRepositorySource;
import org.guvnor.common.services.project.model.Project;
import org.guvnor.common.services.project.preferences.GAVPreferences;
import org.guvnor.common.services.project.service.ProjectRepositoryResolver;
import org.guvnor.common.services.shared.preferences.WorkbenchPreferenceScopeResolutionStrategies;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.scanner.embedder.MavenProjectLoader;
import org.kie.scanner.embedder.MavenSettings;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.io.IOService;
import org.uberfire.java.nio.file.Path;
import static org.guvnor.common.services.project.backend.server.MavenLocalRepositoryUtils.*;
import static org.guvnor.common.services.project.backend.server.RepositoryResolverTestUtils.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
// *** NOTE ***
// The transient Maven Repository used by these tests is only cleared after all the tests have ran.
// Therefore each test should use a unique GAV to avoid potential conflicts between tests.
public class ProjectRepositoryResolverImplTest {
@Mock
private IOService ioService;
@Mock
private Instance<GAVPreferences> gavPreferencesProvider;
@Mock
private GAVPreferences gavPreferences;
@Mock
private WorkbenchPreferenceScopeResolutionStrategies scopeResolutionStrategies;
private ProjectRepositoryResolverImpl service;
private static java.nio.file.Path m2Folder = null;
private static java.nio.file.Path settingsXmlPath = null;
@BeforeClass
public static void setupSystemProperties() {
//These are not needed for the tests
System.setProperty( "org.uberfire.nio.git.daemon.enabled",
"false" );
System.setProperty( "org.uberfire.nio.git.ssh.enabled",
"false" );
System.setProperty( "org.uberfire.sys.repo.monitor.disabled",
"true" );
}
@BeforeClass
public static void setupMavenRepository() {
try {
m2Folder = Files.createTempDirectory( "temp-m2" );
settingsXmlPath = generateSettingsXml( m2Folder );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
}
}
@Before
public void setup() {
service = new ProjectRepositoryResolverImpl( ioService, gavPreferencesProvider, scopeResolutionStrategies );
doReturn( gavPreferences ).when( gavPreferencesProvider ).get();
}
@AfterClass
public static void teardownMavenRepository() {
tearDownMavenRepository( m2Folder );
MavenSettings.reinitSettings();
}
@Test
public void testGetRemoteRepositoriesMetaData_WithoutExplicitProjectRepository() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path pomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.1</version>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( pomXmlPath );
when( pomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final Set<MavenRepositoryMetadata> metadata = service.getRemoteRepositoriesMetaData( project );
assertNotNull( metadata );
assertEquals( 6,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
assertContainsRepository( "jboss-developer-repository-group",
"https://repository.jboss.org/nexus/content/groups/developer/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"http://repository.jboss.org/nexus/content/groups/public/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-origin-repository-group",
"https://origin-repository.jboss.org/nexus/content/groups/ea/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"https://repository.jboss.org/nexus/content/repositories/snapshots/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "central",
"https://repo.maven.apache.org/maven2",
MavenRepositorySource.PROJECT,
metadata );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRemoteRepositoriesMetaData_WithExplicitProjectRepository() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path pomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.2</version>\n" +
" <repositories>\n" +
" <repository>\n" +
" <id>explicit-repo</id>\n" +
" <name>Explicit Repository</name>\n" +
" <url>http://localhost/maven2/</url>\n" +
" </repository>\n" +
" </repositories>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( pomXmlPath );
when( pomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final Set<MavenRepositoryMetadata> metadata = service.getRemoteRepositoriesMetaData( project );
assertNotNull( metadata );
assertEquals( 7,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
assertContainsRepository( "jboss-developer-repository-group",
"https://repository.jboss.org/nexus/content/groups/developer/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"http://repository.jboss.org/nexus/content/groups/public/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-origin-repository-group",
"https://origin-repository.jboss.org/nexus/content/groups/ea/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"https://repository.jboss.org/nexus/content/repositories/snapshots/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "central",
"https://repo.maven.apache.org/maven2",
MavenRepositorySource.PROJECT,
metadata );
assertContainsRepository( "explicit-repo",
"http://localhost/maven2/",
MavenRepositorySource.PROJECT,
metadata );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRemoteRepositoriesMetaData_WithDistributionManagementRepository() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path pomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.3</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>http://distribution-host/maven2/</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( pomXmlPath );
when( pomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final Set<MavenRepositoryMetadata> metadata = service.getRemoteRepositoriesMetaData( project );
assertNotNull( metadata );
assertEquals( 7,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
assertContainsRepository( "jboss-developer-repository-group",
"https://repository.jboss.org/nexus/content/groups/developer/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"http://repository.jboss.org/nexus/content/groups/public/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-origin-repository-group",
"https://origin-repository.jboss.org/nexus/content/groups/ea/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"https://repository.jboss.org/nexus/content/repositories/snapshots/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "central",
"https://repo.maven.apache.org/maven2",
MavenRepositorySource.PROJECT,
metadata );
assertContainsRepository( "distribution-repo",
"http://distribution-host/maven2/",
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRemoteRepositoriesMetaData_WithDistributionManagementSnapshotRepository_NonSnapshotVersion() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path pomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.4</version>\n" +
" <distributionManagement>\n" +
" <snapshotRepository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>http://distribution-host/maven2/</url>\n" +
" </snapshotRepository>\n" +
" </distributionManagement>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( pomXmlPath );
when( pomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final Set<MavenRepositoryMetadata> metadata = service.getRemoteRepositoriesMetaData( project );
assertNotNull( metadata );
assertEquals( 6,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
assertContainsRepository( "jboss-developer-repository-group",
"https://repository.jboss.org/nexus/content/groups/developer/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"http://repository.jboss.org/nexus/content/groups/public/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-origin-repository-group",
"https://origin-repository.jboss.org/nexus/content/groups/ea/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"https://repository.jboss.org/nexus/content/repositories/snapshots/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "central",
"https://repo.maven.apache.org/maven2",
MavenRepositorySource.PROJECT,
metadata );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRemoteRepositoriesMetaData_WithDistributionManagementSnapshotRepository_SnapshotVersion() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path pomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.1-SNAPSHOT</version>\n" +
" <distributionManagement>\n" +
" <snapshotRepository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>http://distribution-host/maven2/</url>\n" +
" </snapshotRepository>\n" +
" </distributionManagement>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( pomXmlPath );
when( pomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final Set<MavenRepositoryMetadata> metadata = service.getRemoteRepositoriesMetaData( project );
assertNotNull( metadata );
assertEquals( 7,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
assertContainsRepository( "jboss-developer-repository-group",
"https://repository.jboss.org/nexus/content/groups/developer/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"http://repository.jboss.org/nexus/content/groups/public/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-origin-repository-group",
"https://origin-repository.jboss.org/nexus/content/groups/ea/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "jboss-public-repository-group",
"https://repository.jboss.org/nexus/content/repositories/snapshots/",
MavenRepositorySource.SETTINGS,
metadata );
assertContainsRepository( "central",
"https://repo.maven.apache.org/maven2",
MavenRepositorySource.PROJECT,
metadata );
assertContainsRepository( "distribution-repo",
"http://distribution-host/maven2/",
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_NewGAV_NotInstalledNotDeployed() {
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.5" );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav );
assertNotNull( metadata );
assertEquals( 0,
metadata.size() );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_NewGAV_IsInstalledNotDeployed() {
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.6</version>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.6" );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_NewGAV_IsInstalledIsDeployed() {
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.7</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.7" );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_NewGAV_NotInstalledIsDeployed() {
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.8</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.8" );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav );
assertNotNull( metadata );
assertEquals( 0,
metadata.size() );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_NewGAV_IsInstalledIsDeployed_Filtered() {
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.9</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.9" );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav,
new MavenRepositoryMetadata( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL ) );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ExplicitGAV_NotInstalledNotDeployed() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path pomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.10</version>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.10" );
when( project.getPomXMLPath() ).thenReturn( pomXmlPath );
when( pomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav,
project );
assertNotNull( metadata );
assertEquals( 0,
metadata.size() );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ExplicitGAV_IsInstalledNotDeployed() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.11</version>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.11" );
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav,
project );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ExplicitGAV_IsInstalledIsDeployed() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.12</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.12" );
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav,
project );
assertNotNull( metadata );
assertEquals( 2,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
assertContainsRepository( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ExplicitGAV_NotInstalledIsDeployed() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.13</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.13" );
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav,
project );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata );
final Set<MavenRepositoryMetadata> metadata2 = service.getRepositoriesResolvingArtifact( gav,
project );
assertNotNull( metadata2 );
assertEquals( 1,
metadata2.size() );
assertContainsRepository( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata2 );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ExplicitGAV_IsInstalledIsDeployed_Filtered() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.14</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.14" );
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav,
project,
new MavenRepositoryMetadata( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT ) );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ImplicitGAV_NotInstalledNotDeployed() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path pomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.15</version>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( pomXmlPath );
when( pomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( pomXml );
assertNotNull( metadata );
assertEquals( 0,
metadata.size() );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ImplicitGAV_IsInstalledNotDeployed() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.16</version>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( pomXml );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ImplicitGAV_IsInstalledIsDeployed() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.17</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( pomXml );
assertNotNull( metadata );
assertEquals( 2,
metadata.size() );
assertContainsRepository( "local",
m2Folder.toString(),
MavenRepositorySource.LOCAL,
metadata );
assertContainsRepository( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ImplicitGAV_NotInstalledIsDeployed() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.18</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( pomXml );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata );
final Set<MavenRepositoryMetadata> metadata2 = service.getRepositoriesResolvingArtifact( pomXml );
assertNotNull( metadata2 );
assertEquals( 1,
metadata2.size() );
assertContainsRepository( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata2 );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_ImplicitGAV_IsInstalledIsDeployed_Filtered() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
java.nio.file.Path remoteRepositoryFolder = null;
try {
remoteRepositoryFolder = Files.createTempDirectory( "distribution-repo" );
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.19</version>\n" +
" <distributionManagement>\n" +
" <repository>\n" +
" <id>distribution-repo</id>\n" +
" <name>Distribution Repository</name>\n" +
" <url>file://" + remoteRepositoryFolder.toString() + "</url>\n" +
" </repository>\n" +
" </distributionManagement>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
deployArtifact( mavenProject,
pomXml );
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( pomXml,
new MavenRepositoryMetadata( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT ) );
assertNotNull( metadata );
assertEquals( 1,
metadata.size() );
assertContainsRepository( "distribution-repo",
"file://" + remoteRepositoryFolder.toString(),
MavenRepositorySource.DISTRIBUTION_MANAGEMENT,
metadata );
} catch ( IOException ioe ) {
fail( ioe.getMessage() );
} finally {
tearDownMavenRepository( remoteRepositoryFolder );
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_Disabled1() {
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.20</version>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.20" );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
doReturn( true ).when( gavPreferences ).isConflictingGAVCheckDisabled();
//Re-instantiate service to pick-up System Property
service = new ProjectRepositoryResolverImpl( ioService, gavPreferencesProvider, scopeResolutionStrategies );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
//Without being disabled this would return one resolved (LOCAL) Repository
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav );
assertNotNull( metadata );
assertEquals( 0,
metadata.size() );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_Disabled2() {
final Project project = mock( Project.class );
doReturn( "default://master@a/a%20b" ).when( project ).getIdentifier();
doCallRealMethod().when( project ).getEncodedIdentifier();
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.21</version>\n" +
"</project>";
final GAV gav = new GAV( "org.guvnor",
"test",
"0.0.21" );
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
doReturn( true ).when( gavPreferences ).isConflictingGAVCheckDisabled();
//Re-instantiate service to pick-up System Property
service = new ProjectRepositoryResolverImpl( ioService, gavPreferencesProvider, scopeResolutionStrategies );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
//Without being disabled this would return one resolved (LOCAL) Repository
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( gav,
project );
assertNotNull( metadata );
assertEquals( 0,
metadata.size() );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
@Test
public void testGetRepositoriesResolvingArtifact_Disabled3() {
final Project project = mock( Project.class );
final org.uberfire.backend.vfs.Path vfsPomXmlPath = mock( org.uberfire.backend.vfs.Path.class );
final String oldSettingsXmlPath = System.getProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY );
try {
final String pomXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<project xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\" xmlns=\"http://maven.apache.org/POM/4.0.0\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <groupId>org.guvnor</groupId>\n" +
" <artifactId>test</artifactId>\n" +
" <version>0.0.22</version>\n" +
"</project>";
when( project.getPomXMLPath() ).thenReturn( vfsPomXmlPath );
when( vfsPomXmlPath.toURI() ).thenReturn( "default://p0/pom.xml" );
when( ioService.readAllString( any( Path.class ) ) ).thenReturn( pomXml );
System.setProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
settingsXmlPath.toString() );
doReturn( true ).when( gavPreferences ).isConflictingGAVCheckDisabled();
//Re-instantiate service to pick-up System Property
service = new ProjectRepositoryResolverImpl( ioService, gavPreferencesProvider, scopeResolutionStrategies );
final InputStream pomStream = new ByteArrayInputStream( pomXml.getBytes( StandardCharsets.UTF_8 ) );
final MavenProject mavenProject = MavenProjectLoader.parseMavenPom( pomStream );
installArtifact( mavenProject,
pomXml );
//Without being disabled this would return one resolved (LOCAL) Repository
final Set<MavenRepositoryMetadata> metadata = service.getRepositoriesResolvingArtifact( pomXml );
assertNotNull( metadata );
assertEquals( 0,
metadata.size() );
} finally {
resetSystemProperty( MavenSettings.CUSTOM_SETTINGS_PROPERTY,
oldSettingsXmlPath );
}
}
private void assertContainsRepository( final String id,
final String url,
final MavenRepositorySource source,
final Collection<MavenRepositoryMetadata> metadata ) {
for ( MavenRepositoryMetadata md : metadata ) {
if ( md.getId().equals( id ) && md.getUrl().equals( url ) && md.getSource().equals( source ) ) {
return;
}
}
fail( "Repository Id '" + id + "' not found." );
}
private void resetSystemProperty( final String systemPropertyName,
final String oldSystemPropertyValue ) {
if ( oldSystemPropertyValue != null ) {
System.setProperty( systemPropertyName,
oldSystemPropertyValue );
} else {
System.clearProperty( systemPropertyName );
}
}
}