@Test public void shouldReturnGroupsOtherThanMain_WhenMerged() { BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); cruiseConfig = new BasicCruiseConfig(mainCruiseConfig, PartialConfigMother.withPipeline("pipe2")); assertNotSame(mainCruiseConfig.getGroups(), cruiseConfig.getGroups()); }
@Override public void copyErrorsTo(CruiseConfig to) { copyErrors(this, to); }
public PipelineConfigs getPipelineGroup() { if (cruiseConfig.hasPipelineGroup(groupName)) return cruiseConfig.findGroup(groupName); else return null; }
private void areThereCyclicDependencies() { final DFSCycleDetector dfsCycleDetector = new DFSCycleDetector(); final Hashtable<CaseInsensitiveString, Node> dependencyTable = getDependencyTable(); List<PipelineConfig> pipelineConfigs = this.getAllPipelineConfigs(); DependencyTable pipelineDependencyState = new DependencyTable(dependencyTable); for (PipelineConfig pipelineConfig : pipelineConfigs) { try { dfsCycleDetector.topoSort(pipelineConfig.name(), pipelineDependencyState); } catch (Exception e) { addToErrorsBaseOnMaterialsIfDoesNotExist(e.getMessage(), pipelineConfig.materialConfigs(), pipelineConfigs); } } }
@Test public void shouldReturnNullWhenMaterialNotFoundForTheGivenFingerPrint() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); PipelineConfig pipeline = goConfigMother.addPipeline(cruiseConfig, "pipeline1", "stage", "build"); assertThat(pipeline.materialConfigs().getByFingerPrint("invalid"), is(nullValue())); }
@Test public void shouldSetOriginInEnvironments() { BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); BasicEnvironmentConfig env = new BasicEnvironmentConfig(new CaseInsensitiveString("e")); mainCruiseConfig.addEnvironment(env); mainCruiseConfig.setOrigins(new FileConfigOrigin()); assertThat(env.getOrigin(), is(new FileConfigOrigin())); }
@Test public void shouldReturnValidationErrorMessages(){ BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(); BasicEnvironmentConfig environmentConfig = new BasicEnvironmentConfig(new CaseInsensitiveString("env")); environmentConfig.addAgent("does_not_exist_1"); environmentConfig.addAgent("does_not_exist_2"); environmentConfig.addAgent("exists_3"); cruiseConfig.addEnvironment(environmentConfig); cruiseConfig.agents().add(new AgentConfig("exists_3")); List<ConfigErrors> errors = new EnvironmentAgentValidator().validateConfig(cruiseConfig); assertThat(errors.size(), is(2)); assertThat(errors.get(0).on(EnvironmentAgentConfig.UUID), is("Environment 'env' has an invalid agent uuid 'does_not_exist_1'")); assertThat(errors.get(1).on(EnvironmentAgentConfig.UUID), is("Environment 'env' has an invalid agent uuid 'does_not_exist_2'")); } }
@Test public void shouldNotCloneAllTemplatesWithAssociatedPipelines() { PipelineTemplateConfig template = PipelineTemplateConfigMother.createTemplate("template-1"); BasicCruiseConfig config = GoConfigMother.defaultCruiseConfig(); config.addTemplate(template); config.addPipelineWithoutValidation("g1", PipelineConfigMother.pipelineConfigWithTemplate("p1", template.name().toString())); //to prime cache config.templatesWithAssociatedPipelines(); //change state config.findGroup("g1").remove(0); config.getTemplates().removeTemplateNamed(template.name()); BasicCruiseConfig cloned = new GoConfigCloner().deepClone(config); assertThat(ReflectionUtil.getField(config, "allTemplatesWithAssociatedPipelines"), is(not((nullValue())))); assertThat(ReflectionUtil.getField(cloned, "allTemplatesWithAssociatedPipelines"), is(nullValue())); assertThat(cloned.templatesWithAssociatedPipelines().size(), is(0)); }
@Test public void shouldValidateWhetherTheReferredParamsAreDefinedInPipelinesUsingTheTemplate() { PipelineTemplateConfig templateWithParams = PipelineTemplateConfigMother.createTemplateWithParams("template", "param1", "param2"); PipelineConfig pipelineConfig = PipelineConfigMother.pipelineConfigWithTemplate("pipeline", "template"); BasicCruiseConfig cruiseConfig = GoConfigMother.defaultCruiseConfig(); cruiseConfig.addTemplate(templateWithParams); cruiseConfig.addPipelineWithoutValidation("group", pipelineConfig); templateWithParams.validateTree(ConfigSaveValidationContext.forChain(cruiseConfig), cruiseConfig, false); assertThat(templateWithParams.errors().getAllOn("params"), is(Arrays.asList("The param 'param1' is not defined in pipeline 'pipeline'", "The param 'param2' is not defined in pipeline 'pipeline'"))); }
public PipelineConfig getPipelineConfigByName(CaseInsensitiveString pipelineName) { try { return cruiseConfig.pipelineConfigByName(pipelineName); } catch (PipelineNotFoundException e) { return null; } }
@Test public void shouldCheckForExistenceOfTemplate() { BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(); cruiseConfig.addTemplate(new PipelineTemplateConfig(new CaseInsensitiveString("t1"))); ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig); MatcherAssert.assertThat(context.doesTemplateExist(new CaseInsensitiveString("t1")), is(true)); MatcherAssert.assertThat(context.doesTemplateExist(new CaseInsensitiveString("t2")), is(false)); }
@Test public void shouldValidateStagePermissionsOfATemplateStageInTheContextOfPipelineUsingTheTemplate() { StageConfig stageConfig = StageConfigMother.custom("stage", new JobConfigs(new JobConfig(new CaseInsensitiveString("defaultJob")))); stageConfig.setApproval(new Approval(new AuthConfig(new AdminUser(new CaseInsensitiveString("non-admin-non-operate"))))); PipelineTemplateConfig template = PipelineTemplateConfigMother.createTemplate("template", stageConfig); PipelineConfig pipelineConfig = PipelineConfigMother.pipelineConfigWithTemplate("pipeline", "template"); pipelineConfig.usingTemplate(template); BasicCruiseConfig cruiseConfig = GoConfigMother.defaultCruiseConfig(); cruiseConfig.addTemplate(template); cruiseConfig.addPipelineWithoutValidation("group", pipelineConfig); PipelineConfigs group = cruiseConfig.findGroup("group"); group.setAuthorization(new Authorization(new ViewConfig(), new OperationConfig(new AdminUser(new CaseInsensitiveString("foo"))), new AdminsConfig())); cruiseConfig.server().security().securityAuthConfigs().add(new SecurityAuthConfig()); cruiseConfig.server().security().adminsConfig().add(new AdminUser(new CaseInsensitiveString("super-admin"))); template.validateTree(ConfigSaveValidationContext.forChain(cruiseConfig), cruiseConfig, false); assertThat(template.errors().getAllOn("name"), is(Arrays.asList("User \"non-admin-non-operate\" who is not authorized to operate pipeline group `group` can not be authorized to approve stage"))); }
public PipelineGroups getGroups() { return cruiseConfig.getGroups(); }
@Test public void shouldNotClonePipelineNameToConfigMap() { BasicCruiseConfig config = GoConfigMother.configWithPipelines("p1", "p2"); //to prime cache config.pipelineConfigByName(new CaseInsensitiveString("p1")); //change state config.findGroup("defaultGroup").remove(0); BasicCruiseConfig cloned = new GoConfigCloner().deepClone(config); assertThat(ReflectionUtil.getField(config, "pipelineNameToConfigMap"), is(not((nullValue())))); assertThat(ReflectionUtil.getField(cloned, "pipelineNameToConfigMap"), is(nullValue())); assertThat(cloned.pipelineConfigsAsMap().size(), is(1)); }
@Test public void shouldThrowExceptionIfValidationFails() throws Exception { BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(); BasicEnvironmentConfig environmentConfig = new BasicEnvironmentConfig(new CaseInsensitiveString("env")); environmentConfig.addAgent("does_not_exist_1"); environmentConfig.addAgent("does_not_exist_2"); cruiseConfig.addEnvironment(environmentConfig); try { new EnvironmentAgentValidator().validate(cruiseConfig); fail("should have thrown exception"); } catch (Exception e) { assertThat(e.getMessage(), is("Environment 'env' has an invalid agent uuid 'does_not_exist_1', Environment 'env' has an invalid agent uuid 'does_not_exist_2'")); } }
private void passReferenceValidationHelper(ConfigOrigin pipelineOrigin, ConfigOrigin envOrigin) { BasicCruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("pipe1"); cruiseConfig.getPipelineConfigByName(new CaseInsensitiveString("pipe1")).setOrigin(pipelineOrigin); BasicEnvironmentConfig environmentConfig = (BasicEnvironmentConfig) this.environmentConfig; environmentConfig.setOrigins(envOrigin); environmentConfig.addPipeline(new CaseInsensitiveString("pipe1")); cruiseConfig.addEnvironment(environmentConfig); environmentConfig.validate(ConfigSaveValidationContext.forChain(cruiseConfig, environmentConfig)); EnvironmentPipelineConfig reference = environmentConfig.getPipelines().first(); assertThat(reference.errors().isEmpty(),is(true)); }
@Override public List<PipelineConfig> getAllLocalPipelineConfigs(boolean excludeMembersOfRemoteEnvironments) { return getAllPipelineConfigs(); }
@Test public void shouldGetPipelineGroupForPipelineInContext(){ String pipelineName = "p1"; BasicCruiseConfig cruiseConfig = GoConfigMother.configWithPipelines(pipelineName); PipelineConfig p1 = cruiseConfig.pipelineConfigByName(new CaseInsensitiveString(pipelineName)); PipelineConfigSaveValidationContext context = PipelineConfigSaveValidationContext.forChain(true, PipelineConfigs.DEFAULT_GROUP, cruiseConfig, p1); assertThat(context.getPipelineGroup(), is(cruiseConfig.findGroup(PipelineConfigs.DEFAULT_GROUP))); }
@Test public void shouldSetOriginInPipelines() { pipelines = new BasicPipelineConfigs("group_main", new Authorization(), PipelineConfigMother.pipelineConfig("pipe1")); BasicCruiseConfig mainCruiseConfig = new BasicCruiseConfig(pipelines); PipelineConfig pipe = pipelines.get(0); mainCruiseConfig.setOrigins(new FileConfigOrigin()); assertThat(pipe.getOrigin(), is(new FileConfigOrigin())); }