private void setDestination(MaterialConfig repoMaterial, String destination) { if (repoMaterial instanceof ScmMaterialConfig) { ((ScmMaterialConfig) repoMaterial).setFolder(destination); } else if (repoMaterial instanceof PluggableSCMMaterialConfig) { ((PluggableSCMMaterialConfig) repoMaterial).setFolder(destination); } else LOGGER.warn("Unknown material type {}", repoMaterial.getTypeForDisplay()); }
@Test public void shouldNotValidateNestingOfMaterialDirectoriesBasedOnServerSideFileSystem() throws IOException { final File workingDir = temporaryFolder.newFolder("go-working-dir"); final File material1 = new File(workingDir, "material1"); material1.mkdirs(); final Path material2 = Files.createSymbolicLink(Paths.get(new File(workingDir, "material2").getPath()), Paths.get(material1.getPath())); pluggableSCMMaterialConfig.setFolder(material1.getAbsolutePath()); pluggableSCMMaterialConfig.validateNotSubdirectoryOf(material2.toAbsolutePath().toString()); assertNull(pluggableSCMMaterialConfig.errors().getAllOn(FOLDER)); } }
@Test public void shouldFailValidationIfDestinationDirectoryIsNestedAfterNormalization() { pluggableSCMMaterialConfig.setFolder("f1/f2/../../f3"); pluggableSCMMaterialConfig.validateNotSubdirectoryOf("f3/f4"); Assert.assertThat(pluggableSCMMaterialConfig.errors().on(FOLDER), is("Invalid Destination Directory. Every material needs a different destination directory and the directories should not be nested.")); }
@Test public void shouldFailValidationIfDestinationDirectoryIsOutsideCurrentWorkingDirectoryAfterNormalization() { pluggableSCMMaterialConfig.setFolder("f1/../../f3"); pluggableSCMMaterialConfig.validateConcreteMaterial(null); Assert.assertThat(pluggableSCMMaterialConfig.errors().on(FOLDER), is("Dest folder 'f1/../../f3' is not valid. It must be a sub-directory of the working folder.")); }
@Test public void shouldSetConfigAttributesForSCMMaterialWhenDataIsEmpty() throws Exception { Map<String, String> attributes = new HashMap<>(); attributes.put(PluggableSCMMaterialConfig.SCM_ID, "scm-id"); attributes.put(PluggableSCMMaterialConfig.FOLDER, ""); attributes.put(PluggableSCMMaterialConfig.FILTER, ""); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(); pluggableSCMMaterialConfig.setFolder("dest"); pluggableSCMMaterialConfig.setFilter(new Filter(new IgnoredFiles("/foo/**.*"))); pluggableSCMMaterialConfig.setConfigAttributes(attributes); assertThat(pluggableSCMMaterialConfig.getScmId(), is("scm-id")); assertThat(pluggableSCMMaterialConfig.getFolder(), is(nullValue())); assertThat(pluggableSCMMaterialConfig.filter(), is(new Filter())); }
@Test public void shouldNotFailValidationIfDestinationDirectoryIsMultilevelButNotNested() { pluggableSCMMaterialConfig.setFolder("f1/f2/f3"); pluggableSCMMaterialConfig.validateNotSubdirectoryOf("f1/f2/f"); assertNull(pluggableSCMMaterialConfig.errors().getAllOn(FOLDER)); }
@Test public void shouldFailValidationIfDestinationDirectoryIsNested() { pluggableSCMMaterialConfig.setFolder("f1"); pluggableSCMMaterialConfig.validateNotSubdirectoryOf("f1/f2"); assertFalse(pluggableSCMMaterialConfig.errors().isEmpty()); Assert.assertThat(pluggableSCMMaterialConfig.errors().on(FOLDER), is("Invalid Destination Directory. Every material needs a different destination directory and the directories should not be nested.")); }
@Test public void shouldCheckEquals() throws Exception { SCM scmConfig = SCMMother.create("scm-id", "scm-name", "plugin-id", "1.0", new Configuration(create("k1", false, "v1"))); // same fingerprint PluggableSCMMaterialConfig p1 = new PluggableSCMMaterialConfig(); p1.setSCMConfig(scmConfig); PluggableSCMMaterialConfig p2 = new PluggableSCMMaterialConfig(); p2.setSCMConfig(scmConfig); assertThat(p1.equals(p2), is(true)); // folder p2.setFolder("dest"); assertThat(p1.equals(p2), is(false)); // scmConfig null p1 = new PluggableSCMMaterialConfig(); p2 = new PluggableSCMMaterialConfig(); assertThat(p1.equals(p2), is(true)); p2.setSCMConfig(scmConfig); assertThat(p1.equals(p2), is(false)); p1.setSCMConfig(scmConfig); p2 = new PluggableSCMMaterialConfig(); assertThat(p1.equals(p2), is(false)); p2.setSCMConfig(scmConfig); assertThat(p1.equals(p2), is(true)); // null comparison assertThat(p1.equals(null), is(false)); }
@Test public void shouldAllowFolderAndFilterForPluggableSCMMaterialForPipeline() throws Exception { CruiseConfig configToSave = new BasicCruiseConfig(); SCM scm = new SCM(); String scmId = "scm-id"; scm.setId(scmId); scm.setName("name"); scm.setPluginConfiguration(new PluginConfiguration("plugin-id", "1.0")); scm.setConfiguration(new Configuration(getConfigurationProperty("url", false, "http://go"))); configToSave.getSCMs().add(scm); PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(scmId); pluggableSCMMaterialConfig.setSCMConfig(scm); pluggableSCMMaterialConfig.setFolder("dest"); pluggableSCMMaterialConfig.setFilter(new Filter(new IgnoredFiles("x"), new IgnoredFiles("y"))); configToSave.addPipeline("default", PipelineConfigMother.pipelineConfig("test", new MaterialConfigs(pluggableSCMMaterialConfig), new JobConfigs(new JobConfig("ls")))); xmlWriter.write(configToSave, output, false); GoConfigHolder goConfigHolder = xmlLoader.loadConfigHolder(output.toString()); PipelineConfig pipelineConfig = goConfigHolder.config.pipelineConfigByName(new CaseInsensitiveString("test")); MaterialConfig materialConfig = pipelineConfig.materialConfigs().get(0); assertThat(materialConfig instanceof PluggableSCMMaterialConfig, is(true)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getScmId(), is(scmId)); assertThat(((PluggableSCMMaterialConfig) materialConfig).getSCMConfig(), is(scm)); assertThat(materialConfig.getFolder(), is("dest")); assertThat(materialConfig.filter(), is(new Filter(new IgnoredFiles("x"), new IgnoredFiles("y")))); }