public static StageConfig fromJSON(JsonReader jsonReader) { StageConfig stageConfig = new StageConfig(); jsonReader.readCaseInsensitiveStringIfPresent("name", stageConfig::setName); jsonReader.optBoolean("fetch_materials").ifPresent(stageConfig::setFetchMaterials); jsonReader.optBoolean("clean_working_directory").ifPresent(stageConfig::setCleanWorkingDir); jsonReader.optBoolean("never_cleanup_artifacts").ifPresent(stageConfig::setArtifactCleanupProhibited); stageConfig.setVariables(EnvironmentVariableRepresenter.fromJSONArray(jsonReader)); setJobs(jsonReader, stageConfig); jsonReader.optJsonObject("approval").ifPresent(approvalReader -> { stageConfig.setApproval(ApprovalRepresenter.fromJSON(approvalReader)); }); return stageConfig; }
public static StageConfig fromJSON(JsonReader jsonReader) { StageConfig stageConfig = new StageConfig(); jsonReader.readCaseInsensitiveStringIfPresent("name", stageConfig::setName); jsonReader.optBoolean("fetch_materials").ifPresent(stageConfig::setFetchMaterials); jsonReader.optBoolean("clean_working_directory").ifPresent(stageConfig::setCleanWorkingDir); jsonReader.optBoolean("never_cleanup_artifacts").ifPresent(stageConfig::setArtifactCleanupProhibited); stageConfig.setVariables(EnvironmentVariableRepresenter.fromJSONArray(jsonReader)); setJobs(jsonReader, stageConfig); jsonReader.optJsonObject("approval").ifPresent(approvalReader -> { stageConfig.setApproval(ApprovalRepresenter.fromJSON(approvalReader)); }); return stageConfig; }
@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 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)); }
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; }
@Test public void shouldValidateStageApprovalAuthorizationOfATemplateInTheContextOfPipelinesUsingTheTemplate() throws Exception { JobConfig jobConfig = new JobConfig(new CaseInsensitiveString("defaultJob")); JobConfigs jobConfigs = new JobConfigs(jobConfig); StageConfig stageConfig = StageConfigMother.custom("stage", jobConfigs); stageConfig.setApproval(new Approval(new AuthConfig(new AdminRole(new CaseInsensitiveString("non-existent-role"))))); 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); template.validateTree(ConfigSaveValidationContext.forChain(cruiseConfig), cruiseConfig, false); assertThat(template.errors().getAllOn("name"), is(Arrays.asList("Role \"non-existent-role\" does not exist."))); }
@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"))); }