private GoConfigHolder validateAfterMigrationFinished(String content) throws Exception { return new MagicalGoConfigXmlLoader(configCache, registry).loadConfigHolder(content); }
public <T> T fromXmlPartial(String partial, Class<T> o) throws Exception { return fromXmlPartial(toInputStream(partial, UTF_8), o); }
protected ConfigSaveState saveConfig(final String xmlString, final String md5) throws Exception { LOGGER.debug("[Config Save] Started saving XML"); final MagicalGoConfigXmlLoader configXmlLoader = new MagicalGoConfigXmlLoader(configCache, registry); LOGGER.debug("[Config Save] Updating config"); final CruiseConfig deserializedConfig = configXmlLoader.deserializeConfig(xmlString); ConfigSaveState configSaveState = systemEnvironment.optimizeFullConfigSave() ? saveConfigNewFlow(deserializedConfig, md5) : saveConfigOldFlow(deserializedConfig, md5); LOGGER.debug("[Config Save] Finished saving XML"); return configSaveState; }
public GoConfigHolder loadConfigHolder(final String content, Callback callback) throws Exception { CruiseConfig configForEdit; CruiseConfig config; LOGGER.debug("[Config Save] Loading config holder"); configForEdit = deserializeConfig(content); if (callback != null) callback.call(configForEdit); config = preprocessAndValidate(configForEdit); return new GoConfigHolder(config, configForEdit); }
private GoConfigHolder reloadConfig(String configXml, final List<PartialConfig> partials) { try { return loader.loadConfigHolder(configXml, cruiseConfig -> cruiseConfig.setPartials(partials)); } catch (Exception e) { LOGGER.debug("[CONFIG_MERGE] Post merge validation failed"); throw new ConfigMergePostValidationException(e.getMessage(), e); } }
@Test public void shouldNotKillAllChildrenWhenEmptyOnCancel() throws Exception { RakeTask rakeTask = new MagicalGoConfigXmlLoader(new ConfigCache(), ConfigElementImplementationRegistryMother.withNoPlugins()).fromXmlPartial( "<rake>" + " <oncancel />" + "</rake>", RakeTask.class ); assertThat(rakeTask.cancelTask(), is(instanceOf(NullTask.class))); } }
@Autowired public PipelineConfigsService(ConfigCache configCache, ConfigElementImplementationRegistry registry, GoConfigService goConfigService, SecurityService securityService) { this.goConfigService = goConfigService; this.configCache = configCache; this.registry = registry; this.securityService = securityService; this.magicalGoConfigXmlLoader = new MagicalGoConfigXmlLoader(configCache, registry); }
public void write(CruiseConfig configForEdit, OutputStream output, boolean skipPreprocessingAndValidation) throws Exception { LOGGER.debug("[Serializing Config] Starting to write. Validation skipped? {}", skipPreprocessingAndValidation); MagicalGoConfigXmlLoader loader = new MagicalGoConfigXmlLoader(configCache, registry); if (!configForEdit.getOrigin().isLocal()) { throw new GoConfigInvalidException(configForEdit, "Attempted to save merged configuration with patials"); } if (!skipPreprocessingAndValidation) { loader.preprocessAndValidate(configForEdit); LOGGER.debug("[Serializing Config] Done with cruise config validators."); } Document document = createEmptyCruiseConfigDocument(); write(configForEdit, document.getRootElement(), configCache, registry); LOGGER.debug("[Serializing Config] XSD and DOM validation."); verifyXsdValid(document); MagicalGoConfigXmlLoader.validateDom(document.getRootElement(), registry); LOGGER.info("[Serializing Config] Generating config partial."); XmlUtils.writeXml(document, output); LOGGER.debug("[Serializing Config] Finished writing config partial."); }
public CruiseConfig validateCruiseConfig(CruiseConfig config) throws Exception { LOGGER.debug("[Config Save] In validateCruiseConfig: Starting."); List<ConfigErrors> allErrors = validate(config); if (!allErrors.isEmpty()) { if (config.isLocal()) throw new GoConfigInvalidException(config, allErrors); else throw new GoConfigInvalidMergeException(config, config.getMergedPartials(), allErrors); } LOGGER.debug("[Config Save] In validateCruiseConfig: Running validate."); for (GoConfigValidator validator : VALIDATORS) { validator.validate(config); } LOGGER.debug("[Config Save] In validateCruiseConfig: Done."); return config; }
@Test public void shouldGetConfigRepoPreprocessor() { MagicalGoConfigXmlLoader loader = new MagicalGoConfigXmlLoader(null, null); assertThat(loader.getPreprocessorOfType(ConfigRepoPartialPreprocessor.class) instanceof ConfigRepoPartialPreprocessor, is(true)); assertThat(loader.getPreprocessorOfType(ConfigParamPreprocessor.class) instanceof ConfigParamPreprocessor, is(true)); }
private EntityConfigSaveResult trySavingEntity(EntityConfigUpdateCommand updatingCommand, Username currentUser, CruiseConfig modifiedConfig, List<PartialConfig> partials) { modifiedConfig.setPartials(partials); CruiseConfig preprocessedConfig = cloner.deepClone(modifiedConfig); MagicalGoConfigXmlLoader.preprocess(preprocessedConfig); updatingCommand.encrypt(preprocessedConfig); if (updatingCommand.isValid(preprocessedConfig)) { try { LOGGER.info("[Configuration Changed] Saving updated configuration."); String configAsXml = configAsXml(modifiedConfig, true); String md5 = CachedDigestUtils.md5Hex(configAsXml); MagicalGoConfigXmlLoader.setMd5(modifiedConfig, md5); MagicalGoConfigXmlLoader.setMd5(preprocessedConfig, md5); writeToConfigXmlFile(configAsXml); checkinConfigToGitRepo(partials, preprocessedConfig, configAsXml, md5, currentUser.getUsername().toString()); LOGGER.debug("[Config Save] Done writing with lock"); CruiseConfig mergedCruiseConfigForEdit = modifiedConfig; if (!partials.isEmpty()) { LOGGER.debug("[Config Save] Updating GoConfigHolder with mergedCruiseConfigForEdit: Starting."); mergedCruiseConfigForEdit = cloner.deepClone(modifiedConfig); mergedCruiseConfigForEdit.merge(partials, true); LOGGER.debug("[Config Save] Updating GoConfigHolder with mergedCruiseConfigForEdit: Done."); } return new EntityConfigSaveResult(updatingCommand.getPreprocessedEntityConfig(), new GoConfigHolder(preprocessedConfig, modifiedConfig, mergedCruiseConfigForEdit)); } catch (Exception e) { throw new RuntimeException("failed to save : " + e.getMessage()); } } else { throw new GoConfigInvalidException(preprocessedConfig, "Validation failed."); } }
public CruiseConfig deserializeConfig(String content) throws Exception { String md5 = CachedDigestUtils.md5Hex(content); Element element = parseInputStream(new ByteArrayInputStream(content.getBytes())); LOGGER.debug("[Config Save] Updating config cache with new XML"); CruiseConfig configForEdit = classParser(element, BasicCruiseConfig.class, configCache, new GoCipher(), registry, new ConfigReferenceElements()).parse(); setMd5(configForEdit, md5); configForEdit.setOrigins(new FileConfigOrigin()); return configForEdit; }
private void setMD5(String md5, CruiseConfig badConfig) { try { MagicalGoConfigXmlLoader.setMd5(badConfig, md5); } catch (NoSuchFieldException | IllegalAccessException e) { // Ignore } }
protected void validateDocument(Document document) throws Exception { LOGGER.debug("[Config Save] In XSD validation: Starting."); writer.verifyXsdValid(document); LOGGER.debug("[Config Save] In XSD validation: Done."); LOGGER.debug("[Config Save] In DOM validation: Starting."); MagicalGoConfigXmlLoader.validateDom(document.getRootElement(), configElementImplementationRegistry); LOGGER.debug("[Config Save] In DOM validation: Done."); }
public CruiseConfig validateCruiseConfig(CruiseConfig cruiseConfig) throws Exception { return xmlLoader.validateCruiseConfig(cruiseConfig); }
private GoConfigHolder upgradeConfigFile() throws Exception { String upgradedXml = this.goConfigMigration.upgradeIfNecessary(this.goConfigFileReader.configXml()); LOGGER.info("[Config Save] Starting Config Save post upgrade using FullConfigSaveNormalFlow"); CruiseConfig cruiseConfig = this.loader.deserializeConfig(upgradedXml); return fullConfigSaveNormalFlow.execute(new FullConfigUpdateCommand(cruiseConfig, null), new ArrayList<>(), "Upgrade"); }
protected CruiseConfig preprocessAndValidate(CruiseConfig configForEdit) throws Exception { return loader.preprocessAndValidate(configForEdit); }
public static List<ConfigErrors> validate(CruiseConfig config) { preprocess(config); List<ConfigErrors> validationErrors = new ArrayList<>(); validationErrors.addAll(config.validateAfterPreprocess()); return validationErrors; }
private void assertFailureDuringLoad(String configXML, Class<?> expectedExceptionClass, String... expectedMessage) { try { xmlLoader.loadConfigHolder(configXML); fail("Should have failed with an exception of type: " + expectedExceptionClass.getSimpleName()); } catch (Exception e) { String message = "\nExpected: " + expectedExceptionClass.getSimpleName() + "\nActual : " + e.getClass().getSimpleName() + " with message: " + e.getMessage(); assertTrue(message, e.getClass().equals(expectedExceptionClass)); assertThat(e.getMessage(), anyOf(Arrays.stream(expectedMessage).map(Matchers::is).collect(Collectors.toList()))); } }
@Test public void shouldDefaultToUsingAKillAllChildrenCancelTask() throws Exception { RakeTask rakeTask = new MagicalGoConfigXmlLoader(new ConfigCache(), ConfigElementImplementationRegistryMother.withNoPlugins()).fromXmlPartial("<rake/>",RakeTask.class); assertThat(rakeTask.cancelTask(), is(instanceOf(KillAllChildProcessTask.class))); }