private static ArtifactConfig createBuiltInArtifactConfig(ArtifactType artifactType, String src, String dest) { if (artifactType == ArtifactType.build) { return new BuildArtifactConfig(src, dest); } else if (artifactType == ArtifactType.test) { return new TestArtifactConfig(src, dest); } else { throw bomb("ArtifactType not specified"); } }
@Test public void getArtifactConfigs_shouldReturnBuiltinArtifactConfigs() { ArtifactConfigs allConfigs = new ArtifactConfigs(); allConfigs.add(new BuildArtifactConfig("src", "dest")); allConfigs.add(new BuildArtifactConfig("java", null)); allConfigs.add(new PluggableArtifactConfig("s3", "cd.go.s3")); allConfigs.add(new PluggableArtifactConfig("docker", "cd.go.docker")); final List<BuiltinArtifactConfig> artifactConfigs = allConfigs.getBuiltInArtifactConfigs(); assertThat(artifactConfigs, hasSize(2)); assertThat(artifactConfigs, containsInAnyOrder( new BuildArtifactConfig("src", "dest"), new BuildArtifactConfig("java", null) )); }
@Test public void shouldAddDuplicatedArtifactSoThatValidationKicksIn() throws Exception { final ArtifactConfigs artifactConfigs = new ArtifactConfigs(); assertThat(artifactConfigs.size(), is(0)); artifactConfigs.add(new BuildArtifactConfig("src", "dest")); artifactConfigs.add(new BuildArtifactConfig("src", "dest")); assertThat(artifactConfigs.size(), is(2)); }
@Test public void validate_shouldNotFailWhenComparingBuildAndTestArtifacts() { List<ArtifactConfig> plans = new ArrayList<>(); TestArtifactConfig testArtifactConfig = new TestArtifactConfig("src", "dest"); plans.add(testArtifactConfig); BuildArtifactConfig buildArtifactConfig = new BuildArtifactConfig("src", "dest"); buildArtifactConfig.validateUniqueness(plans); assertThat(buildArtifactConfig.errors().isEmpty(), is(true)); }
@Test public void shouldAllowOverridingDefaultArtifactDestination() { BuildArtifactConfig artifactConfig = new BuildArtifactConfig("src", "dest"); assertThat(artifactConfig.getDestination(), is("dest")); TestArtifactConfig testArtifactConfig = new TestArtifactConfig("src", "destination"); assertThat(testArtifactConfig.getDestination(), is("destination")); }
@Test public void shouldNotOverrideDefaultArtifactDestinationWhenNotSpecified() { BuildArtifactConfig artifactConfig = new BuildArtifactConfig("src", null); assertThat(artifactConfig.getDestination(), is("")); TestArtifactConfig testArtifactConfig = new TestArtifactConfig("src", null); assertThat(testArtifactConfig.getDestination(), is("testoutput")); } }
@Test public void validate_shouldFailIfDestDoesNotMatchAFilePattern() { BuildArtifactConfig artifactPlan = new BuildArtifactConfig("foo/bar", ".."); artifactPlan.validate(null); assertThat(artifactPlan.errors().on(BuiltinArtifactConfig.DEST), is("Invalid destination path. Destination path should match the pattern (([.]\\/)?[.][^. ]+)|([^. ].+[^. ])|([^. ][^. ])|([^. ])")); }
public ArtifactConfig toArtifactConfig(CRArtifact crArtifact) { switch (crArtifact.getType()) { case build: CRBuiltInArtifact crBuildArtifact = (CRBuiltInArtifact) crArtifact; return new BuildArtifactConfig(crBuildArtifact.getSource(), crBuildArtifact.getDestination()); case test: CRBuiltInArtifact crTestArtifact = (CRBuiltInArtifact) crArtifact; return new TestArtifactConfig(crTestArtifact.getSource(), crTestArtifact.getDestination()); case external: CRPluggableArtifact crPluggableArtifact = (CRPluggableArtifact) crArtifact; Configuration configuration = toConfiguration(crPluggableArtifact.getConfiguration()); ConfigurationProperty[] configProperties = new ConfigurationProperty[configuration.size()]; return new PluggableArtifactConfig(crPluggableArtifact.getId(), crPluggableArtifact.getStoreId(), configuration.toArray(configProperties)); default: throw new RuntimeException(String.format("Unsupported CR Artifact Type: %s.", crArtifact.getType())); } }
public static JobConfig createJobConfigWithResourceAndArtifactPlans() { return new JobConfig(new CaseInsensitiveString("defaultJob"), new ResourceConfigs(new ResourceConfig("Linux"), new ResourceConfig("Java")), new ArtifactConfigs(Arrays.asList(new BuildArtifactConfig("src", "dest")))); }
@Test public void validate_shouldNotFailWhenDestinationIsNotSet() { BuildArtifactConfig artifactPlan = new BuildArtifactConfig(null, null); artifactPlan.setSource("source"); artifactPlan.validate(null); assertThat(artifactPlan.errors().isEmpty(), is(true)); }
@Test public void shouldClearAllArtifactsWhenTheMapIsNull() { ArtifactConfigs artifactConfigs = new ArtifactConfigs(); artifactConfigs.add(new BuildArtifactConfig("src", "dest")); artifactConfigs.setConfigAttributes(null); assertThat(artifactConfigs.size(), is(0)); }
@Test public void shouldErrorOutWhenDuplicateArtifactConfigsExists() { List<ArtifactConfig> plans = new ArrayList<>(); BuildArtifactConfig existingPlan = new BuildArtifactConfig("src", "dest"); plans.add(existingPlan); BuildArtifactConfig artifactPlan = new BuildArtifactConfig("src", "dest"); artifactPlan.validateUniqueness(plans); assertThat(artifactPlan.errors().isEmpty(), is(false)); assertThat(artifactPlan.errors().on(BuiltinArtifactConfig.SRC), is("Duplicate artifacts defined.")); assertThat(artifactPlan.errors().on(BuiltinArtifactConfig.DEST), is("Duplicate artifacts defined.")); assertThat(existingPlan.errors().isEmpty(), is(false)); assertThat(existingPlan.errors().on(BuiltinArtifactConfig.SRC), is("Duplicate artifacts defined.")); assertThat(existingPlan.errors().on(BuiltinArtifactConfig.DEST), is("Duplicate artifacts defined.")); }
@Test public void validate_shouldFailIfSourceIsEmpty() { BuildArtifactConfig artifactPlan = new BuildArtifactConfig(null, "bar"); artifactPlan.validate(ConfigSaveValidationContext.forChain(new JobConfig("jobname"))); assertThat(artifactPlan.errors().on(BuiltinArtifactConfig.SRC), is("Job 'jobname' has an artifact with an empty source")); }
@Test public void toArtifactPlans_shouldConvertArtifactConfigsToArtifactPlanList() { final PluggableArtifactConfig artifactConfig = new PluggableArtifactConfig("id", "storeId", create("Foo", true, "Bar")); final ArtifactConfigs artifactConfigs = new ArtifactConfigs(Arrays.asList( new BuildArtifactConfig("source", "destination"), new TestArtifactConfig("test-source", "test-destination"), artifactConfig )); final List<ArtifactPlan> artifactPlans = ArtifactPlan.toArtifactPlans(artifactConfigs); assertThat(artifactPlans, containsInAnyOrder( new ArtifactPlan(ArtifactPlanType.file, "source", "destination"), new ArtifactPlan(ArtifactPlanType.unit, "test-source", "test-destination"), new ArtifactPlan(artifactConfig.toJSON()) )); }
@Test public void getPluggableArtifactConfigs_shouldReturnPluggableArtifactConfigs() { ArtifactConfigs allConfigs = new ArtifactConfigs(); allConfigs.add(new BuildArtifactConfig("src", "dest")); allConfigs.add(new BuildArtifactConfig("java", null)); allConfigs.add(new PluggableArtifactConfig("s3", "cd.go.s3")); allConfigs.add(new PluggableArtifactConfig("docker", "cd.go.docker")); final List<PluggableArtifactConfig> artifactConfigs = allConfigs.getPluggableArtifactConfigs(); assertThat(artifactConfigs, hasSize(2)); assertThat(artifactConfigs, containsInAnyOrder( new PluggableArtifactConfig("s3", "cd.go.s3"), new PluggableArtifactConfig("docker", "cd.go.docker") )); }
@Test public void shouldValidateTree() { ArtifactConfigs artifactConfigs = new ArtifactConfigs(); artifactConfigs.add(new BuildArtifactConfig("src", "dest")); artifactConfigs.add(new BuildArtifactConfig("src", "dest")); artifactConfigs.add(new BuildArtifactConfig("src", "../a")); artifactConfigs.validateTree(null); assertThat(artifactConfigs.get(0).errors().on(BuiltinArtifactConfig.DEST), is("Duplicate artifacts defined.")); assertThat(artifactConfigs.get(0).errors().on(BuiltinArtifactConfig.SRC), is("Duplicate artifacts defined.")); assertThat(artifactConfigs.get(1).errors().on(BuiltinArtifactConfig.DEST), is("Duplicate artifacts defined.")); assertThat(artifactConfigs.get(1).errors().on(BuiltinArtifactConfig.SRC), is("Duplicate artifacts defined.")); assertThat(artifactConfigs.get(2).errors().on(BuiltinArtifactConfig.DEST), is("Invalid destination path. Destination path should match the pattern " + FilePathTypeValidator.PATH_PATTERN)); }
@Test public void shouldErrorOutWhenDuplicateArtifactConfigExists() { final ArtifactConfigs artifactConfigs = new ArtifactConfigs(new BuildArtifactConfig("src", "dest")); artifactConfigs.add(new BuildArtifactConfig("src", "dest")); artifactConfigs.add(new BuildArtifactConfig("src", "dest")); artifactConfigs.validate(null); assertFalse(artifactConfigs.get(0).errors().isEmpty()); assertThat(artifactConfigs.get(0).errors().on(BuiltinArtifactConfig.SRC), Matchers.is("Duplicate artifacts defined.")); assertThat(artifactConfigs.get(0).errors().on(BuiltinArtifactConfig.DEST), Matchers.is("Duplicate artifacts defined.")); assertFalse(artifactConfigs.get(1).errors().isEmpty()); assertThat(artifactConfigs.get(1).errors().on(BuiltinArtifactConfig.SRC), Matchers.is("Duplicate artifacts defined.")); assertThat(artifactConfigs.get(1).errors().on(BuiltinArtifactConfig.DEST), Matchers.is("Duplicate artifacts defined.")); assertFalse(artifactConfigs.get(2).errors().isEmpty()); assertThat(artifactConfigs.get(2).errors().on(BuiltinArtifactConfig.SRC), Matchers.is("Duplicate artifacts defined.")); assertThat(artifactConfigs.get(2).errors().on(BuiltinArtifactConfig.DEST), Matchers.is("Duplicate artifacts defined.")); }
@Test public void shouldWriteArtifactsConfigXMLWithType() throws Exception { CruiseConfig cruiseConfig = new BasicCruiseConfig(); cruiseConfig.getArtifactStores().add(new ArtifactStore("s3", "cd.go.artifact.docker")); final PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfigWithStage("Test", "test-stage"); final JobConfig jobConfig = pipelineConfig.getStage("test-stage").jobConfigByConfigName("dev"); jobConfig.artifactConfigs().add(new BuildArtifactConfig("build/libs/*.jar", "dist")); jobConfig.artifactConfigs().add(new TestArtifactConfig("test-result/*", "reports")); jobConfig.artifactConfigs().add(new PluggableArtifactConfig("installers", "s3")); cruiseConfig.addPipeline("TestGroup", pipelineConfig); xmlWriter.write(cruiseConfig, output, false); String actualXML = this.output.toString(); assertThat(actualXML, containsString("<artifact type=\"build\" src=\"build/libs/*.jar\" dest=\"dist\" />")); assertThat(actualXML, containsString("<artifact type=\"test\" src=\"test-result/*\" dest=\"reports\" />")); assertThat(actualXML, containsString("<artifact type=\"external\" id=\"installers\" storeId=\"s3\" />")); }
private StageConfig getStageConfig(String stageName, String jobName) { JobConfig jobConfig = new JobConfig(new CaseInsensitiveString(jobName)); jobConfig.addTask(new AntTask()); jobConfig.addTask(new ExecTask("command", "", "workingDir")); jobConfig.artifactConfigs().add(new BuildArtifactConfig("src", "dest")); jobConfig.addVariable("env1", "val1"); jobConfig.addResourceConfig("powerful"); JobConfigs jobConfigs = new JobConfigs(jobConfig); return new StageConfig(new CaseInsensitiveString(stageName), jobConfigs); }
public static JobConfig jobConfig() { JobConfig job = createJobConfigWithResourceAndArtifactPlans(); addTask(job); job.setTimeout("100"); job.setRunInstanceCount(3); job.artifactConfigs().clear(); job.artifactConfigs().add(new BuildArtifactConfig("target/dist.jar", "pkg")); job.artifactConfigs().add(new TestArtifactConfig("target/reports/**/*Test.xml", "reports")); job.addTab("coverage", "Jcoverage/index.html"); job.addTab("something", "something/path.html"); job.getProperties().add(new ArtifactPropertyConfig("coverage.class", "target/emma/coverage.xml", "substring-before(//report/data/all/coverage[starts-with(@type,'class')]/@value, '%')")); return job; }