Fixing tests and coverage

This commit is contained in:
Guillaume Polaert 2017-08-14 11:31:16 +02:00
parent 9145684491
commit eba8d3835f
3 changed files with 103 additions and 7 deletions

View File

@ -17,8 +17,6 @@ whitelistedInstructionClasses += whitelistedBranchClasses += [
'com.datadoghq.trace.DDTags',
'com.datadoghq.trace.DDTraceInfo',
'com.datadoghq.trace.util.Clock',
//TODO: Refactor the class in order to make it more testable
'com.datadoghq.trace.writer.DDAgentWriter',
]
@ -42,6 +40,8 @@ dependencies {
testCompile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.4'
testCompile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.4.4'
testCompile group: 'io.ratpack', name: 'ratpack-groovy-test', version: '1.4.6'
testCompile group: 'org.objenesis', name: 'objenesis', version: '2.6'
testCompile group: 'cglib', name: 'cglib-nodep', version: '3.2.5'
jmh 'commons-io:commons-io:2.4'
}

View File

@ -30,13 +30,13 @@ public class DDAgentWriter implements Writer {
public static final int DEFAULT_PORT = 8126;
/** Maximum number of traces kept in memory */
private static final int DEFAULT_MAX_TRACES = 1000;
static final int DEFAULT_MAX_TRACES = 1000;
/** Timeout for the API in seconds */
private static final long API_TIMEOUT_SECONDS = 1;
static final long API_TIMEOUT_SECONDS = 1;
/** Flush interval for the API in seconds */
private static final long FLUSH_TIME_SECONDS = 1;
static final long FLUSH_TIME_SECONDS = 1;
/** Scheduled thread pool, acting like a cron */
private final ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(1);
@ -57,9 +57,13 @@ public class DDAgentWriter implements Writer {
}
public DDAgentWriter(final DDApi api) {
this(api, new WriterQueue<List<DDBaseSpan<?>>>(DEFAULT_MAX_TRACES));
}
public DDAgentWriter(final DDApi api, final WriterQueue<List<DDBaseSpan<?>>> queue) {
super();
this.api = api;
traces = new WriterQueue<>(DEFAULT_MAX_TRACES);
traces = queue;
}
/* (non-Javadoc)
@ -67,7 +71,6 @@ public class DDAgentWriter implements Writer {
*/
@Override
public void write(final List<DDBaseSpan<?>> trace) {
final List<DDBaseSpan<?>> removed = traces.add(trace);
if (removed != null && !queueFullReported) {
log.debug("Queue is full, traces will be discarded, queue size: {}", DEFAULT_MAX_TRACES);

View File

@ -0,0 +1,93 @@
package com.datadoghq.trace.writer
import com.datadoghq.trace.DDBaseSpan
import spock.lang.Specification
import static com.datadoghq.trace.SpanFactory.newSpanOf
import static org.mockito.Mockito.mock
import static org.mockito.Mockito.verifyNoMoreInteractions
class DDAgentWriterTest extends Specification {
def "calls to the API are scheduled"() {
setup:
def api = Mock(DDApi)
def writer = new DDAgentWriter(api)
when:
writer.start()
Thread.sleep(flush_time_wait)
then:
0 * api.sendTraces(_ as List)
when:
for (def i = 0; i < tick; i++) {
writer.write(trace)
Thread.sleep(flush_time_wait)
}
then:
tick * api.sendTraces([trace])
where:
trace = [newSpanOf(0)]
flush_time_wait = (int) (1.2 * (DDAgentWriter.FLUSH_TIME_SECONDS * 1_000))
tick << [1, 3]
}
def "check if trace has been added by force"() {
setup:
def traces = new WriterQueue<List<DDBaseSpan<?>>>(capacity)
def writer = new DDAgentWriter(Mock(DDApi), traces)
when:
for (def i = 0; i < capacity; i++) {
writer.write([])
}
then:
traces.size() == capacity
when:
writer.write(trace)
then:
traces.size() == capacity
traces.getAll().contains(trace)
where:
trace = [newSpanOf(0)]
capacity = 10
}
def "check that are no interactions after close"() {
setup:
def api = mock(DDApi)
def writer = new DDAgentWriter(api)
writer.start()
when:
writer.close()
writer.write([])
Thread.sleep(flush_time_wait)
then:
verifyNoMoreInteractions(api)
where:
flush_time_wait = (int) (1.2 * (DDAgentWriter.FLUSH_TIME_SECONDS * 1_000))
}
}