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