private void validateDestinationFolder(List<MaterialConfig> allSCMMaterials, MaterialConfig material) { String materialFolder = material.getFolder(); for (MaterialConfig otherMaterial : allSCMMaterials) { if (otherMaterial != material) { if (otherMaterial instanceof ScmMaterialConfig) { ((ScmMaterialConfig) otherMaterial).validateNotSubdirectoryOf(materialFolder); ((ScmMaterialConfig) otherMaterial).validateDestinationDirectoryName(materialFolder); } else { ((PluggableSCMMaterialConfig) otherMaterial).validateNotSubdirectoryOf(materialFolder); ((PluggableSCMMaterialConfig) otherMaterial).validateDestinationDirectoryName(materialFolder); } } } }
@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 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.")); }