package org.jfrog.build.api.builder; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import org.jfrog.build.api.*; import org.jfrog.build.api.release.PromotionStatus; import org.testng.annotations.Test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Properties; import static org.jfrog.build.api.BuildType.GRADLE; import static org.testng.Assert.*; /** * Author: Shay Yaakov * Date: 8/25/12 * Time: 10:55 PM */ @Test public class BuildInfoMavenBuilderTest { public static final String SHA1 = "e4e264c711ae7ab54f26542f0dd09a43b93fa12c"; public static final String MD5 = "d9303a42c66c2824fd6ba0f75e335294"; /** * Validates the build values when using the defaults */ public void testDefaultBuild() { Build build = new BuildInfoBuilder("test").number("4").started("test").build(); assertEquals(build.getVersion(), "1.0.1", "Unexpected default build version."); assertEquals(build.getNumber(), "4", "Unexpected default build number."); assertNull(build.getType(), "Default build type should be null."); assertNull(build.getAgent(), "Default build agent should be null."); assertEquals(build.getDurationMillis(), 0, "Default build duration millis should be zero."); assertNull(build.getPrincipal(), "Default build principal should be null."); assertNull(build.getArtifactoryPrincipal(), "Default build artifactory principal should be null."); assertNull(build.getArtifactoryPluginVersion(), "Default build ArtifactoryPluginVersion should be null."); assertNull(build.getUrl(), "Default build URL should be null."); assertNull(build.getParentName(), "Default build parent build name should be null."); assertNull(build.getParentNumber(), "Default build parent build number should be null."); assertNull(build.getModules(), "Default build modules should be null."); assertNull(build.getProperties(), "Default properties should be null."); assertNull(build.getVcsRevision(), "Default vcs revision should be null."); } /** * Validates the build values after using the builder setters */ public void testBuilderSetters() { String version = "1.2.0"; String name = "moo"; String number = "15"; BuildType buildType = GRADLE; Agent agent = new Agent("pop", "1.6"); BuildAgent buildAgent = new BuildAgent("rock", "2.6"); long durationMillis = 6L; String principal = "bob"; String artifactoryPrincipal = "too"; String artifactoryPluginVersion = "2.3.1"; String url = "mitz"; String parentName = "pooh"; String parentNumber = "5"; List<Module> modules = Lists.newArrayList(); Properties properties = new Properties(); Build build = new BuildInfoBuilder(name).started("test").version(version).number(number).type(buildType) .agent(agent).durationMillis(durationMillis).principal(principal) .artifactoryPrincipal(artifactoryPrincipal).url(url).parentName(parentName).parentNumber(parentNumber) .modules(modules).properties(properties).buildAgent(buildAgent) .artifactoryPluginVersion(artifactoryPluginVersion).build(); assertEquals(build.getVersion(), version, "Unexpected build version."); assertEquals(build.getName(), name, "Unexpected build name."); assertEquals(build.getNumber(), number, "Unexpected build number."); assertEquals(build.getType(), buildType, "Unexpected build type."); assertEquals(build.getAgent(), agent, "Unexpected build agent."); assertEquals(build.getBuildAgent(), buildAgent, "Unexpected build agent."); assertEquals(build.getDurationMillis(), durationMillis, "Unexpected build duration millis."); assertEquals(build.getPrincipal(), principal, "Unexpected build principal."); assertEquals(build.getArtifactoryPrincipal(), artifactoryPrincipal, "Unexpected build artifactory principal."); assertEquals(build.getArtifactoryPluginVersion(), artifactoryPluginVersion, "Unexpected build artifactory Plugin Version."); assertEquals(build.getUrl(), url, "Unexpected build URL."); assertEquals(build.getParentName(), parentName, "Unexpected build parent name."); assertEquals(build.getParentNumber(), parentNumber, "Unexpected build parent build number."); assertEquals(build.getModules(), modules, "Unexpected build modules."); assertTrue(build.getModules().isEmpty(), "Build modules list should not have been populated."); assertEquals(build.getProperties(), properties, "Unexpected build properties."); assertTrue(build.getProperties().isEmpty(), "Build properties list should not have been populated."); } /** * Validates the build start time values after using the builder setters */ public void testStartedSetters() throws ParseException { String started = "192-1212-1"; Build build = new BuildInfoBuilder("test").number("4").started(started).build(); assertEquals(build.getStarted(), started, "Unexpected build started."); Date startedDate = new Date(); build = new BuildInfoBuilder("test").number("4").startedDate(startedDate).build(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(Build.STARTED_FORMAT); assertEquals(build.getStarted(), simpleDateFormat.format(startedDate), "Unexpected build started."); } /** * Validates the build values after using the builder add methods */ public void testBuilderAddMethod() { Module module = new Module(); module.setId("module-id"); String propertyKey = "key"; String propertyValue = "value"; PromotionStatus promotionStatus = new PromotionStatusBuilder("momo").timestampDate(new Date()).build(); Build build = new BuildInfoBuilder("test").number("4").started("test").addModule(module) .addProperty(propertyKey, propertyValue).addStatus(promotionStatus).build(); List<Module> modules = build.getModules(); assertFalse(modules.isEmpty(), "A build module should have been added."); assertEquals(modules.get(0), module, "Unexpected build module."); assertTrue(build.getProperties().containsKey(propertyKey), "A build property should have been added."); assertEquals(build.getProperties().get(propertyKey), propertyValue, "Unexpected build property value."); List<PromotionStatus> statuses = build.getStatuses(); assertFalse(statuses.isEmpty(), "Expected a status to be added."); assertEquals(statuses.get(0), promotionStatus, "Unexpected added status."); } /** * Validates adding duplicate modules, the builder should container only unique ones */ public void testDuplicateModules() { Module module1 = new ModuleBuilder().id("id").build(); Module module2 = new ModuleBuilder().id("id").build(); BuildInfoMavenBuilder builder = new BuildInfoMavenBuilder("test").number("4").started("test"); builder.addModule(module1); builder.addModule(module2); Build build = builder.build(); List<Module> modules = build.getModules(); assertFalse(modules.isEmpty(), "A build module should have been added."); assertEquals(modules.size(), 1, "Expected to find only 1 module."); assertEquals(modules.get(0).getId(), "id", "Expected to find module with id = 'id'."); } /** * Validates adding same artifacts to different modules */ public void testDuplicateModuleArtifacts() { ModuleBuilder module1 = new ModuleBuilder().id("id"); module1.addArtifact(new ArtifactBuilder("artifact1").md5(MD5).sha1(SHA1).build()); module1.addArtifact(new ArtifactBuilder("artifact2").md5(MD5).sha1(SHA1).build()); ModuleBuilder module2 = new ModuleBuilder().id("id"); module2.addArtifact(new ArtifactBuilder("artifact1").md5(MD5).sha1(SHA1).build()); module2.addArtifact(new ArtifactBuilder("artifact2").md5(MD5).sha1(SHA1).build()); BuildInfoMavenBuilder builder = new BuildInfoMavenBuilder("test").number("4").started("test"); builder.addModule(module1.build()); builder.addModule(module2.build()); Build build = builder.build(); List<Module> modules = build.getModules(); assertFalse(modules.isEmpty(), "A build module should have been added."); assertEquals(modules.size(), 1, "Expected to find only 1 module."); assertEquals(modules.get(0).getId(), "id", "Expected to find module with id = 'id'."); List<Artifact> artifacts = modules.get(0).getArtifacts(); assertEquals(artifacts.size(), 2, "Expected to find only 2 artifacts."); assertEquals(artifacts.get(0).getName(), "artifact1", "Unexpected artifact name."); assertEquals(artifacts.get(0).getMd5(), MD5, "Unexpected MD5 checksum."); assertEquals(artifacts.get(0).getSha1(), SHA1, "Unexpected SHA-1 checksum."); assertEquals(artifacts.get(1).getName(), "artifact2", "Unexpected artifact name."); assertEquals(artifacts.get(1).getMd5(), MD5, "Unexpected MD5 checksum."); assertEquals(artifacts.get(1).getSha1(), SHA1, "Unexpected SHA-1 checksum."); } /** * Validates adding same dependencies with different scopes to different modules */ public void testDuplicateModuleDependencies() { ModuleBuilder module1 = new ModuleBuilder().id("id"); module1.addDependency(new DependencyBuilder().id("dep1").scopes(Sets.newHashSet("compile")).build()); module1.addDependency(new DependencyBuilder().id("dep2").scopes(Sets.newHashSet("compile")).build()); ModuleBuilder module2 = new ModuleBuilder().id("id"); module2.addDependency(new DependencyBuilder().id("dep1").scopes(Sets.newHashSet("compile", "test")).build()); module2.addDependency(new DependencyBuilder().id("dep2").scopes(Sets.newHashSet("compile", "test")).build()); BuildInfoMavenBuilder builder = new BuildInfoMavenBuilder("test").number("4").started("test"); builder.addModule(module1.build()); builder.addModule(module2.build()); Build build = builder.build(); List<Module> modules = build.getModules(); assertFalse(modules.isEmpty(), "A build module should have been added."); assertEquals(modules.size(), 1, "Expected to find only 1 module."); assertEquals(modules.get(0).getId(), "id", "Expected to find module with id = 'id'."); List<Dependency> dependencies = modules.get(0).getDependencies(); assertEquals(dependencies.size(), 2, "Expected to find only 2 dependencies."); assertTrue(dependencies.get(0).getScopes().contains("compile"), "Expected to find compile scope"); assertTrue(dependencies.get(0).getScopes().contains("test"), "Expected to find test scope"); assertTrue(dependencies.get(1).getScopes().contains("compile"), "Expected to find compile scope"); assertTrue(dependencies.get(1).getScopes().contains("test"), "Expected to find test scope"); } }