@Test public void validateTree_shouldValidateTheMaterialConfig() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); MaterialConfig materialConfig = mock(MaterialConfig.class); when(materialConfig.errors()).thenReturn(new ConfigErrors()); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(materialConfig, "plug"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig)); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(cruiseConfig); configRepoConfig.validateTree(validationContext); verify(materialConfig).validateTree(validationContext); }
@Test public void validateTree_configRepoShouldBeInvalidIfMaterialConfigHasErrors() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); MaterialConfig materialConfig = mock(MaterialConfig.class); when(materialConfig.errors()).thenReturn(new ConfigErrors()); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(materialConfig, "plug", "id"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig)); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(cruiseConfig); assertFalse(configRepoConfig.validateTree(validationContext)); assertTrue(configRepoConfig.errors().isEmpty()); assertFalse(configRepoConfig.getMaterialConfig().errors().isEmpty()); }
@Test public void validate_shouldCheckUniquenessOfId() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); ConfigRepoConfig configRepoConfig1 = new ConfigRepoConfig(null,"plug", "id_1"); ConfigRepoConfig configRepoConfig2 = new ConfigRepoConfig(null,"plug", "id_1"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig1, configRepoConfig2)); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(cruiseConfig); configRepoConfig1.validate(validationContext); assertThat(configRepoConfig1.errors().isEmpty(),is(false)); assertThat(configRepoConfig1.errors().on("id"), is("You have defined multiple configuration repositories with the same id - 'id_1'.")); }
public static CruiseConfig configWithConfigRepo() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); cruiseConfig.setConfigRepos(new ConfigReposConfig(new ConfigRepoConfig( new GitMaterialConfig("https://github.com/tomzo/gocd-indep-config-part.git"), "myplugin", "id2" ))); return cruiseConfig; }
@Test public void shouldUpdatePipelineConfigsListWhenAPartialIsMerged(){ cruiseConfig = new BasicCruiseConfig(pipelines); PartialConfig partial = PartialConfigMother.withPipeline("pipeline3"); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(new GitMaterialConfig("http://git"), "myplug"); partial.setOrigins(new RepoConfigOrigin(configRepoConfig,"123")); ConfigReposConfig reposConfig = new ConfigReposConfig(); reposConfig.add(configRepoConfig); cruiseConfig.setConfigRepos(reposConfig); cruiseConfig.merge(Arrays.asList(partial), false); PipelineConfig pipeline3 = partial.getGroups().first().findBy(new CaseInsensitiveString("pipeline3")); assertThat(cruiseConfig.getAllPipelineConfigs().contains(pipeline3), is(true)); assertThat(cruiseConfig.getAllPipelineNames().contains(pipeline3.name()), is(true)); } }
@Test public void validate_shouldCheckUniquenessOfMaterial() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); SvnMaterialConfig svn = new SvnMaterialConfig("url", false); ConfigRepoConfig configRepoConfig1 = new ConfigRepoConfig(svn,"plug", "id_1"); ConfigRepoConfig configRepoConfig2 = new ConfigRepoConfig(svn,"plug", "id_2"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig1, configRepoConfig2)); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(cruiseConfig); configRepoConfig1.validate(validationContext); assertThat(configRepoConfig1.errors().isEmpty(),is(false)); assertThat(configRepoConfig1.errors().on("material"), is("You have defined multiple configuration repositories with the same repository - 'url'.")); }
@Test public void validate_shouldNotAllowDisabledAutoUpdate() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); SvnMaterialConfig svn = new SvnMaterialConfig("url", false); svn.setAutoUpdate(false); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(svn,"plug"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig)); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(cruiseConfig); configRepoConfig.validate(validationContext); assertThat(svn.errors().isEmpty(),is(false)); assertThat(svn.errors().on("autoUpdate"), is("Configuration repository material 'url' must have autoUpdate enabled.")); }
@Test public void validate_shouldValidateTheMaterialConfig() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); GitMaterialConfig materialConfig = new GitMaterialConfig(null, "master"); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(materialConfig, "plug"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig)); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(cruiseConfig); configRepoConfig.validate(validationContext); assertThat(configRepoConfig.getMaterialConfig().errors().on("url"), is("URL cannot be blank")); }
@Test public void getAllUniquePostCommitSchedulableMaterials_shouldReturnMaterialsWithAutoUpdateFalseAndConfigRepos() { GitMaterialConfig gitAutoMaterial = MaterialConfigsMother.gitMaterialConfig("url"); PipelineConfig pipelineAuto = pipelineConfig("pipelineAuto", new MaterialConfigs(gitAutoMaterial)); GitMaterialConfig gitNonAutoMaterial = new GitMaterialConfig(new UrlArgument("other-url"), "master", "dest", false, null, false, null, new CaseInsensitiveString("git"), false); PipelineConfig pipelineTriggerable = pipelineConfig("pipelineTriggerable", new MaterialConfigs(gitNonAutoMaterial)); PipelineConfigs defaultGroup = createGroup("defaultGroup", pipelineAuto, pipelineTriggerable); cruiseConfig = new BasicCruiseConfig(defaultGroup); ConfigReposConfig reposConfig = new ConfigReposConfig(); GitMaterialConfig configRepoMaterial = new GitMaterialConfig("http://git"); reposConfig.add(new ConfigRepoConfig(configRepoMaterial, "myplug")); cruiseConfig.setConfigRepos(reposConfig); PipelineGroups pipelineGroups = new PipelineGroups(defaultGroup); Set<MaterialConfig> materials = cruiseConfig.getAllUniquePostCommitSchedulableMaterials(); assertThat(materials.size(), is(2)); assertThat(materials, hasItem(gitNonAutoMaterial)); assertThat(materials, hasItem(configRepoMaterial)); }
@Test public void getAllLocalPipelineConfigs_shouldExcludePipelinesReferencedByRemoteEnvironmentWhenRequested() { pipelines = new BasicPipelineConfigs("group_main", new Authorization(), PipelineConfigMother.pipelineConfig("local-pipeline-1")); cruiseConfig = new BasicCruiseConfig(pipelines); ConfigReposConfig reposConfig = new ConfigReposConfig(); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(new GitMaterialConfig("http://git"), "myplug"); reposConfig.add(configRepoConfig); cruiseConfig.setConfigRepos(reposConfig); PartialConfig partialConfig = PartialConfigMother.withPipelineInGroup("remote-pipeline-1", "g2"); BasicEnvironmentConfig remoteEnvironment = new BasicEnvironmentConfig(new CaseInsensitiveString("UAT")); remoteEnvironment.setOrigins(new RepoConfigOrigin()); // remote environment declares a local pipeline as member remoteEnvironment.addPipeline(new CaseInsensitiveString("local-pipeline-1")); partialConfig.getEnvironments().add(remoteEnvironment); partialConfig.setOrigins(new RepoConfigOrigin(configRepoConfig,"123")); cruiseConfig.merge(Arrays.asList(partialConfig),true); assertThat(cruiseConfig.hasPipelineNamed(new CaseInsensitiveString("local-pipeline-1")),is(true)); List<PipelineConfig> localPipelines = cruiseConfig.getAllLocalPipelineConfigs(true); assertThat(localPipelines.size(),is(0)); }
@Test public void validate_shouldNotAllowPipelineWithSameRepositoryAndDisabledAutoUpdate() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); GoConfigMother mother = new GoConfigMother(); MaterialConfigs materialConfigs = new MaterialConfigs(); SvnMaterialConfig svnInConfigRepo = new SvnMaterialConfig("url", false); SvnMaterialConfig svnInPipelineConfig = new SvnMaterialConfig("url", false); svnInConfigRepo.setAutoUpdate(true); svnInPipelineConfig.setAutoUpdate(false); materialConfigs.add(svnInPipelineConfig); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(svnInConfigRepo,"plug"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig)); PipelineConfig pipeline1 = mother.addPipeline(cruiseConfig, "badpipe", "build", materialConfigs, "build"); configRepoConfig.validate(ConfigSaveValidationContext.forChain(cruiseConfig, new BasicPipelineConfigs(), pipeline1)); assertThat(svnInConfigRepo.errors().isEmpty(),is(false)); assertThat(svnInConfigRepo.errors().on("autoUpdate"), is("Material of type Subversion (url) is specified as a configuration repository and pipeline material with disabled autoUpdate. All copies of this material must have autoUpdate enabled or configuration repository must be removed")); }