Update Spring Tests

This commit is contained in:
Tyler Benson 2018-08-07 16:04:28 +10:00
parent 9d8548406b
commit 05dc51633a
1 changed files with 170 additions and 173 deletions

View File

@ -10,6 +10,8 @@ import org.springframework.boot.test.web.client.TestRestTemplate
import org.springframework.web.bind.MethodArgumentNotValidException
import org.springframework.web.util.NestedServletException
import static datadog.trace.agent.test.ListWriterAssert.assertTraces
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class SpringBootBasedTest extends AgentTestRunner {
@ -32,211 +34,206 @@ class SpringBootBasedTest extends AgentTestRunner {
def "generates spans"() {
expect:
restTemplate.getForObject("http://localhost:$port/param/asdf1234/", String) == "Hello asdf1234"
TEST_WRITER.waitForTraces(1)
TEST_WRITER.size() == 1
def trace = TEST_WRITER.firstTrace()
trace.size() == 1
def span = trace[0]
span.context().operationName == "servlet.request"
span.context().resourceName == "GET /param/{parameter}/"
span.context().spanType == DDSpanTypes.WEB_SERVLET
!span.context().getErrorFlag()
span.context().parentId == "0"
span.context().tags["http.url"] == "http://localhost:$port/param/asdf1234/"
span.context().tags["http.method"] == "GET"
span.context().tags["span.kind"] == "server"
span.context().tags["span.type"] == "web"
span.context().tags["component"] == "java-web-servlet"
span.context().tags["http.status_code"] == 200
span.context().tags["thread.name"] != null
span.context().tags["thread.id"] != null
span.context().tags.size() == 8
assertTraces(TEST_WRITER, 1) {
trace(0, 1) {
span(0) {
operationName "servlet.request"
resourceName "GET /param/{parameter}/"
spanType DDSpanTypes.WEB_SERVLET
parent()
errored false
tags {
"http.url" "http://localhost:$port/param/asdf1234/"
"http.method" "GET"
"span.kind" "server"
"span.type" "web"
"component" "java-web-servlet"
"http.status_code" 200
defaultTags()
}
}
}
}
}
def "generates 404 spans"() {
setup:
def response = restTemplate.getForObject("http://localhost:$port/invalid", Map)
expect:
response.get("status") == 404
response.get("error") == "Not Found"
TEST_WRITER.waitForTraces(2)
TEST_WRITER.size() == 2
and: // trace 0
def trace0 = TEST_WRITER.get(0)
trace0.size() == 1
def span0 = trace0[0]
span0.context().operationName == "servlet.request"
span0.context().resourceName == "404"
span0.context().spanType == DDSpanTypes.WEB_SERVLET
!span0.context().getErrorFlag()
span0.context().parentId == "0"
span0.context().tags["http.url"] == "http://localhost:$port/invalid"
span0.context().tags["http.method"] == "GET"
span0.context().tags["span.kind"] == "server"
span0.context().tags["span.type"] == "web"
span0.context().tags["component"] == "java-web-servlet"
span0.context().tags["http.status_code"] == 404
span0.context().tags["thread.name"] != null
span0.context().tags["thread.id"] != null
span0.context().tags.size() == 8
and: // trace 1
def trace1 = TEST_WRITER.get(1)
trace1.size() == 1
def span1 = trace1[0]
span1.context().operationName == "servlet.request"
span1.context().resourceName == "404"
span1.context().spanType == DDSpanTypes.WEB_SERVLET
!span1.context().getErrorFlag()
span1.context().parentId == "0"
span1.context().tags["http.url"] == "http://localhost:$port/error"
span1.context().tags["http.method"] == "GET"
span1.context().tags["span.kind"] == "server"
span1.context().tags["span.type"] == "web"
span1.context().tags["component"] == "java-web-servlet"
span1.context().tags["http.status_code"] == 404
span1.context().tags["thread.name"] != null
span1.context().tags["thread.id"] != null
span1.context().tags.size() == 8
assertTraces(TEST_WRITER, 2) {
trace(0, 1) {
span(0) {
operationName "servlet.request"
resourceName "404"
spanType DDSpanTypes.WEB_SERVLET
parent()
errored false
tags {
"http.url" "http://localhost:$port/invalid"
"http.method" "GET"
"span.kind" "server"
"span.type" "web"
"component" "java-web-servlet"
"http.status_code" 404
defaultTags()
}
}
}
trace(1, 1) {
span(0) {
operationName "servlet.request"
resourceName "404"
spanType DDSpanTypes.WEB_SERVLET
parent()
errored false
tags {
"http.url" "http://localhost:$port/error"
"http.method" "GET"
"span.kind" "server"
"span.type" "web"
"component" "java-web-servlet"
"http.status_code" 404
defaultTags()
}
}
}
}
}
def "generates error spans"() {
expect:
setup:
def response = restTemplate.getForObject("http://localhost:$port/error/qwerty/", Map)
expect:
response.get("status") == 500
response.get("error") == "Internal Server Error"
response.get("exception") == "java.lang.RuntimeException"
response.get("message") == "qwerty"
TEST_WRITER.waitForTraces(2)
TEST_WRITER.size() == 2
and: // trace 0
def trace0 = TEST_WRITER.get(0)
trace0.size() == 1
def span0 = trace0[0]
span0.context().operationName == "servlet.request"
span0.context().resourceName == "GET /error/{parameter}/"
span0.context().spanType == DDSpanTypes.WEB_SERVLET
span0.context().getErrorFlag()
span0.context().parentId == "0"
span0.context().tags["http.url"] == "http://localhost:$port/error/qwerty/"
span0.context().tags["http.method"] == "GET"
span0.context().tags["span.kind"] == "server"
span0.context().tags["span.type"] == "web"
span0.context().tags["component"] == "java-web-servlet"
span0.context().tags["http.status_code"] == 500
span0.context().tags["thread.name"] != null
span0.context().tags["thread.id"] != null
span0.context().tags["error"] == true
span0.context().tags["error.msg"] == "Request processing failed; nested exception is java.lang.RuntimeException: qwerty"
span0.context().tags["error.type"] == NestedServletException.getName()
span0.context().tags["error.stack"] != null
span0.context().tags.size() == 12
and: // trace 1
def trace1 = TEST_WRITER.get(1)
trace1.size() == 1
def span1 = trace1[0]
span1.context().operationName == "servlet.request"
span1.context().resourceName == "GET /error"
span1.context().spanType == DDSpanTypes.WEB_SERVLET
span1.context().parentId == "0"
span1.context().tags["http.url"] == "http://localhost:$port/error"
span1.context().tags["http.method"] == "GET"
span1.context().tags["span.kind"] == "server"
span1.context().tags["span.type"] == "web"
span1.context().tags["component"] == "java-web-servlet"
span1.context().tags["http.status_code"] == 500
span1.context().getErrorFlag()
span1.context().tags["thread.name"] != null
span1.context().tags["thread.id"] != null
span1.context().tags.size() == 9
assertTraces(TEST_WRITER, 2) {
trace(0, 1) {
span(0) {
operationName "servlet.request"
resourceName "GET /error/{parameter}/"
spanType DDSpanTypes.WEB_SERVLET
parent()
errored true
tags {
"http.url" "http://localhost:$port/error/qwerty/"
"http.method" "GET"
"span.kind" "server"
"span.type" "web"
"component" "java-web-servlet"
"http.status_code" 500
errorTags NestedServletException, "Request processing failed; nested exception is java.lang.RuntimeException: qwerty"
defaultTags()
}
}
}
trace(1, 1) {
span(0) {
operationName "servlet.request"
resourceName "GET /error"
spanType DDSpanTypes.WEB_SERVLET
parent()
errored true
tags {
"http.url" "http://localhost:$port/error"
"http.method" "GET"
"span.kind" "server"
"span.type" "web"
"component" "java-web-servlet"
"http.status_code" 500
"error" true
defaultTags()
}
}
}
}
}
def "validated form"() {
expect:
restTemplate.postForObject("http://localhost:$port/validated", new TestForm("bob", 20), String) == "Hello bob Person(Name: bob, Age: 20)"
TEST_WRITER.waitForTraces(1)
TEST_WRITER.size() == 1
def trace = TEST_WRITER.firstTrace()
trace.size() == 1
def span = trace[0]
span.context().operationName == "servlet.request"
span.context().resourceName == "POST /validated"
span.context().spanType == DDSpanTypes.WEB_SERVLET
!span.context().getErrorFlag()
span.context().parentId == "0"
span.context().tags["http.url"] == "http://localhost:$port/validated"
span.context().tags["http.method"] == "POST"
span.context().tags["span.kind"] == "server"
span.context().tags["span.type"] == "web"
span.context().tags["component"] == "java-web-servlet"
span.context().tags["http.status_code"] == 200
span.context().tags["thread.name"] != null
span.context().tags["thread.id"] != null
span.context().tags.size() == 8
assertTraces(TEST_WRITER, 1) {
trace(0, 1) {
span(0) {
operationName "servlet.request"
resourceName "POST /validated"
spanType DDSpanTypes.WEB_SERVLET
parent()
errored false
tags {
"http.url" "http://localhost:$port/validated"
"http.method" "POST"
"span.kind" "server"
"span.type" "web"
"component" "java-web-servlet"
"http.status_code" 200
defaultTags()
}
}
}
}
}
def "invalid form"() {
expect:
setup:
def response = restTemplate.postForObject("http://localhost:$port/validated", new TestForm("bill", 5), Map, Map)
expect:
response.get("status") == 400
response.get("error") == "Bad Request"
response.get("exception") == "org.springframework.web.bind.MethodArgumentNotValidException"
response.get("message") == "Validation failed for object='testForm'. Error count: 1"
TEST_WRITER.waitForTraces(2)
TEST_WRITER.size() == 2
and: // trace 0
def trace0 = TEST_WRITER.get(0)
trace0.size() == 1
def span0 = trace0[0]
span0.context().operationName == "servlet.request"
span0.context().resourceName == "POST /validated"
span0.context().spanType == DDSpanTypes.WEB_SERVLET
!span0.context().getErrorFlag() // This should be an error once we have the http status code decorator working.
span0.context().parentId == "0"
span0.context().tags["http.url"] == "http://localhost:$port/validated"
span0.context().tags["http.method"] == "POST"
span0.context().tags["span.kind"] == "server"
span0.context().tags["span.type"] == "web"
span0.context().tags["component"] == "java-web-servlet"
span0.context().tags["http.status_code"] == 400
span0.context().tags["thread.name"] != null
span0.context().tags["thread.id"] != null
// span0.context().tags["error"] == true // This should be an error once we have the http status code decorator working.
span0.context().tags["error.msg"].toString().startsWith("Validation failed")
span0.context().tags["error.type"] == MethodArgumentNotValidException.getName()
span0.context().tags["error.stack"] != null
span0.context().tags.size() == 12
and: // trace 1
def trace1 = TEST_WRITER.get(1)
trace1.size() == 1
def span1 = trace1[0]
span1.context().operationName == "servlet.request"
span1.context().resourceName == "POST /error"
span1.context().spanType == DDSpanTypes.WEB_SERVLET
!span1.context().getErrorFlag()
span1.context().parentId == "0"
span1.context().tags["http.url"] == "http://localhost:$port/error"
span1.context().tags["http.method"] == "POST"
span1.context().tags["span.kind"] == "server"
span1.context().tags["span.type"] == "web"
span1.context().tags["component"] == "java-web-servlet"
span1.context().tags["http.status_code"] == 400
span1.context().tags["thread.name"] != null
span1.context().tags["thread.id"] != null
span1.context().tags.size() == 8
assertTraces(TEST_WRITER, 2) {
trace(0, 1) {
span(0) {
operationName "servlet.request"
resourceName "POST /validated"
spanType DDSpanTypes.WEB_SERVLET
parent()
errored false
tags {
"http.url" "http://localhost:$port/validated"
"http.method" "POST"
"span.kind" "server"
"span.type" "web"
"component" "java-web-servlet"
"http.status_code" 400
"error" false
"error.msg" String
"error.type" MethodArgumentNotValidException.name
"error.stack" String
defaultTags()
}
}
}
trace(1, 1) {
span(0) {
operationName "servlet.request"
resourceName "POST /error"
spanType DDSpanTypes.WEB_SERVLET
parent()
errored false
tags {
"http.url" "http://localhost:$port/error"
"http.method" "POST"
"span.kind" "server"
"span.type" "web"
"component" "java-web-servlet"
"http.status_code" 400
defaultTags()
}
}
}
}
}
}