Update Ratpack latest test

This commit is contained in:
Tyler Benson 2019-06-15 10:05:17 -07:00
parent 6ccb0d71d8
commit 0e83304a87
1 changed files with 81 additions and 103 deletions

View File

@ -1,7 +1,3 @@
import static datadog.trace.agent.test.server.http.TestHttpServer.distributedRequestTrace
import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer
import static datadog.trace.agent.test.utils.PortUtils.UNUSABLE_PORT
import datadog.trace.agent.test.AgentTestRunner import datadog.trace.agent.test.AgentTestRunner
import datadog.trace.agent.test.utils.OkHttpUtils import datadog.trace.agent.test.utils.OkHttpUtils
import datadog.trace.api.DDSpanTypes import datadog.trace.api.DDSpanTypes
@ -12,8 +8,6 @@ import io.opentracing.Scope
import io.opentracing.Span import io.opentracing.Span
import io.opentracing.tag.Tags import io.opentracing.tag.Tags
import io.opentracing.util.GlobalTracer import io.opentracing.util.GlobalTracer
import java.util.concurrent.CountDownLatch
import java.util.regex.Pattern
import okhttp3.HttpUrl import okhttp3.HttpUrl
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
@ -26,21 +20,55 @@ import ratpack.http.client.HttpClient
import ratpack.path.PathBinding import ratpack.path.PathBinding
import ratpack.test.exec.ExecHarness import ratpack.test.exec.ExecHarness
import java.util.concurrent.CountDownLatch
import java.util.regex.Pattern
import static datadog.trace.agent.test.server.http.TestHttpServer.distributedRequestTrace
import static datadog.trace.agent.test.server.http.TestHttpServer.httpServer
import static datadog.trace.agent.test.utils.PortUtils.UNUSABLE_PORT
class RatpackTest extends AgentTestRunner { class RatpackTest extends AgentTestRunner {
OkHttpClient client = OkHttpUtils.client() OkHttpClient client = OkHttpUtils.client()
def "test path call"() { def "test bindings for #path"() {
setup: setup:
def app = GroovyEmbeddedApp.ratpack { def app = GroovyEmbeddedApp.ratpack {
handlers { handlers {
get { prefix("a") {
context.render("success") all {
context.render(context.get(PathBinding).description)
}
}
prefix("b/::\\d+") {
all {
context.render(context.get(PathBinding).description)
}
}
prefix("c/:val?") {
all {
context.render(context.get(PathBinding).description)
}
}
prefix("d/:val") {
all {
context.render(context.get(PathBinding).description)
}
}
prefix("e/:val?:\\d+") {
all {
context.render(context.get(PathBinding).description)
}
}
prefix("f/:val:\\d+") {
all {
context.render(context.get(PathBinding).description)
}
} }
} }
} }
def request = new Request.Builder() def request = new Request.Builder()
.url(app.address.toURL()) .url(HttpUrl.get(app.address).newBuilder().addPathSegments(path).build())
.get() .get()
.build() .build()
@ -49,12 +77,12 @@ class RatpackTest extends AgentTestRunner {
then: then:
resp.code() == 200 resp.code() == 200
resp.body.string() == "success" resp.body.string() == route
assertTraces(1) { assertTraces(1) {
trace(0, 2) { trace(0, 2) {
span(0) { span(0) {
resourceName "GET /" resourceName "GET /$route"
serviceName "unnamed-java-app" serviceName "unnamed-java-app"
operationName "netty.request" operationName "netty.request"
spanType DDSpanTypes.HTTP_SERVER spanType DDSpanTypes.HTTP_SERVER
@ -65,7 +93,7 @@ class RatpackTest extends AgentTestRunner {
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER "$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
"$Tags.HTTP_METHOD.key" "GET" "$Tags.HTTP_METHOD.key" "GET"
"$Tags.HTTP_STATUS.key" 200 "$Tags.HTTP_STATUS.key" 200
"$Tags.HTTP_URL.key" "$app.address" "$Tags.HTTP_URL.key" "${app.address.resolve(path)}"
"$Tags.PEER_HOSTNAME.key" "$app.address.host" "$Tags.PEER_HOSTNAME.key" "$app.address.host"
"$Tags.PEER_HOST_IPV4.key" "127.0.0.1" "$Tags.PEER_HOST_IPV4.key" "127.0.0.1"
"$Tags.PEER_PORT.key" Integer "$Tags.PEER_PORT.key" Integer
@ -73,7 +101,7 @@ class RatpackTest extends AgentTestRunner {
} }
} }
span(1) { span(1) {
resourceName "GET /" resourceName "GET /$route"
serviceName "unnamed-java-app" serviceName "unnamed-java-app"
operationName "ratpack.handler" operationName "ratpack.handler"
spanType DDSpanTypes.HTTP_SERVER spanType DDSpanTypes.HTTP_SERVER
@ -84,7 +112,7 @@ class RatpackTest extends AgentTestRunner {
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER "$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
"$Tags.HTTP_METHOD.key" "GET" "$Tags.HTTP_METHOD.key" "GET"
"$Tags.HTTP_STATUS.key" 200 "$Tags.HTTP_STATUS.key" 200
"$Tags.HTTP_URL.key" "$app.address" "$Tags.HTTP_URL.key" "${app.address.resolve(path)}"
"$Tags.PEER_HOSTNAME.key" "$app.address.host" "$Tags.PEER_HOSTNAME.key" "$app.address.host"
"$Tags.PEER_PORT.key" Integer "$Tags.PEER_PORT.key" Integer
defaultTags() defaultTags()
@ -92,85 +120,35 @@ class RatpackTest extends AgentTestRunner {
} }
} }
} }
}
def "test path with bindings call"() { where:
setup: path | route
def app = GroovyEmbeddedApp.ratpack { "a" | "a"
handlers { "b/123" | "b/::\\d+"
prefix(":foo/:bar?") { "c" | "c/:val?"
get("baz") {ctx -> "c/123" | "c/:val?"
context.render(ctx.get(PathBinding).description) "c/foo" | "c/:val?"
} "d/123" | "d/:val"
} "d/foo" | "d/:val"
} "e" | "e/:val?:\\d+"
} "e/123" | "e/:val?:\\d+"
def request = new Request.Builder() "e/foo" | "e/:val?:\\d+"
.url(HttpUrl.get(app.address).newBuilder().addPathSegments("a/b/baz").build()) "f/123" | "f/:val:\\d+"
.get()
.build()
when:
def resp = client.newCall(request).execute()
then:
resp.code() == 200
resp.body.string() == ":foo/:bar?/baz"
assertTraces(1) {
trace(0, 2) {
span(0) {
resourceName "GET /:foo/:bar?/baz"
serviceName "unnamed-java-app"
operationName "netty.request"
spanType DDSpanTypes.HTTP_SERVER
parent()
errored false
tags {
"$Tags.COMPONENT.key" "netty"
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
"$Tags.HTTP_METHOD.key" "GET"
"$Tags.HTTP_STATUS.key" 200
"$Tags.HTTP_URL.key" "${app.address}a/b/baz"
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
"$Tags.PEER_HOST_IPV4.key" "127.0.0.1"
"$Tags.PEER_PORT.key" Integer
defaultTags()
}
}
span(1) {
resourceName "GET /:foo/:bar?/baz"
serviceName "unnamed-java-app"
operationName "ratpack.handler"
spanType DDSpanTypes.HTTP_SERVER
childOf(span(0))
errored false
tags {
"$Tags.COMPONENT.key" "ratpack"
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
"$Tags.HTTP_METHOD.key" "GET"
"$Tags.HTTP_STATUS.key" 200
"$Tags.HTTP_URL.key" "${app.address}a/b/baz"
"$Tags.PEER_HOSTNAME.key" "$app.address.host"
"$Tags.PEER_PORT.key" Integer
defaultTags()
}
}
}
}
} }
def "test handler error response"() { def "test handler error response"() {
setup: setup:
def app = GroovyEmbeddedApp.ratpack { def app = GroovyEmbeddedApp.ratpack {
handlers { handlers {
get { prefix("handler-error") {
0 / 0 all {
0 / 0
}
} }
} }
} }
def request = new Request.Builder() def request = new Request.Builder()
.url(app.address.toURL()) .url(app.address.resolve("/handler-error?query=param").toURL())
.get() .get()
.build() .build()
when: when:
@ -181,7 +159,7 @@ class RatpackTest extends AgentTestRunner {
assertTraces(1) { assertTraces(1) {
trace(0, 2) { trace(0, 2) {
span(0) { span(0) {
resourceName "GET /" resourceName "GET /handler-error"
serviceName "unnamed-java-app" serviceName "unnamed-java-app"
operationName "netty.request" operationName "netty.request"
spanType DDSpanTypes.HTTP_SERVER spanType DDSpanTypes.HTTP_SERVER
@ -192,7 +170,7 @@ class RatpackTest extends AgentTestRunner {
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER "$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
"$Tags.HTTP_METHOD.key" "GET" "$Tags.HTTP_METHOD.key" "GET"
"$Tags.HTTP_STATUS.key" 500 "$Tags.HTTP_STATUS.key" 500
"$Tags.HTTP_URL.key" "$app.address" "$Tags.HTTP_URL.key" "${app.address.resolve('handler-error')}"
"$Tags.PEER_HOSTNAME.key" "$app.address.host" "$Tags.PEER_HOSTNAME.key" "$app.address.host"
"$Tags.PEER_HOST_IPV4.key" "127.0.0.1" "$Tags.PEER_HOST_IPV4.key" "127.0.0.1"
"$Tags.PEER_PORT.key" Integer "$Tags.PEER_PORT.key" Integer
@ -201,7 +179,7 @@ class RatpackTest extends AgentTestRunner {
} }
} }
span(1) { span(1) {
resourceName "GET /" resourceName "GET /handler-error"
serviceName "unnamed-java-app" serviceName "unnamed-java-app"
operationName "ratpack.handler" operationName "ratpack.handler"
spanType DDSpanTypes.HTTP_SERVER spanType DDSpanTypes.HTTP_SERVER
@ -212,7 +190,7 @@ class RatpackTest extends AgentTestRunner {
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER "$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
"$Tags.HTTP_METHOD.key" "GET" "$Tags.HTTP_METHOD.key" "GET"
"$Tags.HTTP_STATUS.key" 500 "$Tags.HTTP_STATUS.key" 500
"$Tags.HTTP_URL.key" "$app.address" "$Tags.HTTP_URL.key" "${app.address.resolve('handler-error')}"
"$Tags.PEER_HOSTNAME.key" "$app.address.host" "$Tags.PEER_HOSTNAME.key" "$app.address.host"
"$Tags.PEER_PORT.key" Integer "$Tags.PEER_PORT.key" Integer
errorTags(HandlerException, Pattern.compile("java.lang.ArithmeticException: Division( is)? undefined")) errorTags(HandlerException, Pattern.compile("java.lang.ArithmeticException: Division( is)? undefined"))
@ -227,7 +205,7 @@ class RatpackTest extends AgentTestRunner {
setup: setup:
def app = GroovyEmbeddedApp.ratpack { def app = GroovyEmbeddedApp.ratpack {
handlers { handlers {
get { get("promise-error") {
Promise.async { Promise.async {
0 / 0 0 / 0
}.then { }.then {
@ -237,7 +215,7 @@ class RatpackTest extends AgentTestRunner {
} }
} }
def request = new Request.Builder() def request = new Request.Builder()
.url(app.address.toURL()) .url(app.address.resolve("promise-error?query=param").toURL())
.get() .get()
.build() .build()
when: when:
@ -248,7 +226,7 @@ class RatpackTest extends AgentTestRunner {
assertTraces(1) { assertTraces(1) {
trace(0, 2) { trace(0, 2) {
span(0) { span(0) {
resourceName "GET /" resourceName "GET /promise-error"
serviceName "unnamed-java-app" serviceName "unnamed-java-app"
operationName "netty.request" operationName "netty.request"
spanType DDSpanTypes.HTTP_SERVER spanType DDSpanTypes.HTTP_SERVER
@ -259,7 +237,7 @@ class RatpackTest extends AgentTestRunner {
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER "$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
"$Tags.HTTP_METHOD.key" "GET" "$Tags.HTTP_METHOD.key" "GET"
"$Tags.HTTP_STATUS.key" 500 "$Tags.HTTP_STATUS.key" 500
"$Tags.HTTP_URL.key" "$app.address" "$Tags.HTTP_URL.key" "${app.address.resolve('promise-error')}"
"$Tags.PEER_HOSTNAME.key" "$app.address.host" "$Tags.PEER_HOSTNAME.key" "$app.address.host"
"$Tags.PEER_HOST_IPV4.key" "127.0.0.1" "$Tags.PEER_HOST_IPV4.key" "127.0.0.1"
"$Tags.PEER_PORT.key" Integer "$Tags.PEER_PORT.key" Integer
@ -268,7 +246,7 @@ class RatpackTest extends AgentTestRunner {
} }
} }
span(1) { span(1) {
resourceName "GET /" resourceName "GET /promise-error"
serviceName "unnamed-java-app" serviceName "unnamed-java-app"
operationName "ratpack.handler" operationName "ratpack.handler"
spanType DDSpanTypes.HTTP_SERVER spanType DDSpanTypes.HTTP_SERVER
@ -279,7 +257,7 @@ class RatpackTest extends AgentTestRunner {
"$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER "$Tags.SPAN_KIND.key" Tags.SPAN_KIND_SERVER
"$Tags.HTTP_METHOD.key" "GET" "$Tags.HTTP_METHOD.key" "GET"
"$Tags.HTTP_STATUS.key" 500 "$Tags.HTTP_STATUS.key" 500
"$Tags.HTTP_URL.key" "$app.address" "$Tags.HTTP_URL.key" "${app.address.resolve('promise-error')}"
"$Tags.PEER_HOSTNAME.key" "$app.address.host" "$Tags.PEER_HOSTNAME.key" "$app.address.host"
"$Tags.PEER_PORT.key" Integer "$Tags.PEER_PORT.key" Integer
"$Tags.ERROR.key" true "$Tags.ERROR.key" true
@ -294,7 +272,7 @@ class RatpackTest extends AgentTestRunner {
setup: setup:
def app = GroovyEmbeddedApp.ratpack { def app = GroovyEmbeddedApp.ratpack {
handlers { handlers {
get { all {
context.render(Promise.sync { context.render(Promise.sync {
return "fail " + 0 / 0 return "fail " + 0 / 0
}) })
@ -302,7 +280,7 @@ class RatpackTest extends AgentTestRunner {
} }
} }
def request = new Request.Builder() def request = new Request.Builder()
.url(app.address.toURL()) .url(app.address.resolve("?query=param").toURL())
.get() .get()
.build() .build()
when: when:
@ -374,13 +352,13 @@ class RatpackTest extends AgentTestRunner {
def app = GroovyEmbeddedApp.ratpack { def app = GroovyEmbeddedApp.ratpack {
handlers { handlers {
get {HttpClient httpClient -> get { HttpClient httpClient ->
// 1st internal http client call to nested // 1st internal http client call to nested
httpClient.get(HttpUrlBuilder.base(external.address).path("nested").build()) httpClient.get(HttpUrlBuilder.base(external.address).path("nested").build())
.map {it.body.text} .map { it.body.text }
.flatMap {t -> .flatMap { t ->
// make a 2nd http request and concatenate the two bodies together // make a 2nd http request and concatenate the two bodies together
httpClient.get(HttpUrlBuilder.base(external.address).path("nested2").build()) map {t + it.body.text} httpClient.get(HttpUrlBuilder.base(external.address).path("nested2").build()) map { t + it.body.text }
} }
.then { .then {
context.render(it) context.render(it)
@ -452,7 +430,7 @@ class RatpackTest extends AgentTestRunner {
serviceName "unnamed-java-app" serviceName "unnamed-java-app"
operationName "netty.client.request" operationName "netty.client.request"
spanType DDSpanTypes.HTTP_CLIENT spanType DDSpanTypes.HTTP_CLIENT
childOf(span(3)) childOf(span(1))
errored false errored false
tags { tags {
"$Tags.COMPONENT.key" "netty-client" "$Tags.COMPONENT.key" "netty-client"
@ -496,9 +474,9 @@ class RatpackTest extends AgentTestRunner {
def app = GroovyEmbeddedApp.ratpack { def app = GroovyEmbeddedApp.ratpack {
handlers { handlers {
get {HttpClient httpClient -> get { HttpClient httpClient ->
httpClient.get(badAddress) httpClient.get(badAddress)
.map {it.body.text} .map { it.body.text }
.then { .then {
context.render(it) context.render(it)
} }
@ -681,7 +659,7 @@ class RatpackTest extends AgentTestRunner {
scope.span().setBaggageItem("test-baggage", "foo") scope.span().setBaggageItem("test-baggage", "foo")
ParallelBatch.of(testPromise(), testPromise()) ParallelBatch.of(testPromise(), testPromise())
.yield() .yield()
.map({now -> .map({ now ->
// close the scope now that we got the baggage inside the promises // close the scope now that we got the baggage inside the promises
scope.close() scope.close()
return now return now