private JobConfig createJobAndValidate(final String name) { JobConfig jobConfig = new JobConfig(name); jobConfig.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); return jobConfig; } }
@Test public void shouldValidateEmptyAndNullResources() { PipelineConfig pipelineConfig=PipelineConfigMother.createPipelineConfigWithJobConfigs("pipeline1"); JobConfig jobConfig = JobConfigMother.createJobConfigWithJobNameAndEmptyResources(); ValidationContext validationContext=mock(ValidationContext.class); when(validationContext.getPipeline()).thenReturn(pipelineConfig); when(validationContext.getStage()).thenReturn(pipelineConfig.getFirstStageConfig()); jobConfig.validate(validationContext); assertThat(jobConfig.errors().isEmpty(), is(false)); assertThat(jobConfig.errors().getAll().get(0),is("Empty resource name in job \"defaultJob\" of stage \"mingle\" of pipeline \"pipeline1\". If a template is used, please ensure that the resource parameters are defined for this pipeline.")); }
public boolean validateTree(ValidationContext validationContext) { validate(validationContext); boolean isValid = errors.isEmpty(); ValidationContext contextForChildren = validationContext.withParent(this); isValid = tasks.validateTree(contextForChildren) && isValid; isValid = variables.validateTree(contextForChildren) && isValid; isValid = resourceConfigs.validateTree(contextForChildren) && isValid; isValid = artifactPropertiesConfig.validateTree(contextForChildren) && isValid; isValid = tabs.validateTree(contextForChildren) && isValid; isValid = artifactConfigs.validateTree(contextForChildren) && isValid; return isValid; }
@Test public void shouldValidateAgainstPresenceOfBothResourcesAndElasticProfileId() { PipelineConfig pipelineConfig=PipelineConfigMother.createPipelineConfigWithJobConfigs("pipeline1"); JobConfig jobConfig = JobConfigMother.createJobConfigWithJobNameAndEmptyResources(); ValidationContext validationContext=mock(ValidationContext.class); jobConfig.setElasticProfileId("docker.unit-test"); when(validationContext.getPipeline()).thenReturn(pipelineConfig); when(validationContext.getStage()).thenReturn(pipelineConfig.getFirstStageConfig()); jobConfig.validate(validationContext); assertThat(jobConfig.errors().isEmpty(), is(false)); assertThat(jobConfig.errors().on(JobConfig.ELASTIC_PROFILE_ID), is("Job cannot have both `resource` and `elasticProfileId`")); assertThat(jobConfig.errors().on(JobConfig.RESOURCES), is("Job cannot have both `resource` and `elasticProfileId`")); }
@Test public void shouldValidateElasticProfileId() { PipelineConfig pipelineConfig=PipelineConfigMother.createPipelineConfigWithJobConfigs("pipeline1"); JobConfig jobConfig = JobConfigMother.createJobConfigWithJobNameAndEmptyResources(); ValidationContext validationContext=mock(ValidationContext.class); jobConfig.setResourceConfigs(new ResourceConfigs()); jobConfig.setElasticProfileId("non-existent-profile-id"); when(validationContext.getPipeline()).thenReturn(pipelineConfig); when(validationContext.getStage()).thenReturn(pipelineConfig.getFirstStageConfig()); when(validationContext.isValidProfileId("non-existent-profile-id")).thenReturn(false); jobConfig.validate(validationContext); assertThat(jobConfig.errors().isEmpty(), is(false)); assertThat(jobConfig.errors().on(JobConfig.ELASTIC_PROFILE_ID), is("No profile defined corresponding to profile_id 'non-existent-profile-id'")); }
@Test public void shouldValidateThatTheTimeoutIsAValidNumber() { JobConfig job = new JobConfig("job"); job.setTimeout("5.5"); job.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); assertThat(job.errors().isEmpty(), is(true)); }
@Test public void shouldErrorOutWhenTimeoutIsANegativeNumber() { JobConfig jobConfig = new JobConfig("job"); jobConfig.setTimeout("-1"); jobConfig.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); assertThat(jobConfig.errors().isEmpty(), is(false)); assertThat(jobConfig.errors().on(JobConfig.TIMEOUT), is("Timeout cannot be a negative number as it represents number of minutes")); }
@Test public void shouldMarkJobInvalidIfTimeoutIsNotAValidNumber() { JobConfig job = new JobConfig("job"); job.setTimeout("5.5MN"); job.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); assertThat(job.errors().isEmpty(), is(false)); assertThat(job.errors().on(JobConfig.TIMEOUT), is("Timeout should be a valid number as it represents number of minutes")); }
@Test public void shouldValidateAgainstSettingRunOnAllAgentsAndRunInstanceCountSetTogether() { JobConfig jobConfig = new JobConfig(new CaseInsensitiveString("test")); jobConfig.setRunOnAllAgents(true); jobConfig.setRunInstanceCount(10); jobConfig.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); ConfigErrors configErrors = jobConfig.errors(); assertThat(configErrors.isEmpty(), is(false)); assertThat(configErrors.on(JobConfig.RUN_TYPE), is("Job cannot be 'run on all agents' type and 'run multiple instance' type together.")); }
@Test public void shouldValidateAgainstSettingRunOnAllAgentsForAJobAssignedToElasticAgent() { JobConfig jobConfig = new JobConfig(new CaseInsensitiveString("test")); jobConfig.setRunOnAllAgents(true); jobConfig.setElasticProfileId("ubuntu-dev"); jobConfig.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); ConfigErrors configErrors = jobConfig.errors(); assertThat(configErrors.isEmpty(), is(false)); assertThat(configErrors.on(JobConfig.RUN_TYPE), is("Job cannot be set to 'run on all agents' when assigned to an elastic agent")); }
@Test public void shouldValidateAgainstSettingRunInstanceCountToIncorrectValue() { JobConfig jobConfig1 = new JobConfig(new CaseInsensitiveString("test")); jobConfig1.setRunInstanceCount(-1); jobConfig1.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); ConfigErrors configErrors1 = jobConfig1.errors(); assertThat(configErrors1.isEmpty(), is(false)); assertThat(configErrors1.on(JobConfig.RUN_TYPE), is("'Run Instance Count' cannot be a negative number as it represents number of instances Go needs to spawn during runtime.")); JobConfig jobConfig2 = new JobConfig(new CaseInsensitiveString("test")); ReflectionUtil.setField(jobConfig2, "runInstanceCount", "abcd"); jobConfig2.validate(ConfigSaveValidationContext.forChain(new BasicCruiseConfig())); ConfigErrors configErrors2 = jobConfig2.errors(); assertThat(configErrors2.isEmpty(), is(false)); assertThat(configErrors2.on(JobConfig.RUN_TYPE), is("'Run Instance Count' should be a valid positive integer as it represents number of instances Go needs to spawn during runtime.")); }