/dd-java-agent/instrumentation/akka-http-10.0/src/test/groovy/AkkaHttpServerInstrumentationTest.groovy

https://github.com/DataDog/dd-trace-java · Groovy · 97 lines · 76 code · 11 blank · 10 comment · 14 complexity · f66a4bbdd2e9737c4ef86833476822f3 MD5 · raw file

  1. import datadog.trace.agent.test.asserts.TraceAssert
  2. import datadog.trace.agent.test.base.HttpServerTest
  3. import datadog.trace.api.DDSpanTypes
  4. import datadog.trace.api.DDTags
  5. import datadog.trace.bootstrap.instrumentation.api.Tags
  6. import datadog.trace.instrumentation.akkahttp.AkkaHttpServerDecorator
  7. import spock.lang.Retry
  8. import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.EXCEPTION
  9. import static datadog.trace.agent.test.base.HttpServerTest.ServerEndpoint.SUCCESS
  10. abstract class AkkaHttpServerInstrumentationTest extends HttpServerTest<Object> {
  11. @Override
  12. String component() {
  13. return AkkaHttpServerDecorator.DECORATE.component()
  14. }
  15. @Override
  16. String expectedOperationName() {
  17. return "akka-http.request"
  18. }
  19. @Override
  20. boolean testExceptionBody() {
  21. false
  22. }
  23. // FIXME: This doesn't work because we don't support bindAndHandle.
  24. // @Override
  25. // def startServer(int port) {
  26. // AkkaHttpTestWebServer.start(port)
  27. // }
  28. //
  29. // @Override
  30. // void stopServer(Object ignore) {
  31. // AkkaHttpTestWebServer.stop()
  32. // }
  33. void serverSpan(TraceAssert trace, BigInteger traceID = null, BigInteger parentID = null, String method = "GET", ServerEndpoint endpoint = SUCCESS) {
  34. trace.span {
  35. serviceName expectedServiceName()
  36. operationName expectedOperationName()
  37. resourceName endpoint.status == 404 ? "404" : "$method ${endpoint.resolve(address).path}"
  38. spanType DDSpanTypes.HTTP_SERVER
  39. errored endpoint.errored
  40. if (parentID != null) {
  41. traceId traceID
  42. parentId parentID
  43. } else {
  44. parent()
  45. }
  46. tags {
  47. "$Tags.COMPONENT" component
  48. "$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER
  49. "$Tags.HTTP_URL" "${endpoint.resolve(address)}"
  50. "$Tags.HTTP_METHOD" method
  51. "$Tags.HTTP_STATUS" endpoint.status
  52. if (endpoint.errored) {
  53. "error.msg" { it == null || it == EXCEPTION.body }
  54. "error.type" { it == null || it == Exception.name }
  55. "error.stack" { it == null || it instanceof String }
  56. }
  57. if (endpoint.query) {
  58. "$DDTags.HTTP_QUERY" endpoint.query
  59. }
  60. defaultTags(true)
  61. }
  62. }
  63. }
  64. }
  65. @Retry
  66. class AkkaHttpServerInstrumentationTestSync extends AkkaHttpServerInstrumentationTest {
  67. @Override
  68. def startServer(int port) {
  69. AkkaHttpTestSyncWebServer.start(port)
  70. }
  71. @Override
  72. void stopServer(Object ignore) {
  73. AkkaHttpTestSyncWebServer.stop()
  74. }
  75. }
  76. @Retry
  77. class AkkaHttpServerInstrumentationTestAsync extends AkkaHttpServerInstrumentationTest {
  78. @Override
  79. def startServer(int port) {
  80. AkkaHttpTestAsyncWebServer.start(port)
  81. }
  82. @Override
  83. void stopServer(Object ignore) {
  84. AkkaHttpTestAsyncWebServer.stop()
  85. }
  86. }