81 lines
2.3 KiB
Groovy
81 lines
2.3 KiB
Groovy
import akka.actor.ActorSystem
|
|
import akka.http.javadsl.Http
|
|
import akka.http.javadsl.model.HttpMethods
|
|
import akka.http.javadsl.model.HttpRequest
|
|
import akka.http.javadsl.model.headers.RawHeader
|
|
import akka.stream.ActorMaterializer
|
|
import datadog.trace.agent.test.base.HttpClientTest
|
|
import datadog.trace.api.DDSpanTypes
|
|
import datadog.trace.instrumentation.akkahttp.AkkaHttpClientDecorator
|
|
import io.opentracing.tag.Tags
|
|
import spock.lang.Shared
|
|
|
|
class AkkaHttpClientInstrumentationTest extends HttpClientTest<AkkaHttpClientDecorator> {
|
|
private static final long TIMEOUT = 10000L
|
|
|
|
@Shared
|
|
ActorSystem system = ActorSystem.create()
|
|
@Shared
|
|
ActorMaterializer materializer = ActorMaterializer.create(system)
|
|
|
|
// String readMessage(HttpResponse response) {
|
|
// response.entity().toStrict(TIMEOUT, materializer).toCompletableFuture().get().getData().utf8String()
|
|
// }
|
|
|
|
@Override
|
|
int doRequest(String method, URI uri, Map<String, String> headers, Closure callback) {
|
|
def request = HttpRequest.create(uri.toString())
|
|
.withMethod(HttpMethods.lookup(method).get())
|
|
.addHeaders(headers.collect { RawHeader.create(it.key, it.value) })
|
|
|
|
def response = Http.get(system).singleRequest(request, materializer).toCompletableFuture().get()
|
|
callback?.call()
|
|
return response.status().intValue()
|
|
}
|
|
|
|
@Override
|
|
AkkaHttpClientDecorator decorator() {
|
|
return AkkaHttpClientDecorator.DECORATE
|
|
}
|
|
|
|
@Override
|
|
String expectedOperationName() {
|
|
return "akka-http.request"
|
|
}
|
|
|
|
boolean testRedirects() {
|
|
false
|
|
}
|
|
|
|
def "singleRequest exception trace"() {
|
|
when:
|
|
// Passing null causes NPE in singleRequest
|
|
Http.get(system).singleRequest(null, materializer)
|
|
|
|
then:
|
|
thrown NullPointerException
|
|
assertTraces(1) {
|
|
trace(0, 1) {
|
|
span(0) {
|
|
parent()
|
|
serviceName "unnamed-java-app"
|
|
operationName "akka-http.request"
|
|
resourceName "akka-http.request"
|
|
spanType DDSpanTypes.HTTP_CLIENT
|
|
errored true
|
|
tags {
|
|
defaultTags()
|
|
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_CLIENT
|
|
"$Tags.COMPONENT.key" "akka-http-client"
|
|
"$Tags.ERROR.key" true
|
|
errorTags(NullPointerException)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
where:
|
|
renameService << [false, true]
|
|
}
|
|
}
|