From 9a523033769660b489e1c1a54a2eac7d9c386ba0 Mon Sep 17 00:00:00 2001 From: Tyler Benson Date: Fri, 2 Mar 2018 19:48:28 +1000 Subject: [PATCH] Apply jacoco to every java project MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some projects have ignores/whitelists, but generally coverage is pretty high. AFAIK, this doesn’t really capture instrumentation test coverage though. --- .../dd-java-agent-ittests.gradle | 4 -- .../agent-bootstrap/agent-bootstrap.gradle | 4 ++ .../agent-tooling/agent-tooling.gradle | 4 ++ dd-java-agent/dd-java-agent.gradle | 7 +- .../instrumentation/instrumentation.gradle | 4 ++ .../akka-testing/akka-testing.gradle | 4 ++ dd-java-agent/testing/testing.gradle | 8 +++ dd-trace-api/dd-trace-api.gradle | 1 - dd-trace-ot/dd-trace-ot.gradle | 9 +-- .../java/datadog/trace/common/Service.java | 65 ------------------- .../scopemanager/ScopeManagerTest.groovy | 16 +++++ .../sampling/RateByServiceSamplerTest.groovy | 19 ++++++ .../dropwizard-mongo-client.gradle | 1 - examples/rest-spark/rest-spark.gradle | 1 - .../spring-boot-jdbc-redis.gradle | 1 - gradle/jacoco.gradle | 22 +++++-- gradle/java.gradle | 1 + 17 files changed, 82 insertions(+), 89 deletions(-) delete mode 100644 dd-trace-ot/src/main/java/datadog/trace/common/Service.java diff --git a/dd-java-agent-ittests/dd-java-agent-ittests.gradle b/dd-java-agent-ittests/dd-java-agent-ittests.gradle index 7a7a480f3a..c829b08b10 100644 --- a/dd-java-agent-ittests/dd-java-agent-ittests.gradle +++ b/dd-java-agent-ittests/dd-java-agent-ittests.gradle @@ -53,7 +53,3 @@ tasks.withType(Test) { parent.subprojects.collect { it.tasks.withType(Test) } each { test.shouldRunAfter it } - -// Jacoco must be applied after the test javaagent config block above, -// otherwise the javaagent args conflict. (It's order dependent and added LIFO) -apply from: "${rootDir}/gradle/jacoco.gradle" diff --git a/dd-java-agent/agent-bootstrap/agent-bootstrap.gradle b/dd-java-agent/agent-bootstrap/agent-bootstrap.gradle index d7353bb842..154c6d8eeb 100644 --- a/dd-java-agent/agent-bootstrap/agent-bootstrap.gradle +++ b/dd-java-agent/agent-bootstrap/agent-bootstrap.gradle @@ -5,6 +5,10 @@ plugins { apply from: "${rootDir}/gradle/java.gradle" +whitelistedInstructionClasses += whitelistedBranchClasses += [ + 'datadog.trace.bootstrap.*' +] + dependencies { compile project(':dd-trace-api') compile deps.opentracing diff --git a/dd-java-agent/agent-tooling/agent-tooling.gradle b/dd-java-agent/agent-tooling/agent-tooling.gradle index ad294c408d..cf4a84a7ed 100644 --- a/dd-java-agent/agent-tooling/agent-tooling.gradle +++ b/dd-java-agent/agent-tooling/agent-tooling.gradle @@ -1,5 +1,9 @@ apply from: "${rootDir}/gradle/java.gradle" +whitelistedInstructionClasses += whitelistedBranchClasses += [ + 'datadog.trace.agent.tooling.*' +] + dependencies { compile project(':dd-java-agent:agent-bootstrap') compile deps.bytebuddy diff --git a/dd-java-agent/dd-java-agent.gradle b/dd-java-agent/dd-java-agent.gradle index 43b8809c22..d5fa68c4c5 100644 --- a/dd-java-agent/dd-java-agent.gradle +++ b/dd-java-agent/dd-java-agent.gradle @@ -6,13 +6,8 @@ description = 'dd-java-agent' apply from: "${rootDir}/gradle/java.gradle" apply from: "${rootDir}/gradle/publish.gradle" -apply from: "${rootDir}/gradle/jacoco.gradle" -jacocoTestReport.dependsOn ':dd-java-agent-ittests:test' -whitelistedInstructionClasses += whitelistedBranchClasses += [ - 'datadog.agent.*', - 'datadog.agent.decorators.*', -] +jacocoTestReport.dependsOn ':dd-java-agent-ittests:test' /* * Include subproject's shadowJar in the dd-java-agent jar. diff --git a/dd-java-agent/instrumentation/instrumentation.gradle b/dd-java-agent/instrumentation/instrumentation.gradle index d37a3e96b1..fe129b67bd 100644 --- a/dd-java-agent/instrumentation/instrumentation.gradle +++ b/dd-java-agent/instrumentation/instrumentation.gradle @@ -15,6 +15,10 @@ subprojects { subProj -> } } +whitelistedInstructionClasses += whitelistedBranchClasses += [ + 'datadog.trace.instrumentation.*' +] + dependencies { compile(project(':dd-java-agent:agent-tooling')) { exclude module: ':dd-java-agent:agent-bootstrap' diff --git a/dd-java-agent/instrumentation/java-concurrent/akka-testing/akka-testing.gradle b/dd-java-agent/instrumentation/java-concurrent/akka-testing/akka-testing.gradle index 2519e05a87..0718cfbd7b 100644 --- a/dd-java-agent/instrumentation/java-concurrent/akka-testing/akka-testing.gradle +++ b/dd-java-agent/instrumentation/java-concurrent/akka-testing/akka-testing.gradle @@ -1,6 +1,10 @@ apply from: "${rootDir}/gradle/java.gradle" apply plugin: 'scala' +whitelistedInstructionClasses += whitelistedBranchClasses += [ + '*' +] + dependencies { compile project(':dd-trace-api') compile project(':dd-trace-ot') diff --git a/dd-java-agent/testing/testing.gradle b/dd-java-agent/testing/testing.gradle index 0d8cee064c..e357656a4a 100644 --- a/dd-java-agent/testing/testing.gradle +++ b/dd-java-agent/testing/testing.gradle @@ -1,5 +1,13 @@ apply from: "${rootDir}/gradle/java.gradle" +minimumBranchCoverage = 0.5 +minimumInstructionCoverage = 0.6 +whitelistedInstructionClasses += whitelistedBranchClasses += [ + 'datadog.trace.agent.test.*Assert', + 'datadog.trace.agent.test.AgentTestRunner.1', + 'datadog.trace.agent.test.TestUtils' +] + dependencies { compile deps.bytebuddy compile deps.bytebuddyagent diff --git a/dd-trace-api/dd-trace-api.gradle b/dd-trace-api/dd-trace-api.gradle index 5e68f0eff5..1b9a00d340 100644 --- a/dd-trace-api/dd-trace-api.gradle +++ b/dd-trace-api/dd-trace-api.gradle @@ -1,6 +1,5 @@ apply from: "${rootDir}/gradle/java.gradle" apply from: "${rootDir}/gradle/publish.gradle" -apply from: "${rootDir}/gradle/jacoco.gradle" description = 'dd-trace-api' dependencies { diff --git a/dd-trace-ot/dd-trace-ot.gradle b/dd-trace-ot/dd-trace-ot.gradle index 20db992711..1eae3b359d 100644 --- a/dd-trace-ot/dd-trace-ot.gradle +++ b/dd-trace-ot/dd-trace-ot.gradle @@ -6,15 +6,12 @@ description = 'dd-trace-ot' apply from: "${rootDir}/gradle/java.gradle" apply from: "${rootDir}/gradle/publish.gradle" -apply from: "${rootDir}/gradle/jacoco.gradle" -minimumBranchCoverage = 0.3 -minimumInstructionCoverage = 0.5 + +minimumBranchCoverage = 0.5 +minimumInstructionCoverage = 0.6 whitelistedInstructionClasses += whitelistedBranchClasses += [ 'datadog.opentracing.decorators.*', 'datadog.trace.common.writer.ListWriter', - 'datadog.trace.common.util.Clock', - 'datadog.trace.api.DDTags', - 'datadog.trace.common.util.ConfigUtils', 'datadog.trace.common.sampling.PrioritySampling' ] diff --git a/dd-trace-ot/src/main/java/datadog/trace/common/Service.java b/dd-trace-ot/src/main/java/datadog/trace/common/Service.java deleted file mode 100644 index deb453dd32..0000000000 --- a/dd-trace-ot/src/main/java/datadog/trace/common/Service.java +++ /dev/null @@ -1,65 +0,0 @@ -package datadog.trace.common; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.annotation.JsonValue; - -public class Service { - - private final String name; - private final String appName; - private final Service.AppType appType; - - public Service(final String name, final String appName, final AppType appType) { - this.name = name; - this.appName = appName; - this.appType = appType; - } - - @JsonIgnore - public String getName() { - return name; - } - - @JsonProperty("app") - public String getAppName() { - return appName; - } - - @JsonProperty("app_type") - public AppType getAppType() { - return appType; - } - - @Override - public String toString() { - return "Service { " - + "name='" - + name - + "\', appName='" - + appName - + "', appType=" - + appType - + " }"; - } - - public enum AppType { - WEB("web"), - DB("db"), - CUSTOM("custom"), - CACHE("cache"), - WORKER("worker"); - - private final String type; - - AppType(final String type) { - this.type = type; - } - - @JsonValue - @Override - public String toString() { - return type; - } - } -} diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/scopemanager/ScopeManagerTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/scopemanager/ScopeManagerTest.groovy index 7efa86c0c2..5d4a64936a 100644 --- a/dd-trace-ot/src/test/groovy/datadog/opentracing/scopemanager/ScopeManagerTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/scopemanager/ScopeManagerTest.groovy @@ -7,6 +7,7 @@ import datadog.opentracing.PendingTrace import datadog.trace.common.writer.ListWriter import io.opentracing.Scope import io.opentracing.Span +import io.opentracing.noop.NoopSpan import spock.lang.Specification import spock.lang.Subject import spock.lang.Unroll @@ -25,6 +26,21 @@ class ScopeManagerTest extends Specification { scopeManager.tlsScope.remove() } + def "non-ddspan activation results in a simple scope"() { + when: + def scope = scopeManager.activate(NoopSpan.INSTANCE, true) + + then: + scopeManager.active() == scope + scope instanceof SimpleScope + + when: + scope.close() + + then: + scopeManager.active() == null + } + def "threadlocal is empty"() { setup: def builder = tracer.buildSpan("test") diff --git a/dd-trace-ot/src/test/groovy/datadog/trace/api/sampling/RateByServiceSamplerTest.groovy b/dd-trace-ot/src/test/groovy/datadog/trace/api/sampling/RateByServiceSamplerTest.groovy index 57748343f0..098e1cf5c0 100644 --- a/dd-trace-ot/src/test/groovy/datadog/trace/api/sampling/RateByServiceSamplerTest.groovy +++ b/dd-trace-ot/src/test/groovy/datadog/trace/api/sampling/RateByServiceSamplerTest.groovy @@ -8,6 +8,25 @@ import spock.lang.Specification class RateByServiceSamplerTest extends Specification { + def "invalid rate -> 1"() { + setup: + RateByServiceSampler serviceSampler = new RateByServiceSampler() + ObjectMapper serializer = new ObjectMapper() + String response = '{"rate_by_service": {"service:,env:":' + rate + '}}' + serviceSampler.onResponse("traces", serializer.readTree(response)) + expect: + serviceSampler.baseSampler.sampleRate == expectedRate + + where: + rate | expectedRate + null | 1 + 1 | 1 + 0 | 1 + -5 | 1 + 5 | 1 + 0.5 | 0.5 + } + def "rate by service name"() { setup: RateByServiceSampler serviceSampler = new RateByServiceSampler() diff --git a/examples/dropwizard-mongo-client/dropwizard-mongo-client.gradle b/examples/dropwizard-mongo-client/dropwizard-mongo-client.gradle index ec91cbaf49..8bca2c85eb 100644 --- a/examples/dropwizard-mongo-client/dropwizard-mongo-client.gradle +++ b/examples/dropwizard-mongo-client/dropwizard-mongo-client.gradle @@ -4,7 +4,6 @@ plugins { apply plugin: 'application' apply from: "${rootDir}/gradle/java.gradle" -apply from: "${rootDir}/gradle/jacoco.gradle" version = 'demo' description = 'dropwizard-mongo-client' diff --git a/examples/rest-spark/rest-spark.gradle b/examples/rest-spark/rest-spark.gradle index 7c43ea8ab7..51f1df9525 100644 --- a/examples/rest-spark/rest-spark.gradle +++ b/examples/rest-spark/rest-spark.gradle @@ -4,7 +4,6 @@ plugins { apply plugin: 'application' apply from: "${rootDir}/gradle/java.gradle" -apply from: "${rootDir}/gradle/jacoco.gradle" version = 'demo' description = 'rest-spark' diff --git a/examples/spring-boot-jdbc-redis/spring-boot-jdbc-redis.gradle b/examples/spring-boot-jdbc-redis/spring-boot-jdbc-redis.gradle index 487dc27600..fd10a34660 100644 --- a/examples/spring-boot-jdbc-redis/spring-boot-jdbc-redis.gradle +++ b/examples/spring-boot-jdbc-redis/spring-boot-jdbc-redis.gradle @@ -3,7 +3,6 @@ plugins { } apply from: "${rootDir}/gradle/java.gradle" -apply from: "${rootDir}/gradle/jacoco.gradle" version = 'demo' description = 'spring-boot-jdbc-redis' diff --git a/gradle/jacoco.gradle b/gradle/jacoco.gradle index 738cd21bcc..2778b0602a 100644 --- a/gradle/jacoco.gradle +++ b/gradle/jacoco.gradle @@ -1,5 +1,9 @@ apply plugin: "jacoco" +jacoco { + toolVersion = "0.8.0" +} + jacocoTestReport { dependsOn test reports { @@ -9,11 +13,21 @@ jacocoTestReport { } } -project.ext.whitelistedBranchClasses = [] -project.ext.whitelistedInstructionClasses = [] +if (project.parent.hasProperty("whitelistedBranchClasses")) { + project.ext.whitelistedBranchClasses = parent.whitelistedBranchClasses +} else { + project.ext.whitelistedBranchClasses = [] +} -project.ext.minimumBranchCoverage = 0.6 -project.ext.minimumInstructionCoverage = 0.6 +if (project.parent.hasProperty("whitelistedInstructionClasses")) { + project.ext.whitelistedInstructionClasses = parent.whitelistedInstructionClasses +} else { + project.ext.whitelistedInstructionClasses = [] +} + +// defaults can be overridden per project: +project.ext.minimumBranchCoverage = 0.9 +project.ext.minimumInstructionCoverage = 0.9 afterEvaluate { jacocoTestCoverageVerification { diff --git a/gradle/java.gradle b/gradle/java.gradle index 7ce398b22a..2e3db80ac0 100644 --- a/gradle/java.gradle +++ b/gradle/java.gradle @@ -153,6 +153,7 @@ tasks.withType(Test) { apply from: "$rootDir/gradle/checkstyle.gradle" apply from: "$rootDir/gradle/codenarc.gradle" +apply from: "$rootDir/gradle/jacoco.gradle" plugins.withType(BasePlugin) { project.afterEvaluate {