OpenSearch/gradle/code-coverage.gradle

94 lines
4.1 KiB
Groovy
Raw Normal View History

Add support to generate code coverage report with JaCoCo (#971) * add jacoco plugin Signed-off-by: Tianli Feng <ftianli@amazon.com> * config aggregated jacoco report Signed-off-by: Tianli Feng <ftianli@amazon.com> * Skip generating report if no test in subproject Signed-off-by: Tianli Feng <ftianli@amazon.com> * Add jacoco plugin into root project Signed-off-by: Tianli Feng <ftianli@amazon.com> * test aggregate code coverage report Signed-off-by: Tianli Feng <ftianli@amazon.com> * Can generate aggregated unit test coverage report Signed-off-by: Tianli Feng <ftianli@amazon.com> * Can generate aggregated test report with source file linked Signed-off-by: Tianli Feng <ftianli@amazon.com> * Some cleanup, but jacocoReport is not dependson Test Signed-off-by: Tianli Feng <ftianli@amazon.com> * cleanup Signed-off-by: Tianli Feng <ftianli@amazon.com> * get unit test code coverage report Signed-off-by: Tianli Feng <ftianli@amazon.com> * change 'enabled == true' to 'enabled' Signed-off-by: Tianli Feng <ftianli@amazon.com> * add a comment for selectedsubprojects Signed-off-by: Tianli Feng <ftianli@amazon.com> * add tasks to generate code coverage report for unit test and integration test Signed-off-by: Tianli Feng <ftianli@amazon.com> * fix typo in variable Signed-off-by: Tianli Feng <ftianli@amazon.com> * Correct the task to get codecoverage for unit test and integtest Signed-off-by: Tianli Feng <ftianli@amazon.com> * Make code coverage report task run after test Signed-off-by: Tianli Feng <ftianli@amazon.com> * apply gradle configuration aciidance api Signed-off-by: Tianli Feng <ftianli@amazon.com> * apply jacoco plugin in BuildPlugin in all case Signed-off-by: Tianli Feng <ftianli@amazon.com> * Put file path list of integration test exec data in a variable Signed-off-by: Tianli Feng <ftianli@amazon.com> * Apply gradle configuration aviodance api to register task instead of create task Signed-off-by: Tianli Feng <ftianli@amazon.com> * merge 2 jacocoreport configurations Signed-off-by: Tianli Feng <ftianli@amazon.com> * Add some comments in gradle script Signed-off-by: Tianli Feng <ftianli@amazon.com> * Attach code coverage report task to gralde check task Signed-off-by: Tianli Feng <ftianli@amazon.com> * add a space Signed-off-by: Tianli Feng <ftianli@amazon.com> * get code coverage report after check task on demand and get report in html format on demand Signed-off-by: Tianli Feng <ftianli@amazon.com>
2021-08-10 10:23:46 -04:00
/*
* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/
apply plugin: 'jacoco'
repositories {
mavenCentral()
}
allprojects {
plugins.withId('jacoco') {
// The default JaCoCo version in Gradle 6.6.1 is 0.8.5, but at least version 0.8.6 officially supports Java 14
jacoco.toolVersion = '0.8.7'
}
}
def codeCoverageReportTask = tasks.register("codeCoverageReport", JacocoReport) {
description = 'Generates aggregate report from all subprojects.'
executionData.setFrom fileTree(dir: '.', include: '**/build/jacoco/*.exec')
}
tasks.register("codeCoverageReportForUnitTest", JacocoReport) {
description = 'Generates aggregate report from all subprojects for unit test.'
executionData.setFrom fileTree(dir: '.', include: '**/build/jacoco/test.exec')
}
tasks.register("codeCoverageReportForIntegrationTest", JacocoReport) {
description = 'Generates aggregate report from all subprojects for integration test.'
// These kinds of tests are integration test, and the tests can be ran by Gradle tasks with the same name
def integrationTestExecPathList = ['**/build/jacoco/integTest.exec',
'**/build/jacoco/internalClusterTest.exec',
'**/build/jacoco/javaRestTest.exec',
'**/build/jacoco/yamlRestTest.exec' ]
executionData.setFrom fileTree(dir: '.', include: integrationTestExecPathList)
}
tasks.withType(JacocoReport).configureEach {
group = JavaBasePlugin.VERIFICATION_GROUP
// Select projects with corresponding tests in order to run proper tests and select proper classes to generate the report
def projectsWithJavaPlugin = subprojects.findAll { it.pluginManager.hasPlugin('java') }
def projectsWithUnitTest = projectsWithJavaPlugin.findAll { it.tasks.findByName('test').enabled }
def projectsWithIntegTest = projectsWithJavaPlugin.findAll {it.tasks.findByName('integTest')}
def projectsWithInternalClusterTest = projectsWithJavaPlugin.findAll {it.tasks.findByName('internalClusterTest')}
def projectsWithJavaRestTest = projectsWithJavaPlugin.findAll {it.tasks.findByName('javaRestTest')}
def projectsWithYamlRestTest = projectsWithJavaPlugin.findAll {it.tasks.findByName('yamlRestTest')}
def projectsWithIntegrationTest = projectsWithIntegTest + projectsWithInternalClusterTest + projectsWithJavaRestTest + projectsWithYamlRestTest
def projectsWithTest = projectsWithUnitTest + projectsWithIntegrationTest
def selectedProjects
switch (name) {
case "codeCoverageReportForUnitTest":
dependsOn projectsWithUnitTest.test
selectedProjects = projectsWithUnitTest
break
case "codeCoverageReportForIntegrationTest":
dependsOn projectsWithIntegTest.integTest
dependsOn projectsWithInternalClusterTest.internalClusterTest
dependsOn projectsWithJavaRestTest.javaRestTest
dependsOn projectsWithYamlRestTest.yamlRestTest
selectedProjects = projectsWithIntegrationTest
break
default:
dependsOn projectsWithUnitTest.test
dependsOn projectsWithIntegTest.integTest
dependsOn projectsWithInternalClusterTest.internalClusterTest
dependsOn projectsWithJavaRestTest.javaRestTest
dependsOn projectsWithYamlRestTest.yamlRestTest
selectedProjects = projectsWithTest
break
}
sourceDirectories.setFrom files(selectedProjects.sourceSets.main.allSource.srcDirs)
classDirectories.setFrom files(selectedProjects.sourceSets.main.output)
reports {
// Code coverage report in HTML and CSV formats are on demand, in case they take extra disk space.
xml.enabled System.getProperty('tests.coverage.report.xml', 'true').toBoolean()
html.enabled System.getProperty('tests.coverage.report.html', 'false').toBoolean()
csv.enabled System.getProperty('tests.coverage.report.csv', 'false').toBoolean()
Add support to generate code coverage report with JaCoCo (#971) * add jacoco plugin Signed-off-by: Tianli Feng <ftianli@amazon.com> * config aggregated jacoco report Signed-off-by: Tianli Feng <ftianli@amazon.com> * Skip generating report if no test in subproject Signed-off-by: Tianli Feng <ftianli@amazon.com> * Add jacoco plugin into root project Signed-off-by: Tianli Feng <ftianli@amazon.com> * test aggregate code coverage report Signed-off-by: Tianli Feng <ftianli@amazon.com> * Can generate aggregated unit test coverage report Signed-off-by: Tianli Feng <ftianli@amazon.com> * Can generate aggregated test report with source file linked Signed-off-by: Tianli Feng <ftianli@amazon.com> * Some cleanup, but jacocoReport is not dependson Test Signed-off-by: Tianli Feng <ftianli@amazon.com> * cleanup Signed-off-by: Tianli Feng <ftianli@amazon.com> * get unit test code coverage report Signed-off-by: Tianli Feng <ftianli@amazon.com> * change 'enabled == true' to 'enabled' Signed-off-by: Tianli Feng <ftianli@amazon.com> * add a comment for selectedsubprojects Signed-off-by: Tianli Feng <ftianli@amazon.com> * add tasks to generate code coverage report for unit test and integration test Signed-off-by: Tianli Feng <ftianli@amazon.com> * fix typo in variable Signed-off-by: Tianli Feng <ftianli@amazon.com> * Correct the task to get codecoverage for unit test and integtest Signed-off-by: Tianli Feng <ftianli@amazon.com> * Make code coverage report task run after test Signed-off-by: Tianli Feng <ftianli@amazon.com> * apply gradle configuration aciidance api Signed-off-by: Tianli Feng <ftianli@amazon.com> * apply jacoco plugin in BuildPlugin in all case Signed-off-by: Tianli Feng <ftianli@amazon.com> * Put file path list of integration test exec data in a variable Signed-off-by: Tianli Feng <ftianli@amazon.com> * Apply gradle configuration aviodance api to register task instead of create task Signed-off-by: Tianli Feng <ftianli@amazon.com> * merge 2 jacocoreport configurations Signed-off-by: Tianli Feng <ftianli@amazon.com> * Add some comments in gradle script Signed-off-by: Tianli Feng <ftianli@amazon.com> * Attach code coverage report task to gralde check task Signed-off-by: Tianli Feng <ftianli@amazon.com> * add a space Signed-off-by: Tianli Feng <ftianli@amazon.com> * get code coverage report after check task on demand and get report in html format on demand Signed-off-by: Tianli Feng <ftianli@amazon.com>
2021-08-10 10:23:46 -04:00
}
}
if (System.getProperty("tests.coverage")) {
// Attach code coverage report task to Gradle check task
project.getTasks().named(JavaBasePlugin.CHECK_TASK_NAME).configure {
dependsOn codeCoverageReportTask
}
}