package org.wildfly.swarm.bootstrap.modules; import org.jboss.modules.maven.ArtifactCoordinates; import org.junit.Test; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; /** * Test {@link GradleResolver} * * @author Michael Fraefel */ public class GradleResolverTest { @Test public void downloadFromRemoteRepository() throws IOException { //GIVEN Path gradleCachePath = Files.createTempDirectory(".gradle"); String group = "org.wildfly.swarm"; String packaging = "jar"; String artifact = "bootstrap"; String version = "2017.1.1"; ArtifactCoordinates artifactCoordinates = new ArtifactCoordinates(group, artifact, version); Path artifactDirectory = gradleCachePath.resolve(group); GradleResolver resolver = spy(new GradleResolver(gradleCachePath.toString())); File targetFile = mock(File.class); doReturn(targetFile).when(resolver).doDownload(anyString(), anyString(), anyString(), eq(artifactCoordinates), eq(packaging), any(File.class), any(File.class)); //WHEN File result = resolver.downloadFromRemoteRepository(artifactCoordinates, packaging, artifactDirectory); //THEN assertEquals(targetFile, result); } @Test public void downloadFromRemoteRepository_unknown() throws IOException { //GIVEN Path gradleCachePath = Files.createTempDirectory(".gradle"); String group = "org.wildfly.swarm"; String packaging = "jar"; String artifact = "test"; String version = "2017.1.1"; ArtifactCoordinates artifactCoordinates = new ArtifactCoordinates(group, artifact, version); Path artifactDirectory = gradleCachePath.resolve(group); GradleResolver resolver = spy(new GradleResolver(gradleCachePath.toString())); doReturn(null).when(resolver).doDownload(anyString(), anyString(), anyString(), eq(artifactCoordinates), eq(packaging), any(File.class), any(File.class)); //WHEN File result = resolver.downloadFromRemoteRepository(artifactCoordinates, packaging, artifactDirectory); //THEN assertNull(result); } @Test public void testToGradleArtifactFileName(){ //GIVEN String group = "org.wildfly.swarm"; String packaging = "jar"; String artifact = "test"; String version = "1.0"; ArtifactCoordinates artifactCoordinates = new ArtifactCoordinates(group, artifact, version); //WHEN GradleResolver resolver = new GradleResolver(null); String artifactFileName = resolver.toGradleArtifactFileName(artifactCoordinates, packaging); //THEN assertEquals(artifact + "-" + version + "." + packaging, artifactFileName); } @Test public void testToGradleArtifactFileName_withClassifier(){ //GIVEN String group = "org.wildfly.swarm"; String packaging = "jar"; String artifact = "test"; String version = "1.0"; String classifier = "sources"; ArtifactCoordinates artifactCoordinates = new ArtifactCoordinates(group, artifact, version, classifier); //WHEN GradleResolver resolver = new GradleResolver(null); String artifactFileName = resolver.toGradleArtifactFileName(artifactCoordinates, packaging); //THEN assertEquals(artifact + "-" + version + "-"+ classifier + "." + packaging, artifactFileName); } @Test public void testResolveArtifact() throws IOException { //GIVEN Path gradleCachePath = Files.createTempDirectory("gradle"); String group = "org.wildfly.swarm"; String packaging = "jar"; String artifact = "test"; String version = "1.0"; String classifier = "sources"; ArtifactCoordinates artifactCoordinates = new ArtifactCoordinates(group, artifact, version, classifier); Path artifactDir = Files.createDirectories(gradleCachePath.resolve(group).resolve(artifact).resolve(version).resolve("hash")); File artifactFile = Files.createFile(artifactDir.resolve(artifact + "-" + version + "-" + classifier + "." + packaging)).toFile(); //WHEN GradleResolver resolver = new GradleResolver(gradleCachePath.toString()); File resolvedArtifactFile = resolver.resolveArtifact(artifactCoordinates, packaging); //THEN assertEquals(artifactFile, resolvedArtifactFile); } @Test public void testResolveArtifact_latest() throws IOException, InterruptedException { //GIVEN Path gradleCachePath = Files.createTempDirectory("gradle"); String group = "org.wildfly.swarm"; String packaging = "jar"; String artifact = "test"; String version = "1.0"; String classifier = "sources"; ArtifactCoordinates artifactCoordinates = new ArtifactCoordinates(group, artifact, version, classifier); Path artifactDir = Files.createDirectories(gradleCachePath.resolve(group).resolve(artifact).resolve(version).resolve("hash1")); File artifactFile = Files.createFile(artifactDir.resolve(artifact + "-" + version + "-" + classifier + "." + packaging)).toFile(); Thread.sleep(2000); //Timestemp resolution of some filesystems are 2 seconds Path artifactDirLatest = Files.createDirectories(gradleCachePath.resolve(group).resolve(artifact).resolve(version).resolve("hash2")); File artifactFileLatest = Files.createFile(artifactDirLatest.resolve(artifact + "-" + version + "-" + classifier + "." + packaging)).toFile(); //WHEN GradleResolver resolver = new GradleResolver(gradleCachePath.toString()); File resolvedArtifactFile = resolver.resolveArtifact(artifactCoordinates, packaging); //THEN assertEquals(artifactFileLatest, resolvedArtifactFile); } @Test public void testResolveArtifact_notExists() throws IOException { //GIVEN Path gradleCachePath = Files.createTempDirectory("gradle"); String group = "org.wildfly.swarm"; String packaging = "jar"; String artifact = "test"; String version = "1.0"; String classifier = "sources"; ArtifactCoordinates artifactCoordinates = new ArtifactCoordinates(group, artifact, version, classifier); Path artifactDir = Files.createDirectories(gradleCachePath.resolve(group).resolve(artifact).resolve(version).resolve("hash")); File artifactFile = Files.createFile(artifactDir.resolve(artifact + "-" + version + "-" + classifier + ".pom")).toFile(); // Other packaging type //WHEN GradleResolver resolver = new GradleResolver(gradleCachePath.toString()); File resolvedArtifactFile = resolver.resolveArtifact(artifactCoordinates, packaging); //THEN assertNull(resolvedArtifactFile); } }