@Test public void shouldPopulateEnvironmentVariablesFromAttributeMap() { PipelineConfig pipelineConfig = new PipelineConfig(); HashMap map = new HashMap(); HashMap valueHashMap = new HashMap(); valueHashMap.put("name", "FOO"); valueHashMap.put("value", "BAR"); map.put(PipelineConfig.ENVIRONMENT_VARIABLES, valueHashMap); pipelineConfig.setVariables(mockEnvironmentVariablesConfig); pipelineConfig.setConfigAttributes(map); verify(mockEnvironmentVariablesConfig).setConfigAttributes(valueHashMap); }
@Test public void shouldPopulateParamsFromAttributeMapWhenConfigurationTypeIsNotSet() { PipelineConfig pipelineConfig = new PipelineConfig(); final HashMap map = new HashMap(); final HashMap valueHashMap = new HashMap(); valueHashMap.put("param-name", "FOO"); valueHashMap.put("param-value", "BAR"); map.put(PipelineConfig.PARAMS, valueHashMap); pipelineConfig.setParams(mockParamsConfig); pipelineConfig.setConfigAttributes(map); verify(mockParamsConfig).setConfigAttributes(valueHashMap); }
public static PipelineConfig createPipelineConfig(String pipelineName, MaterialConfigs materialConfigs, String... stageNames) { List<StageConfig> stages = new ArrayList<>(); for (String stageName : stageNames) { stages.add(com.thoughtworks.go.helper.StageConfigMother.twoBuildPlansWithResourcesAndMaterials(stageName)); } return new PipelineConfig(new CaseInsensitiveString(pipelineName), materialConfigs, stages.toArray(new StageConfig[0])); }
@Test public void shouldNotSetLockStatusOnPipelineConfigWhenValueIsNone() { Map configMap = new HashMap(); configMap.put(PipelineConfig.LOCK_BEHAVIOR, PipelineConfig.LOCK_VALUE_NONE); PipelineConfig pipelineConfig = new PipelineConfig(); pipelineConfig.setConfigAttributes(configMap); assertThat(pipelineConfig.isLockable(), is(false)); }
@Test public void shouldSetLockStatusOnPipelineConfigWhenValueIsUnlockWhenFinished() { Map configMap = new HashMap(); configMap.put(PipelineConfig.LOCK_BEHAVIOR, PipelineConfig.LOCK_VALUE_UNLOCK_WHEN_FINISHED); PipelineConfig pipelineConfig = new PipelineConfig(); pipelineConfig.setConfigAttributes(configMap); assertThat(pipelineConfig.isPipelineUnlockableWhenFinished(), is(true)); }
@Test public void shouldReturnFalseForIsUsedInFetchArtifact() { PackageMaterial material = new PackageMaterial(); assertThat(material.isUsedInFetchArtifact(new PipelineConfig()), is(false)); }
@Test public void isNotLockableWhenLockValueHasNotBeenSet() { PipelineConfig pipelineConfig = new PipelineConfig(); assertThat(pipelineConfig.hasExplicitLock(), is(false)); assertThat(pipelineConfig.isLockable(), is(false)); }
@Test public void shouldValidateName(){ ParamConfig paramConfig = new ParamConfig(); ValidationContext validationContext = mock(ValidationContext.class); when(validationContext.getPipeline()).thenReturn(new PipelineConfig(new CaseInsensitiveString("p"), null)); paramConfig.validateName(new HashMap<>(), validationContext); assertThat(paramConfig.errors().on(ParamConfig.NAME), is("Parameter cannot have an empty name for pipeline 'p'.")); }
@Test public void shouldSetIntegrationTypeToMingleInCaseAnEmptyMingleConfigIsSubmitted() { PipelineConfig pipelineConfig = new PipelineConfig(); MingleConfig mingleConfig = new MingleConfig(); mingleConfig.addError(MingleConfig.BASE_URL, "some error"); pipelineConfig.setMingleConfig(mingleConfig); String integrationType = pipelineConfig.getIntegrationType(); assertThat(integrationType, is(PipelineConfig.INTEGRATION_TYPE_MINGLE)); }
@Test public void shouldBombWhenAddingStagesIfItAlreadyHasATemplate() { PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("mingle"), null); try { pipelineConfig.setTemplateName(new CaseInsensitiveString("some-template")); pipelineConfig.add(StageConfigMother.stageConfig("second")); fail("Should throw exception because pipeline already has a template"); } catch (RuntimeException e) { assertThat(e.getMessage(), containsString("Cannot add stage 'second' to pipeline 'mingle', which already references template 'some-template'.")); } }
@Test public void shouldHaveBothMaterialsIfTheTypeIsDifferent() { SvnMaterialConfig svn = MaterialConfigsMother.svnMaterialConfig("url", "folder1", true); HgMaterialConfig hg = MaterialConfigsMother.hgMaterialConfig("url", "folder2"); PipelineConfig pipeline1 = new PipelineConfig(new CaseInsensitiveString("pipeline1"), new MaterialConfigs(svn)); PipelineConfig pipeline2 = new PipelineConfig(new CaseInsensitiveString("pipeline2"), new MaterialConfigs(hg)); CruiseConfig config = new BasicCruiseConfig(new BasicPipelineConfigs(pipeline1, pipeline2)); assertThat(config.getAllUniqueMaterialsBelongingToAutoPipelines().size(), is(2)); } }
@Test public void isValidProfileIdShouldBeValidInPresenceOfElasticProfile() { BasicCruiseConfig cruiseConfig = new BasicCruiseConfig(); ElasticConfig elasticConfig = new ElasticConfig(); elasticConfig.setProfiles(new ElasticProfiles(new ElasticProfile("docker.unit-test", "docker"))); cruiseConfig.setElasticConfig(elasticConfig); ValidationContext context = PipelineConfigSaveValidationContext.forChain(true, "group", cruiseConfig, new PipelineConfig()); assertTrue(context.isValidProfileId("docker.unit-test")); }
@Test public void shouldIncludeDependencyMaterialsFromManualPipelinesInSchedulableMaterials() { DependencyMaterialConfig dependencyMaterialConfig = MaterialConfigsMother.dependencyMaterialConfig(); PipelineConfig pipeline1 = new PipelineConfig(new CaseInsensitiveString("pipeline1"), new MaterialConfigs(dependencyMaterialConfig)); pipeline1.add(new StageConfig(new CaseInsensitiveString("manual-stage"), new JobConfigs(), new Approval())); CruiseConfig config = new BasicCruiseConfig(new BasicPipelineConfigs(pipeline1)); Set<MaterialConfig> materialConfigs = config.getAllUniqueMaterialsBelongingToAutoPipelines(); assertThat(materialConfigs.size(), is(1)); assertThat(materialConfigs.contains(dependencyMaterialConfig), is(true)); }
@Test public void shouldAddValidationErrorWhenAssociatedTemplateDoesNotExist() { PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("wunderbar"), new MaterialConfigs()); config.addPipeline("group", pipelineConfig); pipelineConfig.setTemplateName(new CaseInsensitiveString("does-not-exist")); pipelineConfig.validateTemplate(null); assertThat(pipelineConfig.errors().on("pipeline"), is("Pipeline 'wunderbar' refers to non-existent template 'does-not-exist'.")); }
@Test public void validate_shouldEnsureThatTemplateFollowsTheNameType() { PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("name"), new MaterialConfigs()); pipelineConfig.setTemplateName(new CaseInsensitiveString(".Name")); config.addPipeline("group", pipelineConfig); pipelineConfig.validateTemplate(new PipelineTemplateConfig()); assertThat(pipelineConfig.errors().isEmpty(), is(false)); assertThat(pipelineConfig.errors().on(PipelineConfig.TEMPLATE_NAME), is("Invalid template name '.Name'. This must be alphanumeric and can contain underscores and periods (however, it cannot start with a period). The maximum allowed length is 255 characters.")); }
private PipelineConfig createAndValidatePipelineLabel(String labelFormat) { GitMaterialConfig git = new GitMaterialConfig("git@github.com:gocd/gocd.git"); git.setName(new CaseInsensitiveString("git")); PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("cruise"), new MaterialConfigs(git)); pipelineConfig.setLabelTemplate(labelFormat); pipelineConfig.validate(null); return pipelineConfig; } }
@Test public void shouldHandleNullOriginDuringValidationWhenUpstreamStageDoesNotExist() { CruiseConfig cruiseConfig = GoConfigMother.pipelineHavingJob("upstream_pipeline", "upstream_stage", "j1", null, null); DependencyMaterialConfig dependencyMaterialConfig = new DependencyMaterialConfig(new CaseInsensitiveString("upstream_pipeline"), new CaseInsensitiveString("does_not_exist")); PipelineConfig pipeline = new PipelineConfig(new CaseInsensitiveString("downstream"), new MaterialConfigs()); pipeline.setOrigin(null); dependencyMaterialConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", cruiseConfig, pipeline)); assertThat(dependencyMaterialConfig.errors().on(DependencyMaterialConfig.PIPELINE_STAGE_NAME), is("Stage with name 'does_not_exist' does not exist on pipeline 'upstream_pipeline', it is being referred to from pipeline 'downstream' (cruise-config.xml)")); }
@Test public void shouldHandleNullOriginDuringValidationWhenUpstreamPipelineDoesNotExist() { DependencyMaterialConfig dependencyMaterialConfig = new DependencyMaterialConfig(new CaseInsensitiveString("upstream_stage"), new CaseInsensitiveString("upstream_pipeline"), new CaseInsensitiveString("stage")); PipelineConfig pipeline = new PipelineConfig(new CaseInsensitiveString("p"), new MaterialConfigs()); pipeline.setOrigin(null); dependencyMaterialConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new BasicCruiseConfig(), pipeline)); assertThat(dependencyMaterialConfig.errors().on(DependencyMaterialConfig.PIPELINE_STAGE_NAME), is("Pipeline with name 'upstream_pipeline' does not exist, it is defined as a dependency for pipeline 'p' (cruise-config.xml)")); }
@Test public void shouldCreateAStageInstanceThroughInstanceFactory() { PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("cruise"), new MaterialConfigs(), new StageConfig(new CaseInsensitiveString("first"), new JobConfigs(new JobConfig("job1"), new JobConfig("job2")))); Stage actualStage = instanceFactory.createStageInstance(pipelineConfig, new CaseInsensitiveString("first"), new DefaultSchedulingContext(), "md5", clock); JobInstances jobInstances = new JobInstances(); jobInstances.add(new JobInstance("job1", clock)); jobInstances.add(new JobInstance("job2", clock)); Stage expectedStage = new Stage("first", jobInstances, "Unknown", null, Approval.SUCCESS, clock); assertThat(actualStage, is(expectedStage)); }
@Test public void shouldGetDependenciesAsNode() throws Exception { PipelineConfig pipelineConfig = new PipelineConfig(); pipelineConfig.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("framework"), new CaseInsensitiveString("dev"))); pipelineConfig.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("middleware"), new CaseInsensitiveString("dev"))); assertThat(pipelineConfig.getDependenciesAsNode(), is(new Node( new Node.DependencyNode(new CaseInsensitiveString("framework"), new CaseInsensitiveString("dev")), new Node.DependencyNode(new CaseInsensitiveString("middleware"), new CaseInsensitiveString("dev"))))); }