FinatraServerTest.groovy 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /*
  2. * Copyright The OpenTelemetry Authors
  3. * SPDX-License-Identifier: Apache-2.0
  4. */
  5. import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.EXCEPTION
  6. import com.twitter.finatra.http.HttpServer
  7. import com.twitter.util.Await
  8. import com.twitter.util.Duration
  9. import io.opentelemetry.api.trace.StatusCode
  10. import io.opentelemetry.instrumentation.test.AgentTestTrait
  11. import io.opentelemetry.instrumentation.test.asserts.TraceAssert
  12. import io.opentelemetry.instrumentation.test.base.HttpServerTest
  13. import io.opentelemetry.sdk.trace.data.SpanData
  14. import java.util.concurrent.TimeUnit
  15. import static io.opentelemetry.api.trace.SpanKind.INTERNAL
  16. import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.NOT_FOUND
  17. import static io.opentelemetry.instrumentation.test.base.HttpServerTest.ServerEndpoint.SUCCESS
  18. import static org.awaitility.Awaitility.await
  19. class FinatraServerTest extends HttpServerTest<HttpServer> implements AgentTestTrait {
  20. private static final Duration TIMEOUT = Duration.fromSeconds(5)
  21. @Override
  22. HttpServer startServer(int port) {
  23. HttpServer testServer = new FinatraServer()
  24. // Starting the server is blocking so start it in a separate thread
  25. Thread startupThread = new Thread({
  26. testServer.main("-admin.port=:0", "-http.port=:" + port)
  27. })
  28. startupThread.setDaemon(true)
  29. startupThread.start()
  30. await()
  31. .atMost(1, TimeUnit.MINUTES)
  32. .until({ testServer.started() })
  33. return testServer
  34. }
  35. @Override
  36. void stopServer(HttpServer httpServer) {
  37. Await.ready(httpServer.close(), TIMEOUT)
  38. }
  39. @Override
  40. boolean hasHandlerSpan(ServerEndpoint endpoint) {
  41. endpoint != NOT_FOUND
  42. }
  43. @Override
  44. String expectedServerSpanName(ServerEndpoint endpoint) {
  45. return endpoint == NOT_FOUND ? "HTTP GET" : super.expectedServerSpanName(endpoint)
  46. }
  47. @Override
  48. boolean testPathParam() {
  49. true
  50. }
  51. @Override
  52. void handlerSpan(TraceAssert trace, int index, Object parent, String method = "GET", ServerEndpoint endpoint = SUCCESS) {
  53. trace.span(index) {
  54. name "FinatraController"
  55. kind INTERNAL
  56. childOf(parent as SpanData)
  57. if (endpoint == EXCEPTION) {
  58. status StatusCode.ERROR
  59. errorEvent(Exception, EXCEPTION.body)
  60. }
  61. attributes {
  62. }
  63. }
  64. }
  65. }