@Override public MaterialConfig config() { return new PluggableSCMMaterialConfig(name, scmConfig, folder, filter); }
public PluggableSCMMaterialConfig getSCMMaterial() { return getExistingOrDefaultMaterial(new PluggableSCMMaterialConfig()); }
@Test public void shouldAddErrorWhenAssociatedSCMPluginIsMissing() throws Exception { PipelineConfigSaveValidationContext configSaveValidationContext = mock(PipelineConfigSaveValidationContext.class); when(configSaveValidationContext.findScmById(anyString())).thenReturn(mock(SCM.class)); SCM scmConfig = mock(SCM.class); when(scmConfig.doesPluginExist()).thenReturn(false); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(null, scmConfig, "usr/home", null); pluggableSCMMaterialConfig.setScmId("scm-id"); pluggableSCMMaterialConfig.validateTree(configSaveValidationContext); assertThat(pluggableSCMMaterialConfig.errors().getAll().size(), is(1)); assertThat(pluggableSCMMaterialConfig.errors().on(PluggableSCMMaterialConfig.SCM_ID), is("Could not find plugin for scm-id: [scm-id].")); }
@Test public void shouldDelegateToSCMConfigForAutoUpdate() throws Exception { SCM scm = mock(SCM.class); when(scm.isAutoUpdate()).thenReturn(false); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(new CaseInsensitiveString("scm-name"), scm, null, null); assertThat(pluggableSCMMaterialConfig.isAutoUpdate(), is(false)); verify(scm).isAutoUpdate(); }
@Test public void shouldAddErrorWhenMatchingScmConfigDoesNotExist() throws Exception { PipelineConfigSaveValidationContext validationContext = mock(PipelineConfigSaveValidationContext.class); when(validationContext.findScmById(anyString())).thenReturn(null); SCM scmConfig = mock(SCM.class); when(scmConfig.doesPluginExist()).thenReturn(true); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(null, scmConfig, "usr/home", null); pluggableSCMMaterialConfig.setScmId("scm-id"); pluggableSCMMaterialConfig.validateTree(validationContext); assertThat(pluggableSCMMaterialConfig.errors().getAll().size(), is(1)); assertThat(pluggableSCMMaterialConfig.errors().on(PluggableSCMMaterialConfig.SCM_ID), is("Could not find SCM for given scm-id: [scm-id].")); }
private PluggableSCMMaterialConfig toPluggableScmMaterialConfig(CRPluggableScmMaterial crPluggableScmMaterial) { SCMs scms = getSCMs(); String id = crPluggableScmMaterial.getScmId(); SCM scmConfig = scms.find(id); if (scmConfig == null) throw new ConfigConvertionException( String.format("Failed to find referenced scm '%s'", id)); return new PluggableSCMMaterialConfig(toMaterialName(crPluggableScmMaterial.getName()), scmConfig, crPluggableScmMaterial.getDirectory(), toFilter(crPluggableScmMaterial.getFilterList())); }
@Test public void shouldPassMaterialUniquenessIfIfNoDuplicateSCMFound() throws Exception { Map<CaseInsensitiveString, AbstractMaterialConfig> nameToMaterialMap = new HashMap<>(); nameToMaterialMap.put(new CaseInsensitiveString("scm-id-new"), new PluggableSCMMaterialConfig("scm-id-new")); nameToMaterialMap.put(new CaseInsensitiveString("foo"), new GitMaterialConfig("url")); pluggableSCMMaterialConfig.validateNameUniqueness(nameToMaterialMap); assertThat(pluggableSCMMaterialConfig.errors().getAll().size(), is(0)); assertThat(nameToMaterialMap.size(), is(3)); }
@Test public void shouldCorrectlyGet_Name_DisplayName_Description_LongDescription_UriForDisplay() { SCM scmConfig = mock(SCM.class); when(scmConfig.getName()).thenReturn("scm-name"); when(scmConfig.getConfigForDisplay()).thenReturn("k1:v1"); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(null, scmConfig, null, null); assertThat(pluggableSCMMaterialConfig.getName(), is(new CaseInsensitiveString("scm-name"))); assertThat(pluggableSCMMaterialConfig.getDisplayName(), is("scm-name")); assertThat(pluggableSCMMaterialConfig.getLongDescription(), is("k1:v1")); assertThat(pluggableSCMMaterialConfig.getUriForDisplay(), is("k1:v1")); when(scmConfig.getName()).thenReturn(null); pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(null, scmConfig, null, null); assertThat(pluggableSCMMaterialConfig.getName(), is(nullValue())); assertThat(pluggableSCMMaterialConfig.getDisplayName(), is("k1:v1")); }
@Before public void setUp() throws IOException { pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig("scm-id"); SCMMetadataStore.getInstance().clear(); }
@Test public void shouldGetPluggableSCMMaterialConfigs() throws Exception { SvnMaterialConfig svn = new SvnMaterialConfig("svn", false); PluggableSCMMaterialConfig pluggableSCMMaterialOne = new PluggableSCMMaterialConfig("scm-id-1"); PluggableSCMMaterialConfig pluggableSCMMaterialTwo = new PluggableSCMMaterialConfig("scm-id-2"); PipelineConfig pipelineConfig = PipelineConfigMother.pipelineConfig("p1", new MaterialConfigs(svn, pluggableSCMMaterialOne, pluggableSCMMaterialTwo)); List<PluggableSCMMaterialConfig> pluggableSCMMaterialConfigs = pipelineConfig.pluggableSCMMaterialConfigs(); assertThat(pluggableSCMMaterialConfigs.size(), is(2)); assertThat(pluggableSCMMaterialConfigs, hasItems(pluggableSCMMaterialOne, pluggableSCMMaterialTwo)); }
public static PluggableSCMMaterialConfig fromJSON(JsonReader jsonReader, ConfigHelperOptions options) { PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(); CruiseConfig cruiseConfig = options.getCruiseConfig(); if (cruiseConfig != null) { String ref = jsonReader.getString("ref"); pluggableSCMMaterialConfig.setSCMConfig(cruiseConfig.getSCMs().find(ref)); pluggableSCMMaterialConfig.setScmId(ref); } jsonReader.readStringIfPresent("destination", pluggableSCMMaterialConfig::setFolder); jsonReader.optJsonObject("filter").ifPresent(filterReader -> { pluggableSCMMaterialConfig.setFilter(FilterRepresenter.fromJSON(filterReader)); }); return pluggableSCMMaterialConfig; } }
@Test public void shouldAddErrorIfSCMNameUniquenessValidationFails() throws Exception { Map<CaseInsensitiveString, AbstractMaterialConfig> nameToMaterialMap = new HashMap<>(); PluggableSCMMaterialConfig existingMaterial = new PluggableSCMMaterialConfig("scm-id"); nameToMaterialMap.put(new CaseInsensitiveString("scm-id"), existingMaterial); nameToMaterialMap.put(new CaseInsensitiveString("foo"), new GitMaterialConfig("url")); pluggableSCMMaterialConfig.validateNameUniqueness(nameToMaterialMap); assertThat(pluggableSCMMaterialConfig.errors().getAll().size(), is(1)); assertThat(pluggableSCMMaterialConfig.errors().on(PluggableSCMMaterialConfig.SCM_ID), is("Duplicate SCM material detected!")); assertThat(existingMaterial.errors().getAll().size(), is(1)); assertThat(existingMaterial.errors().on(PluggableSCMMaterialConfig.SCM_ID), is("Duplicate SCM material detected!")); assertThat(nameToMaterialMap.size(), is(2)); }
@Test public void shouldGetExistingOrDefaultPluggableSCMMaterialCorrectly() { SvnMaterialConfig svn = new SvnMaterialConfig("http://test.com", false); PluggableSCMMaterialConfig pluggableSCMMaterialOne = new PluggableSCMMaterialConfig("scm-id-1"); PluggableSCMMaterialConfig pluggableSCMMaterialTwo = new PluggableSCMMaterialConfig("scm-id-2"); assertThat(new MaterialConfigs(svn, pluggableSCMMaterialTwo).getExistingOrDefaultMaterial(pluggableSCMMaterialOne).getScmId(), is("scm-id-2")); assertThat(new MaterialConfigs(svn).getExistingOrDefaultMaterial(pluggableSCMMaterialOne).getScmId(), is("scm-id-1")); }
@Test public void shouldSetConfigAttributesForSCMMaterial() throws Exception { Map<String, String> attributes = new HashMap<>(); attributes.put(PluggableSCMMaterialConfig.SCM_ID, "scm-id"); attributes.put(PluggableSCMMaterialConfig.FOLDER, "dest"); attributes.put(PluggableSCMMaterialConfig.FILTER, "/foo/**.*,/another/**.*,bar"); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(); pluggableSCMMaterialConfig.setConfigAttributes(attributes); assertThat(pluggableSCMMaterialConfig.getScmId(), is("scm-id")); assertThat(pluggableSCMMaterialConfig.getFolder(), is("dest")); assertThat(pluggableSCMMaterialConfig.filter(), is(new Filter(new IgnoredFiles("/foo/**.*"), new IgnoredFiles("/another/**.*"), new IgnoredFiles("bar")))); }
@Test public void shouldGetNameFromSCMName() { PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(); SCM scmConfig = SCMMother.create("scm-id", "scm-name", "plugin-id", "1.0", new Configuration(create("k1", false, "v1"))); pluggableSCMMaterialConfig.setSCMConfig(scmConfig); assertThat(pluggableSCMMaterialConfig.getName().toString(), is("scm-name")); pluggableSCMMaterialConfig.setSCMConfig(null); assertThat(pluggableSCMMaterialConfig.getName(), is(nullValue())); }
@Test public void shouldDecideIfPluggableSCMMaterialCanBeDeleted_BasedOnPluggableSCMMaterialBeingUsedByPipelines() throws Exception { SCM scmConfigOne = SCMMother.create("scm-id-1"); SCM scmConfigTwo = SCMMother.create("scm-id-2"); cruiseConfig.getSCMs().addAll(Arrays.asList(scmConfigOne, scmConfigTwo)); PipelineConfig pipeline = PipelineConfigMother.pipelineConfig("pipeline"); pipeline.addMaterialConfig(new PluggableSCMMaterialConfig(null, scmConfigOne, null, null)); cruiseConfig.addPipeline("existing_group", pipeline); assertThat(cruiseConfig.canDeletePluggableSCMMaterial(scmConfigOne), is(false)); assertThat(cruiseConfig.canDeletePluggableSCMMaterial(scmConfigTwo), is(true)); }
@Test public void shouldCheckSCMMaterialsHaveDestinationCorrectly() { HgMaterialConfig materialConfigOne = new HgMaterialConfig("http://url1", null); materialConfigOne.setConfigAttributes(Collections.singletonMap(ScmMaterialConfig.FOLDER, "folder")); CruiseConfig config = GoConfigMother.configWithPipelines("one"); PipelineConfig pipelineOne = config.pipelineConfigByName(new CaseInsensitiveString("one")); pipelineOne.setMaterialConfigs((new MaterialConfigs(materialConfigOne))); assertThat(pipelineOne.materialConfigs().scmMaterialsHaveDestination(), is(true)); PluggableSCMMaterialConfig materialConfigTwo = new PluggableSCMMaterialConfig(null, SCMMother.create("scm-id"), null, null); pipelineOne.materialConfigs().add(materialConfigTwo); assertThat(pipelineOne.materialConfigs().scmMaterialsHaveDestination(), is(false)); }
@Test public void shouldGetFilterAsString() { PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(); pluggableSCMMaterialConfig.setFilter(new Filter(new IgnoredFiles("/foo/**.*"), new IgnoredFiles("/another/**.*"), new IgnoredFiles("bar"))); assertThat(pluggableSCMMaterialConfig.getFilterAsString(), is("/foo/**.*,/another/**.*,bar")); pluggableSCMMaterialConfig.setFilter(new Filter()); assertThat(pluggableSCMMaterialConfig.getFilterAsString(), is("")); }
public static PluggableSCMMaterialConfig pluggableSCMMaterialConfigWithConfigProperties(String... properties) { SCM scmConfig = SCMMother.create("scm-id"); Configuration configuration = new Configuration(); for (String property : properties) { ConfigurationProperty configurationProperty = new ConfigurationProperty(new ConfigurationKey(property), new ConfigurationValue(property+"-value")); configuration.add(configurationProperty); } scmConfig.setConfiguration(configuration); return new PluggableSCMMaterialConfig(null, scmConfig, "des-folder", null); }
@Test public void shouldAddErrorWhenMatchingScmConfigDoesNotExist(){ PluggableSCMMaterialConfig scmMaterialConfig = new PluggableSCMMaterialConfig(null, SCMMother.create("scm-id"), null, null); PackageMaterialConfig packageMaterialConfig = new PackageMaterialConfig(new CaseInsensitiveString("package-name"), "package-id", PackageDefinitionMother.create("package-id")); CruiseConfig config = GoConfigMother.configWithPipelines("one"); PipelineConfig pipelineConfig = config.pipelineConfigByName(new CaseInsensitiveString("one")); MaterialConfigs materialConfigs = new MaterialConfigs(scmMaterialConfig,packageMaterialConfig); pipelineConfig.setMaterialConfigs(materialConfigs); materialConfigs.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", config)); assertThat(pipelineConfig.materialConfigs().get(0).errors().on(scmMaterialConfig.SCM_ID), is("Could not find SCM for given scm-id: [scm-id].")); }