Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ apply from: "$rootDir/gradle/java.gradle"
dependencies {
compileOnly group: 'javax.ws.rs', name: 'jsr311-api', version: '1.1.1'

testImplementation libs.spock.junit4 // This legacy module still needs JUnit4.
testImplementation group: 'io.dropwizard', name: 'dropwizard-testing', version: '0.7.1'
testImplementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.2.3'
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ dependencies {
testImplementation project(':dd-java-agent:instrumentation:jax-rs-annotations-2:filter-resteasy-3.1')

// Jersey
// First version with DropwizardTestSupport:
testImplementation group: 'io.dropwizard', name: 'dropwizard-testing', version: '0.8.0'
testImplementation group: 'io.dropwizard', name: 'dropwizard-testing', version: '1.3.29' // Version compatible with Java 8 and JUnit5.
testImplementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
testImplementation group: 'com.fasterxml.jackson.module', name: 'jackson-module-afterburner', version: '2.9.10'

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import datadog.trace.agent.test.InstrumentationSpecification
import datadog.trace.api.DDSpanTypes
import datadog.trace.bootstrap.instrumentation.api.Tags
import io.dropwizard.testing.junit.ResourceTestRule
import org.junit.ClassRule
import io.dropwizard.testing.junit5.ResourceExtension
import spock.lang.Shared

import javax.ws.rs.core.Response
Expand All @@ -11,24 +10,31 @@ import static datadog.trace.agent.test.utils.TraceUtils.runUnderTrace

class NestedResourcesTest extends InstrumentationSpecification {
@Shared
@ClassRule
ResourceTestRule resources = ResourceTestRule.builder()
ResourceExtension resources = ResourceExtension.builder()
.addResource(new KeyCloakResources.AdminRoot())
.addResource(new KeyCloakResources.RealmsAdminResource())
.addResource(new KeyCloakResources.RealmAdminResource())
.addResource(new KeyCloakResources.UsersResource())
.addResource(new KeyCloakResources.UserResource())
.build()

// Spock has no support for JUnit5 extension.
def setupSpec() {
resources.before()
}

def cleanupSpec() {
resources.after()
}

def getClient() {
resources.client()
}

def "test nested calls"() {
when:
Response response
runUnderTrace("test.span") {
response = getClient().target("/admin/realms/realm1/users/53c82214-ca89-423b-a1f3-6a7784e61cf6").request().get()
Response response = runUnderTrace("test.span") {
getClient().target("/admin/realms/realm1/users/53c82214-ca89-423b-a1f3-6a7784e61cf6").request().get()
}

then:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import datadog.trace.agent.test.InstrumentationSpecification
import datadog.trace.api.DDSpanTypes
import datadog.trace.bootstrap.instrumentation.api.Tags
import io.dropwizard.testing.junit.ResourceTestRule
import io.dropwizard.testing.junit5.ResourceExtension
import org.jboss.resteasy.core.Dispatcher
import org.jboss.resteasy.mock.MockDispatcherFactory
import org.jboss.resteasy.mock.MockHttpRequest
import org.jboss.resteasy.mock.MockHttpResponse
import org.junit.ClassRule
import spock.lang.Shared

import javax.ws.rs.client.Entity
Expand Down Expand Up @@ -36,12 +35,9 @@ abstract class JaxRsFilterTest extends InstrumentationSpecification {
def abort = abortNormal || abortPrematch

when:
def responseText
def responseStatus

// start a trace because the test doesn't go through any servlet or other instrumentation.
runUnderTrace("test.span") {
(responseText, responseStatus) = makeRequest(resource)
def (responseText, responseStatus) = runUnderTrace("test.span") {
makeRequest(resource)
}

then:
Expand Down Expand Up @@ -104,12 +100,9 @@ abstract class JaxRsFilterTest extends InstrumentationSpecification {
prematchRequestFilter.abort = false

when:
def responseText
def responseStatus

// start a trace because the test doesn't go through any servlet or other instrumentation.
runUnderTrace("test.span") {
(responseText, responseStatus) = makeRequest(resource)
def (responseText, responseStatus) = runUnderTrace("test.span") {
makeRequest(resource)
}

then:
Expand Down Expand Up @@ -192,15 +185,23 @@ abstract class JaxRsFilterTest extends InstrumentationSpecification {

class JerseyFilterTest extends JaxRsFilterTest {
@Shared
@ClassRule
ResourceTestRule resources = ResourceTestRule.builder()
ResourceExtension resources = ResourceExtension.builder()
.addResource(new Resource.Test1())
.addResource(new Resource.Test2())
.addResource(new Resource.Test3())
.addProvider(simpleRequestFilter)
.addProvider(prematchRequestFilter)
.build()

// Spock has no support for JUnit5 extension.
def setupSpec() {
resources.before()
}

def cleanupSpec() {
resources.after()
}

@Override
def makeRequest(String url) {
Response response = resources.client().target(url).request().post(Entity.text(""))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ dependencies {
compileOnly group: 'org.apache.kafka', name: 'kafka-clients', version: '0.11.0.0'
implementation project(':dd-java-agent:instrumentation:kafka:kafka-common')

testImplementation libs.spock.junit4 // This legacy module still needs JUnit4.
testImplementation group: 'org.apache.kafka', name: 'kafka-clients', version: '0.11.0.0'
testImplementation group: 'org.springframework.kafka', name: 'spring-kafka', version: '1.3.3.RELEASE'
testImplementation group: 'org.springframework.kafka', name: 'spring-kafka-test', version: '1.3.3.RELEASE'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
ext {
minJavaVersionForTests = JavaVersion.VERSION_17
}

muzzle {
pass {
group = "org.apache.kafka"
Expand Down Expand Up @@ -31,23 +32,25 @@ tasks.withType(GroovyCompile).configureEach {
}

dependencies {
// compileOnly group: 'org.apache.kafka', name: 'kafka-clients', version: '3.8.0'
main_java17CompileOnly group: 'org.apache.kafka', name: 'kafka-clients', version: '3.8.0'
implementation project(':dd-java-agent:instrumentation:kafka:kafka-common')
main_java17Implementation project(':dd-java-agent:instrumentation:kafka:kafka-common')

implementation project(':dd-java-agent:instrumentation:span-origin')

testImplementation group: 'org.apache.kafka', name: 'kafka-clients', version: '3.8.0'
main_java17CompileOnly group: 'org.apache.kafka', name: 'kafka-clients', version: '3.8.0'
main_java17Implementation project(':dd-java-agent:instrumentation:kafka:kafka-common')

testImplementation group: 'org.springframework.kafka', name: 'spring-kafka', version: '3.3.4', {
exclude group: 'org.apache.kafka'
}
testImplementation group: 'org.springframework.kafka', name: 'spring-kafka-test', version: '3.3.4', {
exclude group: 'org.apache.kafka'
}

testImplementation 'org.apache.kafka:kafka-server-common:3.8.0:test'

testImplementation 'org.apache.kafka:kafka-clients:3.8.0'
testImplementation 'org.apache.kafka:kafka-clients:3.8.0:test'
testImplementation group: 'org.apache.kafka', name: 'kafka_2.13', version: '3.8.0'

testImplementation 'org.apache.kafka:kafka_2.13:3.8.0'
testImplementation 'org.apache.kafka:kafka_2.13:3.8.0:test'

testImplementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.2.3'
Expand All @@ -57,7 +60,5 @@ dependencies {
latestDepTestImplementation group: 'org.springframework.kafka', name: 'spring-kafka', version: '3.+'
latestDepTestImplementation group: 'org.springframework.kafka', name: 'spring-kafka-test', version: '3.+'
latestDepTestImplementation group: 'io.dropwizard.metrics', name: 'metrics-core', version: '+'

latestDepTestImplementation libs.guava

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.clients.producer.ProducerRecord
import org.apache.kafka.common.header.Headers
import org.apache.kafka.common.header.internals.RecordHeaders
import org.junit.Rule
import org.springframework.kafka.core.DefaultKafkaConsumerFactory
import org.springframework.kafka.core.DefaultKafkaProducerFactory
import org.springframework.kafka.core.KafkaTemplate
import org.springframework.kafka.listener.ContainerProperties
import org.springframework.kafka.listener.KafkaMessageListenerContainer
import org.springframework.kafka.listener.MessageListener
import org.springframework.kafka.test.EmbeddedKafkaBroker
import org.springframework.kafka.test.rule.EmbeddedKafkaRule
import org.springframework.kafka.test.EmbeddedKafkaKraftBroker
import org.springframework.kafka.test.utils.ContainerTestUtils
import org.springframework.kafka.test.utils.KafkaTestUtils
import spock.lang.Shared

import java.util.concurrent.LinkedBlockingQueue
import java.util.concurrent.TimeUnit
Expand All @@ -29,9 +29,17 @@ class KafkaClientCustomPropagationConfigTest extends InstrumentationSpecificatio
static final SHARED_TOPIC = ["topic1", "topic2", "topic3", "topic4"]
static final MESSAGE = "Testing without headers for certain topics"

@Rule
EmbeddedKafkaRule kafkaRule = new EmbeddedKafkaRule(1, true, SHARED_TOPIC.toArray(String[]::new))
EmbeddedKafkaBroker embeddedKafka = kafkaRule.embeddedKafka
@Shared
EmbeddedKafkaBroker embeddedKafka

def setupSpec() {
embeddedKafka = new EmbeddedKafkaKraftBroker(1, 2, *SHARED_TOPIC)
embeddedKafka.afterPropertiesSet()
}

def cleanupSpec() {
embeddedKafka.destroy()
}

static final dataTable() {
[
Expand Down Expand Up @@ -91,36 +99,36 @@ class KafkaClientCustomPropagationConfigTest extends InstrumentationSpecificatio

// setup a Kafka message listener
container1.setupMessageListener(new MessageListener<String, String>() {
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records1.add(record)
}
})
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records1.add(record)
}
})

container2.setupMessageListener(new MessageListener<String, String>() {
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records2.add(record)
}
})
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records2.add(record)
}
})

container3.setupMessageListener(new MessageListener<String, String>() {
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records3.add(record)
}
})
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records3.add(record)
}
})

container4.setupMessageListener(new MessageListener<String, String>() {
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records4.add(record)
}
})
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records4.add(record)
}
})

// start the container and underlying message listener
container1.start()
Expand Down Expand Up @@ -195,36 +203,36 @@ class KafkaClientCustomPropagationConfigTest extends InstrumentationSpecificatio

// setup a Kafka message listener
container1.setupMessageListener(new MessageListener<String, String>() {
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records1.add(activeSpan())
}
})
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records1.add(activeSpan())
}
})

container2.setupMessageListener(new MessageListener<String, String>() {
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records2.add(activeSpan())
}
})
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records2.add(activeSpan())
}
})

container3.setupMessageListener(new MessageListener<String, String>() {
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records3.add(activeSpan())
}
})
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records3.add(activeSpan())
}
})

container4.setupMessageListener(new MessageListener<String, String>() {
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records4.add(activeSpan())
}
})
@Override
void onMessage(ConsumerRecord<String, String> record) {
TEST_WRITER.waitForTraces(1) // ensure consistent ordering of traces
records4.add(activeSpan())
}
})

// start the container and underlying message listener
container1.start()
Expand All @@ -245,12 +253,12 @@ class KafkaClientCustomPropagationConfigTest extends InstrumentationSpecificatio
activateSpan(span).withCloseable {
for (String topic : SHARED_TOPIC) {
ProducerRecord record = new ProducerRecord<>(
topic,
0,
null,
MESSAGE,
header
)
topic,
0,
null,
MESSAGE,
header
)
kafkaTemplate.send(record as ProducerRecord<String, String>)
}
}
Expand Down Expand Up @@ -291,9 +299,7 @@ class KafkaClientCustomPropagationConfigTest extends InstrumentationSpecificatio
container3?.stop()
container4?.stop()


where:
[value, expected1, expected2, expected3, expected4]<< dataTable()
}

}
Loading