@Override protected void updateConfig(CruiseConfig cruiseConfig) { PackageDefinition packageDefinition = createNewPackageDefinition(cruiseConfig); packageMaterialConfig.setPackageDefinition(packageDefinition); PipelineConfig pipelineConfig = cruiseConfig.pipelineConfigByName(new CaseInsensitiveString(pipeline)); pipelineConfig.addMaterialConfig(packageMaterialConfig); } }
@Override protected void updateConfig(CruiseConfig cruiseConfig) { PackageDefinition packageDefinition = getPackageDefinition(cruiseConfig); packageMaterialConfig.setPackageDefinition(packageDefinition); PipelineConfig pipelineConfig = cruiseConfig.pipelineConfigByName(new CaseInsensitiveString(pipeline)); pipelineConfig.addMaterialConfig(packageMaterialConfig); } }
@Test public void shouldReturnMaterialBasedOnPiplineUniqueFingerPrint() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); PipelineConfig pipeline1 = goConfigMother.addPipeline(cruiseConfig, "pipeline1", "stage", "build"); HgMaterialConfig expectedMaterial = MaterialConfigsMother.hgMaterialConfig(); pipeline1.addMaterialConfig(expectedMaterial); pipeline1.addMaterialConfig(MaterialConfigsMother.gitMaterialConfig("url")); pipeline1.addMaterialConfig(MaterialConfigsMother.svnMaterialConfig("url", "folder")); MaterialConfig actualMaterialConfig = pipeline1.materialConfigs().getByFingerPrint(expectedMaterial.getPipelineUniqueFingerprint()); assertThat(actualMaterialConfig, is(expectedMaterial)); }
@Test public void shouldReturnListOfStageConfigWhichIsApplicableForFetchArtifact() { PipelineConfig superUpstream = PipelineConfigMother.createPipelineConfigWithStages("superUpstream", "s1", "s2", "s3"); PipelineConfig upstream = PipelineConfigMother.createPipelineConfigWithStages("upstream", "s4", "s5", "s6"); upstream.addMaterialConfig(new DependencyMaterialConfig(superUpstream.name(), new CaseInsensitiveString("s2"))); PipelineConfig downstream = PipelineConfigMother.createPipelineConfigWithStages("downstream", "s7"); downstream.addMaterialConfig(new DependencyMaterialConfig(upstream.name(), new CaseInsensitiveString("s5"))); List<StageConfig> fetchableStages = upstream.validStagesForFetchArtifact(downstream, new CaseInsensitiveString("s7")); assertThat(fetchableStages.size(), is(2)); assertThat(fetchableStages, hasItem(upstream.get(0))); assertThat(fetchableStages, hasItem(upstream.get(1))); }
@Test public void isValid_shouldAllowColonForLabelTemplate() { pipeline.addMaterialConfig(new PackageMaterialConfig(new CaseInsensitiveString("repo:name"), "package-id", PackageDefinitionMother.create("package-id"))); assertLabelTemplate("pipeline-${COUNT}-${repo:name}", Assert::assertNull); }
@Test public void shouldNotIncludePackageMaterialsWithAutoUpdateFalse() { PipelineConfig pipeline1 = pipelineWithManyMaterials(false); pipeline1.addMaterialConfig(getPackageMaterialConfigWithAutoUpdateFalse()); pipeline1.addMaterialConfig(getPackageMaterialConfigWithAutoUpdateTrue()); pipeline1.add(new StageConfig(new CaseInsensitiveString("manual-stage"), new JobConfigs(), new Approval())); CruiseConfig config = new BasicCruiseConfig(new BasicPipelineConfigs(pipeline1)); assertThat(config.getAllUniqueMaterialsBelongingToAutoPipelines().size(), is(4)); }
@Test public void shouldAllowMultipleDependenciesForDifferentPipelines() { pipeline.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("pipeline2"), new CaseInsensitiveString("stage"))); pipeline.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("pipeline3"), new CaseInsensitiveString("stage"))); pipeline.validate(null); assertThat(pipeline.errors().isEmpty(), is(true)); }
@Test public void shouldNotAllowAnEmptyView() { CruiseConfig config = GoConfigMother.configWithPipelines("pipeline1"); P4MaterialConfig materialConfig = new P4MaterialConfig("localhost:1666", ""); PipelineConfig pipelineConfig = config.pipelineConfigByName(new CaseInsensitiveString("pipeline1")); pipelineConfig.addMaterialConfig(materialConfig); materialConfig.validate(null); assertThat(materialConfig.errors().on("view"), is("P4 view cannot be empty.")); }
@Test public void shouldRemoveScopeWhenMaterialIsRemovedFromConfig() throws Exception { HgMaterialConfig hgMaterialConfig = MaterialConfigsMother.hgMaterialConfig(); CruiseConfig config = GoConfigMother.pipelineHavingJob("blahPipeline", "blahStage", "blahJob", "fii", "baz"); config.pipelineConfigByName(new CaseInsensitiveString("blahPipeline")).addMaterialConfig(hgMaterialConfig); assertThat(HealthStateScope.forMaterialConfig(hgMaterialConfig).isRemovedFromConfig(config),is(false)); assertThat(HealthStateScope.forMaterial(MaterialsMother.svnMaterial("file:///bar")).isRemovedFromConfig(config),is(true)); }
public void setDependencyOn(CruiseConfig cruiseConfig, PipelineConfig pipelineConfig, String dependsOnPipeline, String dependsOnStage) { PipelineConfig config = cruiseConfig.pipelineConfigByName(pipelineConfig.name()); config.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString(dependsOnPipeline), new CaseInsensitiveString(dependsOnStage))); }
@Test public void shouldBeValidIfTheReferencedPipelineExists() { pipeline.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("pipeline2"), new CaseInsensitiveString("stage"))); pipeline.validate(null); assertThat(pipeline.errors().isEmpty(), is(true)); }
@Test public void shouldAllowDependenciesFromMultiplePipelinesToTheSamePipeline() { pipeline.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("pipeline2"), new CaseInsensitiveString("stage"))); PipelineConfig pipeline3 = config.pipelineConfigByName(new CaseInsensitiveString("pipeline3")); pipeline3.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString("pipeline2"), new CaseInsensitiveString("stage"))); pipeline.validate(null); assertThat(pipeline.errors().isEmpty(), is(true)); pipeline3.validate(null); assertThat(pipeline3.errors().isEmpty(), is(true)); }
@Test public void shouldResolveInheritedAttributes() throws NoSuchFieldException { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("cruise", "dev", "ant"); HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig(); materialConfig.setConfigAttributes(Collections.singletonMap(ScmMaterialConfig.FOLDER, "work/#{foo}/#{bar}/baz")); pipelineConfig.addMaterialConfig(materialConfig); new ParamResolver(new ParamSubstitutionHandlerFactory(params(param("foo", "pavan"), param("bar", "jj"))), fieldCache).resolve(pipelineConfig); assertThat(pipelineConfig.materialConfigs().get(1).getFolder(), is("work/pavan/jj/baz")); }
private void setDepedencyOn(CruiseConfig cruiseConfig, String toPipeline, String upstreamPipeline, String upstreamStage) { PipelineConfig targetPipeline = cruiseConfig.pipelineConfigByName(new CaseInsensitiveString(toPipeline)); targetPipeline.materialConfigs().clear(); targetPipeline.addMaterialConfig(new DependencyMaterialConfig(new CaseInsensitiveString(upstreamPipeline), new CaseInsensitiveString(upstreamStage))); }
@Test public void shouldResolveCollections() throws NoSuchFieldException { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("cruise", "dev", "ant"); pipelineConfig.setLabelTemplate("2.1-${COUNT}-#{foo}-bar-#{bar}"); HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig("http://#{foo}.com/#{bar}"); pipelineConfig.addMaterialConfig(materialConfig); new ParamResolver(new ParamSubstitutionHandlerFactory(params(param("foo", "pavan"), param("bar", "jj"))), fieldCache).resolve(pipelineConfig); assertThat(pipelineConfig.getLabelTemplate(), is("2.1-${COUNT}-pavan-bar-jj")); assertThat(pipelineConfig.materialConfigs().get(1).getUriForDisplay(), is("http://pavan.com/jj")); }
@Test public void isValid_shouldMatchMaterialNamesInACaseInsensitiveManner() { ScmMaterialConfig gitMaterialConfig = MaterialConfigsMother.gitMaterialConfig("git://url"); gitMaterialConfig.setName(new CaseInsensitiveString("mygit")); pipeline.addMaterialConfig(gitMaterialConfig); assertLabelTemplate("pipeline-${count}-${myGit}", errors -> { assertTrue(pipeline.errors().isEmpty()); assertNull(errors); }); }
@Test public void isValid_shouldEnsureReturnsTrueWhenLabelTemplateRefersToValidMaterials() { GitMaterialConfig gitConfig = MaterialConfigsMother.gitMaterialConfig("git://url"); gitConfig.setName(new CaseInsensitiveString("myGit")); pipeline.addMaterialConfig(gitConfig); assertLabelTemplate("pipeline-${COUNT}-${myGit}", errors -> { assertTrue(pipeline.errors().isEmpty()); assertNull(errors); }); }
@Test public void shouldResolveInMergePipelineConfigs() throws NoSuchFieldException { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("cruise", "dev", "ant"); pipelineConfig.setLabelTemplate("2.1-${COUNT}-#{foo}-bar-#{bar}"); HgMaterialConfig materialConfig = MaterialConfigsMother.hgMaterialConfig("http://#{foo}.com/#{bar}"); pipelineConfig.addMaterialConfig(materialConfig); MergePipelineConfigs merge = new MergePipelineConfigs(new BasicPipelineConfigs(),new BasicPipelineConfigs(pipelineConfig)); new ParamResolver(new ParamSubstitutionHandlerFactory(params(param("foo", "pavan"), param("bar", "jj"))), fieldCache).resolve(merge); assertThat(pipelineConfig.getLabelTemplate(), is("2.1-${COUNT}-pavan-bar-jj")); assertThat(pipelineConfig.materialConfigs().get(1).getUriForDisplay(), is("http://pavan.com/jj")); }
@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"))))); }
@Test public void shouldNotThrowUpWhenTfsWorkspaceIsNotSpecified() { CruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("tfs_pipeline"); PipelineConfig tfs_pipeline = cruiseConfig.pipelineConfigByName(new CaseInsensitiveString("tfs_pipeline")); tfs_pipeline.materialConfigs().clear(); tfs_pipeline.addMaterialConfig(new TfsMaterialConfig(new GoCipher(), new UrlArgument("http://tfs.com"), "username", "CORPORATE", "password", "$/project_path")); try { xmlWriter.write(cruiseConfig, output, false); } catch (Exception e) { fail("should not fail as workspace name is not mandatory anymore " + e); } }