private void validateStageApprovalAuthorization(StageConfig stageConfig, PipelineConfigSaveValidationContext contextForChildren) { Approval approval = stageConfig.getApproval(); if (!approval.validateTree(contextForChildren)) { for (ConfigErrors errors : approval.getAllErrors()) { this.errors().addAll(errors); } } }
public boolean validateTree(ValidationContext validationContext) { validate(validationContext); boolean isValid = errors.isEmpty(); ValidationContext contextForChildren = validationContext.withParent(this); isValid = jobConfigs.validateTree(contextForChildren) && isValid; isValid = approval.validateTree(contextForChildren) && isValid; isValid = variables.validateTree(contextForChildren) && isValid; return isValid; }
@Test public void shouldReturnTrueIfAllDescendentsAreValid(){ EnvironmentVariablesConfig variables = mock(EnvironmentVariablesConfig.class); JobConfigs jobConfigs = mock(JobConfigs.class); Approval approval = mock(Approval.class); when(variables.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); when(jobConfigs.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); when(approval.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString("p1"), jobConfigs); stageConfig.setVariables(variables); stageConfig.setApproval(approval); boolean isValid = stageConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), stageConfig)); assertTrue(isValid); verify(jobConfigs).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(variables).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(approval).validateTree(any(PipelineConfigSaveValidationContext.class)); }
@Test public void shouldReturnFalseIfAnyDescendentIsInValid(){ EnvironmentVariablesConfig variables = mock(EnvironmentVariablesConfig.class); JobConfigs jobConfigs = mock(JobConfigs.class); Approval approval = mock(Approval.class); when(variables.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); when(jobConfigs.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); when(approval.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString("p1"), jobConfigs); stageConfig.setVariables(variables); stageConfig.setApproval(approval); boolean isValid = stageConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), stageConfig)); assertFalse(isValid); verify(jobConfigs).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(variables).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(approval).validateTree(any(PipelineConfigSaveValidationContext.class)); } }
@Test public void shouldValidateTree(){ EnvironmentVariablesConfig variables = mock(EnvironmentVariablesConfig.class); JobConfigs jobConfigs = mock(JobConfigs.class); Approval approval = mock(Approval.class); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString("stage$"), jobConfigs, approval); stageConfig.setVariables(variables); stageConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), stageConfig)); assertThat(stageConfig.errors().on(StageConfig.NAME), contains("Invalid stage name 'stage$'")); ArgumentCaptor<PipelineConfigSaveValidationContext> captor = ArgumentCaptor.forClass(PipelineConfigSaveValidationContext.class); verify(jobConfigs).validateTree(captor.capture()); PipelineConfigSaveValidationContext childContext = captor.getValue(); assertThat(childContext.getParent(), is(stageConfig)); verify(approval).validateTree(childContext); verify(variables).validateTree(childContext); }
@Test public void shouldValidateTree() { Approval approval = new Approval(new AuthConfig(new AdminRole(new CaseInsensitiveString("role")))); BasicCruiseConfig cruiseConfig = GoConfigMother.defaultCruiseConfig(); cruiseConfig.server().security().adminsConfig().addRole(new AdminRole(new CaseInsensitiveString("super-admin"))); PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("p1"), new MaterialConfigs()); cruiseConfig.addPipeline("g1", pipelineConfig); assertThat(approval.validateTree(PipelineConfigSaveValidationContext.forChain(true, "g1", cruiseConfig, pipelineConfig)), is(false)); assertThat(approval.getAuthConfig().errors().isEmpty(), is(false)); }