boolean hasOneMaterialUseBaseFolder() { for (MaterialConfig material : this) { if (material.getFolder() == null) { return true; } } return false; }
public boolean scmMaterialsHaveDestination() { for (MaterialConfig scmMaterial : getSCMAndPluggableSCMConfigs()) { String destination = scmMaterial.getFolder(); if (StringUtils.isBlank(destination)) { return false; } } return true; }
private void validateScmMaterials() { List<MaterialConfig> allSCMMaterials = getSCMAndPluggableSCMConfigs(); if (allSCMMaterials.size() > 1) { for (MaterialConfig material : allSCMMaterials) { if (StringUtils.isBlank(material.getFolder())) { String fieldName = material instanceof ScmMaterialConfig ? ScmMaterialConfig.FOLDER : PluggableSCMMaterialConfig.FOLDER; material.addError(fieldName, "Destination directory is required when specifying multiple scm materials"); } else { validateDestinationFolder(allSCMMaterials, material); } } } }
private void validateDestinationFolder(List<MaterialConfig> allSCMMaterials, MaterialConfig material) { String materialFolder = material.getFolder(); for (MaterialConfig otherMaterial : allSCMMaterials) { if (otherMaterial != material) { if (otherMaterial instanceof ScmMaterialConfig) { ((ScmMaterialConfig) otherMaterial).validateNotSubdirectoryOf(materialFolder); ((ScmMaterialConfig) otherMaterial).validateDestinationDirectoryName(materialFolder); } else { ((PluggableSCMMaterialConfig) otherMaterial).validateNotSubdirectoryOf(materialFolder); ((PluggableSCMMaterialConfig) otherMaterial).validateDestinationDirectoryName(materialFolder); } } } }
private static Consumer<OutputWriter> material(MaterialConfig material, MaterialRevision revision) { return materialWriter -> materialWriter.add("type", material.getTypeForDisplay()) .add("name", material.getDisplayName()) .add("fingerprint", material.getFingerprint()) .addIfNotNull("folder", material.getFolder()) .addChild("revision", materialRevision(revision)); }
@Theory public void shouldBeSameObject_WhenConversionIsDoneFromMaterialToMaterialInstanceAndBack(MaterialConfig materialConfig) throws Exception { Material material = materialConfigConverter.toMaterial(materialConfig); MaterialInstance materialInstance = material.createMaterialInstance(); Material materialConvertedBackFromInstance = materialInstance.toOldMaterial(materialConfig.getName().toString(), materialConfig.getFolder(), "pass"); assertTrue(message("Material <-> MaterialInstance conversion failed.", material, materialConvertedBackFromInstance), reflectionEquals(material, materialConvertedBackFromInstance, fieldsWhichShouldBeIgnoredWhenSavedInDbAndGotBack.get(materialConfig.getClass()))); assertThat(materialInstance.getFingerprint(), is(material.getFingerprint())); assertThat(materialConvertedBackFromInstance.getFingerprint(), is(materialInstance.getFingerprint())); assertPasswordIsCorrect(material); assertPasswordIsCorrect(materialConvertedBackFromInstance); }
@Test public void shouldResolveInheritedAttributes() throws NoSuchFieldException { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("cruise", "dev", "ant"); HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); materialConfig.setConfigAttributes(Collections.singletonMap(ScmMaterialConfig.FOLDER, "work/#{foo}/#{bar}/baz")); pipelineConfig.addMaterialConfig(materialConfig); new ParamResolver(new ParamSubstitutionHandlerFactory(params(param("foo", "pavan"), param("bar", "jj"))), fieldCache).resolve(pipelineConfig); assertThat(pipelineConfig.materialConfigs().get(1).getFolder(), is("work/pavan/jj/baz")); }
@Test public void shouldAllowSCMTypeMaterialForPipeline() throws Exception { CruiseConfig configToSave = new BasicCruiseConfig(); SCM scm = new SCM(); String scmId = "scm-id"; scm.setId(scmId); scm.setName("name"); scm.setPluginConfiguration(new PluginConfiguration("plugin-id", "1.0")); scm.setConfiguration(new Configuration(getConfigurationProperty("url", false, "http://go"))); configToSave.getSCMs().add(scm); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(scmId); pluggableSCMMaterialConfig.setSCMConfig(scm); configToSave.addPipeline("default", PipelineConfigMother.pipelineConfig("test", new MaterialConfigs(pluggableSCMMaterialConfig), new JobConfigs(new JobConfig("ls")))); xmlWriter.write(configToSave, output, false); GoConfigHolder goConfigHolder = xmlLoader.loadConfigHolder(output.toString()); PipelineConfig pipelineConfig = goConfigHolder.config.pipelineConfigByName(new CaseInsensitiveString("test")); MaterialConfig materialConfig = pipelineConfig.materialConfigs().get(0); assertThat(materialConfig instanceof PluggableSCMMaterialConfig, is(true)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getScmId(), is(scmId)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getSCMConfig(), is(scm)); assertThat(materialConfig.getFolder(), is(nullValue())); assertThat(materialConfig.filter(), is(new Filter())); }
@Test public void shouldLexicallyScopeTheParameters() throws NoSuchFieldException { PipelineConfig withParams = PipelineConfigMother.createPipelineConfig("cruise", "dev", "ant"); withParams.addParam(param("foo", "pipeline")); PipelineConfig withoutParams = PipelineConfigMother.createPipelineConfig("mingle", "dev", "ant"); CruiseConfig cruiseConfig = new BasicCruiseConfig(); cruiseConfig.addPipeline("group", withParams); cruiseConfig.addPipeline("group", withoutParams); cruiseConfig.server().setArtifactsDir("/#{foo}/#{bar}"); HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); materialConfig.setConfigAttributes(Collections.singletonMap(ScmMaterialConfig.FOLDER, "work/#{foo}/#{bar}/baz")); withParams.addMaterialConfig(materialConfig); withParams.setLabelTemplate("2.0.#{foo}-#{bar}"); withoutParams.setLabelTemplate("2.0.#{foo}-#{bar}"); new ParamResolver(new ParamSubstitutionHandlerFactory(params(param("foo", "global"), param("bar", "global-only"))), fieldCache).resolve(cruiseConfig); assertThat(withParams.materialConfigs().get(1).getFolder(), is("work/pipeline/global-only/baz")); assertThat(withParams.getLabelTemplate(), is("2.0.pipeline-global-only")); assertThat(withoutParams.getLabelTemplate(), is("2.0.global-global-only")); }
@Test public void shouldAllowFolderAndFilterForPluggableSCMMaterialForPipeline() throws Exception { CruiseConfig configToSave = new BasicCruiseConfig(); SCM scm = new SCM(); String scmId = "scm-id"; scm.setId(scmId); scm.setName("name"); scm.setPluginConfiguration(new PluginConfiguration("plugin-id", "1.0")); scm.setConfiguration(new Configuration(getConfigurationProperty("url", false, "http://go"))); configToSave.getSCMs().add(scm); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(scmId); pluggableSCMMaterialConfig.setSCMConfig(scm); pluggableSCMMaterialConfig.setFolder("dest"); pluggableSCMMaterialConfig.setFilter(new Filter(new IgnoredFiles("x"), new IgnoredFiles("y"))); configToSave.addPipeline("default", PipelineConfigMother.pipelineConfig("test", new MaterialConfigs(pluggableSCMMaterialConfig), new JobConfigs(new JobConfig("ls")))); xmlWriter.write(configToSave, output, false); GoConfigHolder goConfigHolder = xmlLoader.loadConfigHolder(output.toString()); PipelineConfig pipelineConfig = goConfigHolder.config.pipelineConfigByName(new CaseInsensitiveString("test")); MaterialConfig materialConfig = pipelineConfig.materialConfigs().get(0); assertThat(materialConfig instanceof PluggableSCMMaterialConfig, is(true)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getScmId(), is(scmId)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getSCMConfig(), is(scm)); assertThat(materialConfig.getFolder(), is("dest")); assertThat(materialConfig.filter(), is(new Filter(new IgnoredFiles("x"), new IgnoredFiles("y")))); }