Skip to content

Commit

Permalink
Fixing an issue with distribution management repositories losing auth…
Browse files Browse the repository at this point in the history
…entication settings.

- Added testcase
  • Loading branch information
stefan-riesen authored and talios committed Dec 11, 2023
1 parent e5bedd5 commit 804efcf
Showing 1 changed file with 89 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ package io.repaint.maven.tiles

import org.apache.maven.MavenExecutionException
import org.apache.maven.artifact.Artifact
import org.apache.maven.artifact.repository.ArtifactRepository
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy
import org.apache.maven.artifact.repository.Authentication
import org.apache.maven.artifact.repository.MavenArtifactRepository
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout2
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout
import org.apache.maven.artifact.resolver.ArtifactResolutionException
import org.apache.maven.artifact.resolver.ArtifactResolutionRequest
import org.apache.maven.artifact.resolver.ArtifactResolutionResult
Expand All @@ -26,6 +32,8 @@ import org.apache.maven.execution.MavenExecutionRequest
import org.apache.maven.execution.MavenExecutionResult
import org.apache.maven.execution.MavenSession
import org.apache.maven.model.Build
import org.apache.maven.model.DeploymentRepository
import org.apache.maven.model.DistributionManagement
import org.apache.maven.model.Model
import org.apache.maven.model.Parent
import org.apache.maven.model.Plugin
Expand All @@ -50,6 +58,9 @@ import static groovy.test.GroovyAssert.shouldFail
import static io.repaint.maven.tiles.Constants.TILEPLUGIN_ARTIFACT
import static io.repaint.maven.tiles.Constants.TILEPLUGIN_GROUP
import static io.repaint.maven.tiles.GavUtil.artifactName
import static org.apache.maven.artifact.repository.ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN
import static org.apache.maven.artifact.repository.ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS
import static org.apache.maven.artifact.repository.ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY
import static org.junit.Assert.assertEquals
import static org.mockito.Mockito.mock
import static org.mockito.Mockito.when
Expand Down Expand Up @@ -100,15 +111,15 @@ public class TilesMavenLifecycleParticipantTest {
}

void stuffParticipant() {
participant.logger = logger
participant.mavenSession = mockMavenSession
participant.repository = [
this.participant.logger = logger
this.participant.mavenSession = mockMavenSession
this.participant.repository = [
resolve: { ArtifactResolutionRequest req ->
new ArtifactResolutionResult()
}
] as RepositorySystem
participant.resolutionErrorHandler = new DefaultResolutionErrorHandler()
participant.versionRangeResolver = [
this.participant.resolutionErrorHandler = new DefaultResolutionErrorHandler()
this.participant.versionRangeResolver = [
resolveVersionRange: { session, request ->
return null
}
Expand All @@ -117,39 +128,39 @@ public class TilesMavenLifecycleParticipantTest {
}

public Artifact getTileTestCoordinates() {
return participant.getArtifactFromCoordinates("it.session.maven.tiles", "session-license-tile", "xml", "", "0.8-SNAPSHOT")
return this.participant.getArtifactFromCoordinates("it.session.maven.tiles", "session-license-tile", "xml", "", "0.8-SNAPSHOT")
}

@Test
public void ensureSnapshotFailsOnRelease() {
Artifact snapshot = getTileTestCoordinates()
System.setProperty(PERFORM_RELEASE, "true")
shouldFail(MavenExecutionException) {
participant.resolveTile(null, null, snapshot)
this.participant.resolveTile(null, null, snapshot)
}
}

@Test
public void ensureBadArtifactsFail() {
Artifact badbadbad = participant.getArtifactFromCoordinates("bad", "bad", "bad", "bad", "bad")
Artifact badbadbad = this.participant.getArtifactFromCoordinates("bad", "bad", "bad", "bad", "bad")

participant.repository = [
this.participant.repository = [
resolve: { ArtifactResolutionRequest request ->
new ArtifactResolutionResult().addErrorArtifactException(new ArtifactResolutionException("failed", badbadbad))
}
] as RepositorySystem

shouldFail(MavenExecutionException) {
participant.resolveTile(null, null, badbadbad)
this.participant.resolveTile(null, null, badbadbad)
}
participant.repository = [
this.participant.repository = [
resolve: { ArtifactResolutionRequest request ->
new ArtifactResolutionResult().addMissingArtifact(badbadbad)
}
] as RepositorySystem

shouldFail(MavenExecutionException) {
participant.resolveTile(null, null, badbadbad)
this.participant.resolveTile(null, null, badbadbad)
}
}

Expand Down Expand Up @@ -178,10 +189,10 @@ public class TilesMavenLifecycleParticipantTest {
addUnprocessedTile('test-merge-tile/kapt-javalin-tile.xml', 'kapt-javalin-tile')

// act
participant.loadAllDiscoveredTiles(session, project)
this.participant.loadAllDiscoveredTiles(session, project)


Model tileModel = participant.processedTiles['io.repaint.tiles:kapt-tile'].tileModel.model
Model tileModel = this.participant.processedTiles['io.repaint.tiles:kapt-tile'].tileModel.model
PluginExecution pluginExecution = tileModel.build.plugins[0].executions[0]
assert pluginExecution.id == 'kapt'

Expand Down Expand Up @@ -211,19 +222,19 @@ public class TilesMavenLifecycleParticipantTest {
}

def addUnprocessedTile(String testResourceName, String tileName) {
Artifact kaptTile = participant.turnPropertyIntoUnprocessedTile("io.repaint.tiles:$tileName:1.1", null)
Artifact kaptTile = this.participant.turnPropertyIntoUnprocessedTile("io.repaint.tiles:$tileName:1.1", null)
kaptTile.file = new File("src/test/resources/$testResourceName")
participant.unprocessedTiles.put(artifactName(kaptTile), kaptTile)
this.participant.unprocessedTiles.put(artifactName(kaptTile), kaptTile)
}

@Test
public void testFiltering() {
final def context = new DefaultBuildContext()

participant.mavenFileFilter = new DefaultMavenFileFilter(context)
participant.mavenResourcesFiltering = new DefaultMavenResourcesFiltering(participant.mavenFileFilter, context)
this.participant.mavenFileFilter = new DefaultMavenFileFilter(context)
this.participant.mavenResourcesFiltering = new DefaultMavenResourcesFiltering(this.participant.mavenFileFilter, context)

Artifact filteredTile = participant.getArtifactFromCoordinates("io.repaint.tiles", "filtering-tile", "xml", "", "1.1-SNAPSHOT")
Artifact filteredTile = this.participant.getArtifactFromCoordinates("io.repaint.tiles", "filtering-tile", "xml", "", "1.1-SNAPSHOT")

Model model = new Model()
model.setGroupId("io.repaint.tiles")
Expand All @@ -248,7 +259,7 @@ public class TilesMavenLifecycleParticipantTest {

MavenSession session = new MavenSession(null, req, mock(MavenExecutionResult.class), Arrays.asList(project))

Artifact tile = participant.resolveTile(session, project, filteredTile)
Artifact tile = this.participant.resolveTile(session, project, filteredTile)
assert tile.file == new File("target/filtering/generated-tiles/tiles/tile.xml")

TileModel tileModel = new TileModel(tile.file, tile)
Expand All @@ -258,7 +269,7 @@ public class TilesMavenLifecycleParticipantTest {

@Test
public void testNoFiltering() {
Artifact filteredTile = participant.getArtifactFromCoordinates("io.repaint.tiles", "filtering-tile", "xml", "", "1.1-SNAPSHOT")
Artifact filteredTile = this.participant.getArtifactFromCoordinates("io.repaint.tiles", "filtering-tile", "xml", "", "1.1-SNAPSHOT")

Model model = new Model()
model.setGroupId("io.repaint.tiles")
Expand All @@ -282,7 +293,7 @@ public class TilesMavenLifecycleParticipantTest {

MavenSession session = new MavenSession(null, req, mock(MavenExecutionResult.class), Arrays.asList(project))

Artifact tile = participant.resolveTile(session, project, filteredTile)
Artifact tile = this.participant.resolveTile(session, project, filteredTile)

assert tile.file == new File("src/test/resources/filtering/tile.xml")

Expand All @@ -293,7 +304,7 @@ public class TilesMavenLifecycleParticipantTest {

@Test
public void testGetArtifactFromCoordinates() {
Artifact artifact = participant.getArtifactFromCoordinates("dummy", "dummy", "xml", "classy", "1")
Artifact artifact = this.participant.getArtifactFromCoordinates("dummy", "dummy", "xml", "classy", "1")

assert artifact != null

Expand All @@ -308,15 +319,15 @@ public class TilesMavenLifecycleParticipantTest {

@Test
public void testGavFromString() {
Artifact dummy = participant.turnPropertyIntoUnprocessedTile("my:long:feet", null)
Artifact dummy = this.participant.turnPropertyIntoUnprocessedTile("my:long:feet", null)

assert dummy.version == 'feet'
assert dummy.artifactId == 'long'
assert dummy.groupId == 'my'
assert dummy.classifier == ''
assert dummy.type == 'xml'

Artifact dummy2 = participant.turnPropertyIntoUnprocessedTile("my:long:sore:smelly:feet", null)
Artifact dummy2 = this.participant.turnPropertyIntoUnprocessedTile("my:long:sore:smelly:feet", null)

assert dummy2.version == 'feet'
assert dummy2.artifactId == 'long'
Expand All @@ -326,46 +337,46 @@ public class TilesMavenLifecycleParticipantTest {

// too short
shouldFail(MavenExecutionException) {
participant.turnPropertyIntoUnprocessedTile("my:long", null)
this.participant.turnPropertyIntoUnprocessedTile("my:long", null)
}

// too long
shouldFail(MavenExecutionException) {
participant.turnPropertyIntoUnprocessedTile("my:long:feet:and:smelly:shoes", null)
this.participant.turnPropertyIntoUnprocessedTile("my:long:feet:and:smelly:shoes", null)
}
}

@Test
public void canLoadExtendedTiles() {
Artifact artifact = participant.turnPropertyIntoUnprocessedTile("io.repaint.tiles:extended-syntax:1.1", null)
Artifact artifact = this.participant.turnPropertyIntoUnprocessedTile("io.repaint.tiles:extended-syntax:1.1", null)
artifact.file = new File("src/test/resources/extended-syntax-tile.xml")
assert participant.loadModel(artifact)
assert this.participant.loadModel(artifact)
artifact.file = new File("src/test/resources/session-license-tile.xml")
assert participant.loadModel(artifact)
assert this.participant.loadModel(artifact)
artifact.file = new File("src/test/resources/bad-smelly-tile.xml")
assert participant.loadModel(artifact)
assert this.participant.loadModel(artifact)

shouldFail(MavenExecutionException) {
artifact.file = new File("src/test/resources/extended-syntax-tile1.xml")
participant.loadModel(artifact)
this.participant.loadModel(artifact)
}

shouldFail(MavenExecutionException) {
artifact.file = new File("src/test/resources/invalid-tile.xml")
participant.loadModel(artifact)
this.participant.loadModel(artifact)
}

shouldFail(MavenExecutionException) {
artifact.file = new File("src/test/resources/not-a-file-file.xml")
participant.loadModel(artifact)
this.participant.loadModel(artifact)
}
}

@Test
public void canUseModelResolver() {
File licensePom = new File('src/test/resources/session-license-pom.xml')

participant = new TilesMavenLifecycleParticipant() {
this.participant = new TilesMavenLifecycleParticipant() {
@Override
void resolveVersionRange(MavenProject project, Artifact tileArtifact) {
tileArtifact.file = licensePom
Expand All @@ -374,7 +385,7 @@ public class TilesMavenLifecycleParticipantTest {

stuffParticipant()

def resolver = participant.createModelResolver(null)
def resolver = this.participant.createModelResolver(null)
def model = resolver.resolveModel('my', 'left', 'foot')

assert model.inputStream.text == licensePom.text
Expand All @@ -397,13 +408,13 @@ public class TilesMavenLifecycleParticipantTest {
@Test
public void injectModelLayerTiles() {
TileModel sessionLicenseTile = new TileModel(new File('src/test/resources/session-license-tile.xml'),
participant.turnPropertyIntoUnprocessedTile('io.repaint.tiles:session-license:1', null))
this.participant.turnPropertyIntoUnprocessedTile('io.repaint.tiles:session-license:1', null))

TileModel extendedSyntaxTile = new TileModel(new File('src/test/resources/extended-syntax-tile.xml'),
participant.turnPropertyIntoUnprocessedTile('io.repaint.tiles:extended-syntax:1', null))
this.participant.turnPropertyIntoUnprocessedTile('io.repaint.tiles:extended-syntax:1', null))

TileModel antrunTile = new TileModel(new File('src/test/resources/antrun1-tile.xml'),
participant.turnPropertyIntoUnprocessedTile('io.repaint.tiles:antrun1:1', null))
this.participant.turnPropertyIntoUnprocessedTile('io.repaint.tiles:antrun1:1', null))

List<TileModel> tiles = [
sessionLicenseTile,
Expand All @@ -414,7 +425,7 @@ public class TilesMavenLifecycleParticipantTest {
File pomFile = new File('src/test/resources/empty-pom.xml')
Model pomModel = readModel(pomFile)

participant = new TilesMavenLifecycleParticipant() {
this.participant = new TilesMavenLifecycleParticipant() {
@Override
protected void putModelInCache(Model model, ModelBuildingRequest request, File pFile) {
}
Expand All @@ -424,7 +435,7 @@ public class TilesMavenLifecycleParticipantTest {
when(mockMavenSession.getUserProperties()).thenReturn(new Properties())
when(mockMavenSession.getSystemProperties()).thenReturn(new Properties())

participant.injectTilesIntoParentStructure(tiles, pomModel, [getPomFile: { return pomFile }] as ModelBuildingRequest)
this.participant.injectTilesIntoParentStructure(tiles, pomModel, [getPomFile: { return pomFile }] as ModelBuildingRequest)

assert pomModel.parent.artifactId == 'session-license'
assert sessionLicenseTile.model.parent.artifactId == 'extended-syntax'
Expand All @@ -433,13 +444,13 @@ public class TilesMavenLifecycleParticipantTest {

pomModel.parent = new Parent(groupId: 'io.repaint.tiles', artifactId: 'fake-parent', version: '1')

participant.injectTilesIntoParentStructure(tiles, pomModel, [getPomFile: { return pomFile }] as ModelBuildingRequest)
this.participant.injectTilesIntoParentStructure(tiles, pomModel, [getPomFile: { return pomFile }] as ModelBuildingRequest)
assert antrunTile.model.parent.artifactId == 'fake-parent'
}

@Test
public void testNoTiles() throws MavenExecutionException {
participant = new TilesMavenLifecycleParticipant() {
this.participant = new TilesMavenLifecycleParticipant() {
@Override
protected TileModel loadModel(Artifact artifact) throws MavenExecutionException {
return new TileModel(model:new Model())
Expand All @@ -448,21 +459,21 @@ public class TilesMavenLifecycleParticipantTest {

stuffParticipant()

participant.orchestrateMerge(null, new MavenProject())
this.participant.orchestrateMerge(null, new MavenProject())
}

@Test
public void testBadGav() {
Model model = createBasicModel()
addTileAndPlugin(model, "groupid:artifactid")

participant = new TilesMavenLifecycleParticipant()
this.participant = new TilesMavenLifecycleParticipant()
stuffParticipant()

MavenProject project = new MavenProject(model)

Throwable failure = shouldFail {
participant.orchestrateMerge(null, project)
this.participant.orchestrateMerge(null, project)
}

assert failure.message == "groupid:artifactid does not have the form group:artifact:version-range or group:artifact:extension:classifier:version-range"
Expand All @@ -481,7 +492,7 @@ public class TilesMavenLifecycleParticipantTest {
}

protected resetParticipantToLoadTilesFromDisk() {
participant = new TilesMavenLifecycleParticipant() {
this.participant = new TilesMavenLifecycleParticipant() {
@Override
protected void thunkModelBuilder(MavenProject project1) {
}
Expand Down Expand Up @@ -511,9 +522,9 @@ public class TilesMavenLifecycleParticipantTest {

resetParticipantToLoadTilesFromDisk()

participant.orchestrateMerge(null, project)
this.participant.orchestrateMerge(null, project)

assert participant.processedTiles.size() == 4
assert this.participant.processedTiles.size() == 4
}

@Test
Expand All @@ -522,8 +533,35 @@ public class TilesMavenLifecycleParticipantTest {

resetParticipantToLoadTilesFromDisk()

participant.orchestrateMerge(null, project)
assert participant.processedTiles.size() == 4
this.participant.orchestrateMerge(null, project)
assert this.participant.processedTiles.size() == 4
}

@Test
public void testAuthenticationSettingsArePresent() {
Model model = createBasicModel()
MavenProject project = new MavenProject(model)

def repository = new MavenArtifactRepository("central", "uri://nowhere/", new DefaultRepositoryLayout(), new ArtifactRepositoryPolicy(true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN), new ArtifactRepositoryPolicy(true, ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN))
repository.setAuthentication(new Authentication("username", "secret"))
project.setRemoteArtifactRepositories([
repository
])

project.model.distributionManagement = new DistributionManagement()

project.model.distributionManagement.repository = new DeploymentRepository()
project.model.distributionManagement.repository.setId("central");

project.model.distributionManagement.snapshotRepository = new DeploymentRepository()
project.model.distributionManagement.snapshotRepository.setId("central");


def participant = new TilesMavenLifecycleParticipant()
participant.discoverAndSetDistributionManagementArtifactoryRepositoriesIfTheyExist(project);

assert project.releaseArtifactRepository.authentication!=null;
assert project.snapshotArtifactRepository.authentication!=null;
}

protected static Model createBasicModel() {
Expand Down

0 comments on commit 804efcf

Please sign in to comment.