Merge pull request #40 from DataDog/tyler/code-coverage

Apply minimum code coverage assertions
This commit is contained in:
Tyler Benson 2017-07-11 07:26:50 -07:00 committed by GitHub
commit bc1b71d054
7 changed files with 105 additions and 12 deletions

View File

@ -1,3 +1,6 @@
// Not adding jacoco here as it inexplicably breaks our tests.
// apply from: "${rootDir}/gradle/jacoco.gradle"
description = 'dd-java-agent-ittests'
dependencies {
testCompile project(':dd-java-agent')

View File

@ -4,6 +4,16 @@ plugins {
description = 'dd-java-agent'
apply from: "${rootDir}/gradle/jacoco.gradle"
jacocoTestReport.dependsOn project(':dd-java-agent-ittests').test
whitelistedInstructionClasses += whitelistedBranchClasses += [
"com.datadoghq.trace.agent.integration.*",
'com.datadoghq.trace.agent.AnnotationsTracingAgent',
'com.datadoghq.trace.agent.AgentTracerConfig',
'com.datadoghq.trace.agent.TraceAnnotationsManager',
'com.datadoghq.trace.agent.InstrumentationChecker'
]
dependencies {
compile project(':dd-trace')
compile project(':dd-trace-annotations')

View File

@ -1,3 +1,5 @@
apply from: "${rootDir}/gradle/jacoco.gradle"
description = 'dd-trace-annotations'
dependencies {
testCompile group: 'junit', name: 'junit', version: '3.8.1'

View File

@ -4,6 +4,15 @@ plugins {
}
description = 'dd-trace'
apply from: "${rootDir}/gradle/jacoco.gradle"
minimumBranchCoverage = 0.3
minimumInstructionCoverage = 0.5
whitelistedInstructionClasses += whitelistedBranchClasses += [
"com.datadoghq.trace.integration.*",
'com.datadoghq.trace.DDTags'
]
dependencies {
compile group: 'io.opentracing', name: 'opentracing-api', version: '0.30.0'
compile group: 'io.opentracing', name: 'opentracing-noop', version: '0.30.0'

View File

@ -41,19 +41,10 @@ public class DDTracerResolver extends TracerResolver {
@SuppressWarnings("static-access")
public static Tracer registerTracer() {
ServiceLoader<TracerResolver> RESOLVERS = ServiceLoader.load(TracerResolver.class);
Tracer tracer = null;
for (TracerResolver value : RESOLVERS) {
tracer = value.resolveTracer();
if (tracer != null) {
break;
}
}
Tracer tracer = TracerResolver.resolveTracer();
if (tracer == null) {
tracer = NoopTracerFactory.create();
return NoopTracerFactory.create();
}
GlobalTracer.register(tracer);

View File

@ -2,9 +2,14 @@ package com.datadoghq.trace.resolver;
import static org.assertj.core.api.Assertions.assertThat;
import java.lang.reflect.Field;
import java.util.List;
import io.opentracing.NoopTracerFactory;
import io.opentracing.Tracer;
import io.opentracing.contrib.tracerresolver.TracerResolver;
import io.opentracing.tag.Tags;
import io.opentracing.util.GlobalTracer;
import org.junit.Test;
import com.datadoghq.trace.DDTracer;
@ -15,7 +20,7 @@ import com.datadoghq.trace.integration.URLAsResourceName;
public class TracerResolverTest {
@Test
public void test() {
public void testResolve() {
DDTracerResolver tracerResolver = new DDTracerResolver();
DDTracer tracer = (DDTracer) tracerResolver.resolve();
@ -39,4 +44,34 @@ public class TracerResolverTest {
}
@Test
public void testResolveTracer() throws Exception {
Field tracerField = GlobalTracer.class.getDeclaredField("tracer");
tracerField.setAccessible(true);
tracerField.set(null, NoopTracerFactory.create());
assertThat(GlobalTracer.isRegistered()).isFalse();
Tracer tracer = TracerResolver.resolveTracer();
assertThat(GlobalTracer.isRegistered()).isFalse();
assertThat(tracer).isInstanceOf(DDTracer.class);
}
@Test
public void testRegisterTracer() throws Exception {
Field tracerField = GlobalTracer.class.getDeclaredField("tracer");
tracerField.setAccessible(true);
tracerField.set(null, NoopTracerFactory.create());
assertThat(GlobalTracer.isRegistered()).isFalse();
DDTracerResolver.registerTracer();
assertThat(GlobalTracer.isRegistered()).isTrue();
assertThat(tracerField.get(null)).isInstanceOf(DDTracer.class);
tracerField.set(null, NoopTracerFactory.create());
}
}

43
gradle/jacoco.gradle Normal file
View File

@ -0,0 +1,43 @@
apply plugin: "jacoco"
jacocoTestReport {
dependsOn test
reports {
xml.enabled true
csv.enabled false
html.destination file("${buildDir}/reports/jacoco/")
}
}
project.ext.whitelistedBranchClasses = []
project.ext.whitelistedInstructionClasses = []
project.ext.minimumBranchCoverage = 0.6
project.ext.minimumInstructionCoverage = 0.6
afterEvaluate {
jacocoTestCoverageVerification {
violationRules {
rule {
element = 'CLASS'
excludes = project.whitelistedBranchClasses
limit {
counter = 'BRANCH'
minimum = project.minimumBranchCoverage
}
}
rule {
element = 'CLASS'
excludes = project.whitelistedInstructionClasses
limit {
counter = 'INSTRUCTION'
minimum = project.minimumInstructionCoverage
}
}
}
}
jacocoTestCoverageVerification.dependsOn jacocoTestReport
check.dependsOn jacocoTestCoverageVerification
}