public void setScmRevision(Set<FaninScmMaterial> allScmMaterials) { for (FaninScmMaterial scmMaterial : allScmMaterials) { if (materialConfig.getFingerprint().equals(scmMaterial.fingerprint)) { scmRevision = scmMaterial.revision; break; } } } }
private void validateAutoUpdateState(ValidationContext validationContext) { if (validationContext == null) return; MaterialConfig material = this.getMaterialConfig(); if (material != null) { MaterialConfigs allMaterialsByFingerPrint = validationContext.getAllMaterialsByFingerPrint(material.getFingerprint()); if (allMaterialsByFingerPrint.stream().anyMatch(m -> !m.isAutoUpdate())) { getMaterialConfig().errors().add("autoUpdate", format("Material of type %s (%s) is specified as a configuration repository and pipeline material with disabled autoUpdate." + " All copies of this material must have autoUpdate enabled or configuration repository must be removed", material.getTypeForDisplay(), material.getDescription())); } } }
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)); }
public Set<MaterialConfig> getAllUniquePostCommitSchedulableMaterials() { Set<MaterialConfig> materialConfigs = new HashSet<>(); Set<String> uniqueMaterials = new HashSet<>(); for (PipelineConfigs pipelineConfigs : this) { for (PipelineConfig pipelineConfig : pipelineConfigs) { for (MaterialConfig materialConfig : pipelineConfig.materialConfigs()) { if ((materialConfig instanceof ScmMaterialConfig || materialConfig instanceof PluggableSCMMaterialConfig) && !materialConfig.isAutoUpdate() && !uniqueMaterials.contains(materialConfig.getFingerprint())) { materialConfigs.add(materialConfig); uniqueMaterials.add(materialConfig.getFingerprint()); } } } } return materialConfigs; }
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 boolean isValidMaterial() { MaterialConfig materialConfig = getMaterialConfig(); if (materialConfig == null) { return false; } return materialConfig.errors().isEmpty(); }
private void validateAutoUpdateEnabled() { if (this.getMaterialConfig() != null) { if (!this.getMaterialConfig().isAutoUpdate()) this.getMaterialConfig().errors().add("autoUpdate", format( "Configuration repository material '%s' must have autoUpdate enabled.", this.getMaterialConfig().getDisplayName())); } }
private void validateMaterialUniqueness(ValidationContext validationContext) { if (this.getMaterialConfig() != null) { if (!validationContext.getCruiseConfig().getConfigRepos().isUniqueMaterial(this.getMaterialConfig().getFingerprint())) { this.errors.add("material", format( "You have defined multiple configuration repositories with the same repository - '%s'.", this.repo.getDisplayName())); } } }
String fingerprint = material.getFingerprint(); if (this.configWatchList.hasConfigRepoWithFingerprint(fingerprint)) { PartialConfigProvider plugin = null; } catch (Exception ex) { this.configReposMaterialParseResultManager.parseFailed(fingerprint, modification, ex); LOGGER.error("Failed to get config plugin for {}", material.getDisplayName()); String message = String.format("Failed to obtain configuration plugin '%s' for material: %s", repoConfig.getPluginId(), material.getLongDescription()); String errorDescription = ex.getMessage() == null ? ex.toString() : ex.getMessage(); PartialConfig newPart = plugin.load(folder, context); if (newPart == null) { LOGGER.warn("Parsed configuration material {} by {} is null", material.getDisplayName(), plugin.displayName()); newPart = new PartialConfig(); } catch (Exception ex) { this.configReposMaterialParseResultManager.parseFailed(fingerprint, modification, ex); LOGGER.error("Failed to parse configuration material {} by {}", material.getDisplayName(), plugin.displayName(), ex); String message = String.format("Parsing configuration repository using %s failed for material: %s", plugin.displayName(), material.getLongDescription()); String errorDescription = ex.getMessage() == null ? ex.toString() : ex.getMessage();
public MaterialInstance findMaterialInstance(MaterialConfig materialConfig) { String cacheKey = materialKey(materialConfig.getFingerprint()); MaterialInstance materialInstance = (MaterialInstance) goCache.get(cacheKey); if (materialInstance == null) { synchronized (cacheKey) { materialInstance = (MaterialInstance) goCache.get(cacheKey); if (materialInstance == null) { DetachedCriteria hibernateCriteria = DetachedCriteria.forClass(materialConfigConverter.getInstanceType(materialConfig)); for (Map.Entry<String, Object> property : materialConfig.getSqlCriteria().entrySet()) { if (!property.getKey().equals(AbstractMaterial.SQL_CRITERIA_TYPE)) { //type is polymorphic mapping discriminator if (property.getValue() == null) { hibernateCriteria.add(isNull(property.getKey())); } else { hibernateCriteria.add(eq(property.getKey(), property.getValue())); } } } materialInstance = (MaterialInstance) firstResult(hibernateCriteria); if (materialInstance != null) { goCache.put(cacheKey, materialInstance); } } } } return materialInstance;//TODO: clone me, caller may mutate }
boolean hasOneMaterialUseBaseFolder() { for (MaterialConfig material : this) { if (material.getFolder() == null) { return true; } } return false; }
@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 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 validateTree_shouldValidateTheMaterialConfig() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); MaterialConfig materialConfig = mock(MaterialConfig.class); when(materialConfig.errors()).thenReturn(new ConfigErrors()); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(materialConfig, "plug"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig)); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(cruiseConfig); configRepoConfig.validateTree(validationContext); verify(materialConfig).validateTree(validationContext); }
public MaterialConfig getByFingerPrint(String fingerPrint) { for (MaterialConfig material : this) { if (material.getPipelineUniqueFingerprint().equals(fingerPrint)) { return material; } } return null; }
private Set<MaterialConfig> getUniqueMaterialConfigs(boolean ignoreManualPipelines) { Set<MaterialConfig> materialConfigs = new HashSet<>(); Set<Map> uniqueMaterials = new HashSet<>(); for (PipelineConfig pipelineConfig : pipelinesFromAllGroups()) { for (MaterialConfig materialConfig : pipelineConfig.materialConfigs()) { if (!uniqueMaterials.contains(materialConfig.getSqlCriteria())) { if (ignoreManualPipelines && !materialConfig.isAutoUpdate() && materialConfig instanceof ScmMaterialConfig) { continue; } materialConfigs.add(materialConfig); uniqueMaterials.add(materialConfig.getSqlCriteria()); } } } return materialConfigs; }
@Test public void shouldNotUseNameFieldButInsteadUseTheNameMethodToCheckIfTheMaterialNameIsUsedInThePipelineLabel() throws Exception { PipelineConfig pipelineConfig = mock(PipelineConfig.class); when(pipelineConfig.getLabelTemplate()).thenReturn("${COUNT}-${hg}-${dep}-${pkg}-${scm}"); MaterialConfig hg = mock(HgMaterialConfig.class); when(hg.getName()).thenReturn(new CaseInsensitiveString("hg")); when(hg.isUsedInLabelTemplate(pipelineConfig)).thenCallRealMethod(); MaterialConfig dependency = mock(DependencyMaterialConfig.class); when(dependency.getName()).thenReturn(new CaseInsensitiveString("dep")); when(dependency.isUsedInLabelTemplate(pipelineConfig)).thenCallRealMethod(); MaterialConfig aPackage = mock(PackageMaterialConfig.class); when(aPackage.getName()).thenReturn(new CaseInsensitiveString("pkg")); when(aPackage.isUsedInLabelTemplate(pipelineConfig)).thenCallRealMethod(); MaterialConfig aPluggableSCM = mock(PluggableSCMMaterialConfig.class); when(aPluggableSCM.getName()).thenReturn(new CaseInsensitiveString("scm")); when(aPluggableSCM.isUsedInLabelTemplate(pipelineConfig)).thenCallRealMethod(); assertThat(hg.isUsedInLabelTemplate(pipelineConfig), is(true)); assertThat(dependency.isUsedInLabelTemplate(pipelineConfig), is(true)); assertThat(aPackage.isUsedInLabelTemplate(pipelineConfig), is(true)); assertThat(aPluggableSCM.isUsedInLabelTemplate(pipelineConfig), is(true)); verify(hg).getName(); verify(dependency).getName(); verify(aPackage).getName(); verify(aPluggableSCM).getName(); }
public static PipelineConfig createManualTriggerPipelineConfig(MaterialConfig materialConfig, String pipelineName, String stageName, String... buildNames) { PipelineConfig pipelineConfig = createPipelineConfig(pipelineName, stageName, buildNames); pipelineConfig.materialConfigs().clear(); materialConfig.setName(new CaseInsensitiveString(String.format("%s-%s", pipelineName, materialConfig.getType()))); materialConfig.setAutoUpdate(false); pipelineConfig.materialConfigs().add(materialConfig); pipelineConfig.first().setApproval(Approval.manualApproval()); return pipelineConfig; }
public boolean isAutoUpdateStateMismatch(MaterialConfigs materialAutoUpdateMap) { if(materialAutoUpdateMap.size() > 1){ for (MaterialConfig otherMaterial : materialAutoUpdateMap) { if (otherMaterial.isAutoUpdate() != this.autoUpdate) { return true; } } } return false; }