diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2019-01-03 17:36:03 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2019-01-16 09:43:11 +0100 |
commit | 2e7846d8c26cc62798f03f72cd6becaf0ec5217e (patch) | |
tree | e00b1d0fe298dfc24febfc4c020a85d9e22eee75 /sonar-scanner-engine/src/test/java/org | |
parent | bd541850bcf71d2e323b74d36fb84727984ae41d (diff) | |
download | sonarqube-2e7846d8c26cc62798f03f72cd6becaf0ec5217e.tar.gz sonarqube-2e7846d8c26cc62798f03f72cd6becaf0ec5217e.zip |
SONAR-11508 Rework inclusion/exclusion to restore support of module overrides
Diffstat (limited to 'sonar-scanner-engine/src/test/java/org')
4 files changed, 195 insertions, 17 deletions
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/coverage/CoverageMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/coverage/CoverageMediumTest.java index 6b622327bcc..0b6744565de 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/coverage/CoverageMediumTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/coverage/CoverageMediumTest.java @@ -197,6 +197,45 @@ public class CoverageMediumTest { } @Test + public void module_level_exclusions_override_parent_for_multi_module_project() throws IOException { + + File baseDir = temp.getRoot(); + File baseDirModuleA = new File(baseDir, "moduleA"); + File baseDirModuleB = new File(baseDir, "moduleB"); + File srcDirA = new File(baseDirModuleA, "src"); + srcDirA.mkdirs(); + File srcDirB = new File(baseDirModuleB, "src"); + srcDirB.mkdirs(); + + File xooFileA = new File(srcDirA, "sampleA.xoo"); + File xooUtCoverageFileA = new File(srcDirA, "sampleA.xoo.coverage"); + FileUtils.write(xooFileA, "function foo() {\n if (a && b) {\nalert('hello');\n}\n}", StandardCharsets.UTF_8); + FileUtils.write(xooUtCoverageFileA, "2:2:2:1\n3:1", StandardCharsets.UTF_8); + + File xooFileB = new File(srcDirB, "sampleB.xoo"); + File xooUtCoverageFileB = new File(srcDirB, "sampleB.xoo.coverage"); + FileUtils.write(xooFileB, "function foo() {\n if (a && b) {\nalert('hello');\n}\n}", StandardCharsets.UTF_8); + FileUtils.write(xooUtCoverageFileB, "2:2:2:1\n3:1", StandardCharsets.UTF_8); + + AnalysisResult result = tester.newAnalysis() + .properties(ImmutableMap.<String, String>builder() + .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) + .put("sonar.projectKey", "com.foo.project") + .put("sonar.sources", "src") + .put("sonar.modules", "moduleA,moduleB") + .put("sonar.coverage.exclusions", "**/*.xoo") + .put("moduleA.sonar.coverage.exclusions", "**/*.nothing") + .build()) + .execute(); + + InputFile fileA = result.inputFile("moduleA/src/sampleA.xoo"); + assertThat(result.coverageFor(fileA, 2)).isNotNull(); + + InputFile fileB = result.inputFile("moduleB/src/sampleB.xoo"); + assertThat(result.coverageFor(fileB, 2)).isNull(); + } + + @Test public void warn_user_for_outdated_server_side_exclusions_for_multi_module_project() throws IOException { File baseDir = temp.getRoot(); diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/cpd/CpdMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/cpd/CpdMediumTest.java index d8900cfa569..eaea6f109ea 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/cpd/CpdMediumTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/cpd/CpdMediumTest.java @@ -354,6 +354,52 @@ public class CpdMediumTest { } @Test + public void module_level_exclusions_override_parent_for_multi_module_project() throws IOException { + + String duplicatedStuff = "Sample xoo\ncontent\n" + + "foo\nbar\ntoto\ntiti\n" + + "foo\nbar\ntoto\ntiti\n" + + "bar\ntoto\ntiti\n" + + "foo\nbar\ntoto\ntiti"; + + File baseDir = temp.getRoot(); + File baseDirModuleA = new File(baseDir, "moduleA"); + File baseDirModuleB = new File(baseDir, "moduleB"); + File srcDirA = new File(baseDirModuleA, "src"); + srcDirA.mkdirs(); + File srcDirB = new File(baseDirModuleB, "src"); + srcDirB.mkdirs(); + + File xooFileA = new File(srcDirA, "sampleA.xoo"); + FileUtils.write(xooFileA, duplicatedStuff, StandardCharsets.UTF_8); + + File xooFileB = new File(srcDirB, "sampleB.xoo"); + FileUtils.write(xooFileB, duplicatedStuff, StandardCharsets.UTF_8); + + AnalysisResult result = tester.newAnalysis() + .properties(ImmutableMap.<String, String>builder() + .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) + .put("sonar.projectKey", "com.foo.project") + .put("sonar.sources", "src") + .put("sonar.modules", "moduleA,moduleB") + .put("sonar.cpd.xoo.minimumTokens", "10") + .put("sonar.cpd.exclusions", "**/*") + .put("moduleA.sonar.cpd.exclusions", "**/*.nothing") + .put("moduleB.sonar.cpd.exclusions", "**/*.nothing") + .build()) + .execute(); + + InputFile inputFile1 = result.inputFile("moduleA/src/sampleA.xoo"); + InputFile inputFile2 = result.inputFile("moduleB/src/sampleB.xoo"); + + List<ScannerReport.Duplication> duplicationGroupsFile1 = result.duplicationsFor(inputFile1); + assertThat(duplicationGroupsFile1).isNotEmpty(); + + List<ScannerReport.Duplication> duplicationGroupsFile2 = result.duplicationsFor(inputFile2); + assertThat(duplicationGroupsFile2).isNotEmpty(); + } + + @Test public void enableCrossProjectDuplication() throws IOException { File srcDir = new File(baseDir, "src"); srcDir.mkdir(); diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java index 293ef226b5f..1eaec75bde6 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/mediumtest/fs/FileSystemMediumTest.java @@ -509,6 +509,99 @@ public class FileSystemMediumTest { } @Test + public void test_inclusions_on_multi_modules() throws IOException { + File baseDir = temp.getRoot(); + File baseDirModuleA = new File(baseDir, "moduleA"); + File baseDirModuleB = new File(baseDir, "moduleB"); + File srcDirA = new File(baseDirModuleA, "tests"); + srcDirA.mkdirs(); + File srcDirB = new File(baseDirModuleB, "tests"); + srcDirB.mkdirs(); + + File xooFileA = new File(srcDirA, "sampleTestA.xoo"); + FileUtils.write(xooFileA, "Sample xoo\ncontent", StandardCharsets.UTF_8); + + File xooFileB = new File(srcDirB, "sampleTestB.xoo"); + FileUtils.write(xooFileB, "Sample xoo\ncontent", StandardCharsets.UTF_8); + + final ImmutableMap.Builder<String, String> builder = ImmutableMap.<String, String>builder() + .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) + .put("sonar.projectKey", "com.foo.project") + .put("sonar.sources", "") + .put("sonar.tests", "tests") + .put("sonar.modules", "moduleA,moduleB"); + + + AnalysisResult result = tester.newAnalysis() + .properties(builder.build()) + .execute(); + + assertThat(result.inputFiles()).hasSize(2); + + InputFile fileA = result.inputFile("moduleA/tests/sampleTestA.xoo"); + assertThat(fileA).isNotNull(); + + InputFile fileB = result.inputFile("moduleB/tests/sampleTestB.xoo"); + assertThat(fileB).isNotNull(); + + result = tester.newAnalysis() + .properties(builder + .put("sonar.test.inclusions", "moduleA/tests/**") + .build()) + .execute(); + + assertThat(result.inputFiles()).hasSize(1); + + fileA = result.inputFile("moduleA/tests/sampleTestA.xoo"); + assertThat(fileA).isNotNull(); + + fileB = result.inputFile("moduleB/tests/sampleTestB.xoo"); + assertThat(fileB).isNull(); + } + + @Test + public void test_module_level_inclusions_override_parent_on_multi_modules() throws IOException { + File baseDir = temp.getRoot(); + File baseDirModuleA = new File(baseDir, "moduleA"); + File baseDirModuleB = new File(baseDir, "moduleB"); + File srcDirA = new File(baseDirModuleA, "src"); + srcDirA.mkdirs(); + File srcDirB = new File(baseDirModuleB, "src"); + srcDirB.mkdirs(); + + File xooFileA = new File(srcDirA, "sampleA.xoo"); + FileUtils.write(xooFileA, "Sample xoo\ncontent", StandardCharsets.UTF_8); + + File xooFileB = new File(srcDirB, "sampleB.xoo"); + FileUtils.write(xooFileB, "Sample xoo\ncontent", StandardCharsets.UTF_8); + + final ImmutableMap.Builder<String, String> builder = ImmutableMap.<String, String>builder() + .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) + .put("sonar.projectKey", "com.foo.project") + .put("sonar.sources", "src") + .put("sonar.modules", "moduleA,moduleB") + .put("sonar.inclusions", "**/*.php"); + + + AnalysisResult result = tester.newAnalysis() + .properties(builder.build()) + .execute(); + + assertThat(result.inputFiles()).isEmpty(); + + result = tester.newAnalysis() + .properties(builder + .put("moduleA.sonar.inclusions", "**/*.xoo") + .build()) + .execute(); + + assertThat(result.inputFiles()).hasSize(1); + + InputFile fileA = result.inputFile("moduleA/src/sampleA.xoo"); + assertThat(fileA).isNotNull(); + } + + @Test public void warn_user_for_outdated_scanner_side_inherited_exclusions_for_multi_module_project() throws IOException { File baseDir = temp.getRoot(); File baseDirModuleA = new File(baseDir, "moduleA"); @@ -526,7 +619,6 @@ public class FileSystemMediumTest { AnalysisResult result = tester.newAnalysis() .properties(ImmutableMap.<String, String>builder() - .put("sonar.task", "scan") .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) .put("sonar.projectKey", "com.foo.project") .put("sonar.sources", "src") @@ -542,8 +634,8 @@ public class FileSystemMediumTest { assertThat(fileB).isNull(); assertThat(logTester.logs(LoggerLevel.WARN)) - .contains("Specifying module-relative paths at project level in the files exclusions/inclusions properties is deprecated. " + - "To continue matching files like 'moduleA/src/sample.xoo', update these properties so that patterns refer to project-relative paths."); + .contains("Specifying module-relative paths at project level in the property 'sonar.exclusions' is deprecated. " + + "To continue matching files like 'moduleA/src/sample.xoo', update this property so that patterns refer to project-relative paths."); } @Test @@ -566,7 +658,6 @@ public class FileSystemMediumTest { AnalysisResult result = tester.newAnalysis() .properties(ImmutableMap.<String, String>builder() - .put("sonar.task", "scan") .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) .put("sonar.projectKey", "com.foo.project") .put("sonar.sources", "src") @@ -581,8 +672,8 @@ public class FileSystemMediumTest { assertThat(fileB).isNull(); assertThat(logTester.logs(LoggerLevel.WARN)) - .contains("Specifying module-relative paths at project level in the files exclusions/inclusions properties is deprecated. " + - "To continue matching files like 'moduleA/src/sample.xoo', update these properties so that patterns refer to project-relative paths."); + .contains("Specifying module-relative paths at project level in the property 'sonar.exclusions' is deprecated. " + + "To continue matching files like 'moduleA/src/sample.xoo', update this property so that patterns refer to project-relative paths."); } @Test diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java index a4f0a30761d..7e6540f69f1 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/filesystem/ProjectExclusionFiltersTest.java @@ -53,8 +53,10 @@ public class ProjectExclusionFiltersTest { ProjectExclusionFilters filter = new ProjectExclusionFilters(settings.asConfig()); IndexedFile indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/com/mycompany/FooDao.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.TEST)).isTrue(); + assertThat(filter.isExcluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); + assertThat(filter.isExcluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.TEST)).isFalse(); + assertThat(filter.isIncluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); + assertThat(filter.isIncluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.TEST)).isTrue(); } @Test @@ -63,10 +65,10 @@ public class ProjectExclusionFiltersTest { ProjectExclusionFilters filter = new ProjectExclusionFilters(settings.asConfig()); IndexedFile indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/com/mycompany/FooDao.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); + assertThat(filter.isIncluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/com/mycompany/Foo.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); + assertThat(filter.isIncluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); } @Test @@ -75,10 +77,10 @@ public class ProjectExclusionFiltersTest { ProjectExclusionFilters filter = new ProjectExclusionFilters(settings.asConfig()); IndexedFile indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/com/mycompany/Foo.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); + assertThat(filter.isIncluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/com/mycompany/FooDto.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); + assertThat(filter.isIncluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); } @Test @@ -89,14 +91,14 @@ public class ProjectExclusionFiltersTest { ProjectExclusionFilters filter = new ProjectExclusionFilters(settings.asConfig()); IndexedFile indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/com/mycompany/FooDao.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); + assertThat(filter.isExcluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/com/mycompany/Foo.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); + assertThat(filter.isExcluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); // source exclusions do not apply to tests indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/test/java/com/mycompany/FooDao.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.TEST)).isTrue(); + assertThat(filter.isExcluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.TEST)).isFalse(); } @Test @@ -108,10 +110,10 @@ public class ProjectExclusionFiltersTest { ProjectExclusionFilters filter = new ProjectExclusionFilters(settings.asConfig()); IndexedFile indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/org/bar/Foo.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); + assertThat(filter.isExcluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); indexedFile = new DefaultIndexedFile("foo", moduleBaseDir, "src/main/java/org/bar/Bar.java", null); - assertThat(filter.accept(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isFalse(); + assertThat(filter.isExcluded(indexedFile.path(), Paths.get(indexedFile.relativePath()), InputFile.Type.MAIN)).isTrue(); } @Test |