PlayWSClientTest.groovy 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import akka.actor.ActorSystem
  2. import akka.stream.ActorMaterializer
  3. import akka.stream.ActorMaterializerSettings
  4. import datadog.trace.agent.test.base.HttpClientTest
  5. import datadog.trace.instrumentation.playws.PlayWSClientDecorator
  6. import play.libs.ws.StandaloneWSClient
  7. import play.libs.ws.StandaloneWSRequest
  8. import play.libs.ws.StandaloneWSResponse
  9. import play.libs.ws.ahc.StandaloneAhcWSClient
  10. import play.shaded.ahc.org.asynchttpclient.AsyncHttpClient
  11. import play.shaded.ahc.org.asynchttpclient.AsyncHttpClientConfig
  12. import play.shaded.ahc.org.asynchttpclient.DefaultAsyncHttpClient
  13. import play.shaded.ahc.org.asynchttpclient.DefaultAsyncHttpClientConfig
  14. import spock.lang.Shared
  15. import java.util.concurrent.TimeUnit
  16. class PlayWSClientTest extends HttpClientTest<PlayWSClientDecorator> {
  17. @Shared
  18. ActorSystem system
  19. @Shared
  20. StandaloneWSClient wsClient
  21. def setupSpec() {
  22. String name = "play-ws"
  23. system = ActorSystem.create(name)
  24. ActorMaterializerSettings settings = ActorMaterializerSettings.create(system)
  25. ActorMaterializer materializer = ActorMaterializer.create(settings, system, name)
  26. AsyncHttpClientConfig asyncHttpClientConfig =
  27. new DefaultAsyncHttpClientConfig.Builder()
  28. .setMaxRequestRetry(0)
  29. .setShutdownQuietPeriod(0)
  30. .setShutdownTimeout(0)
  31. .build()
  32. AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient(asyncHttpClientConfig)
  33. wsClient = new StandaloneAhcWSClient(asyncHttpClient, materializer)
  34. }
  35. def cleanupSpec() {
  36. wsClient?.close()
  37. system?.terminate()
  38. }
  39. @Override
  40. int doRequest(String method, URI uri, Map<String, String> headers, Closure callback) {
  41. StandaloneWSRequest wsRequest = wsClient.url(uri.toURL().toString()).setFollowRedirects(true)
  42. headers.entrySet().each { entry -> wsRequest.addHeader(entry.getKey(), entry.getValue()) }
  43. StandaloneWSResponse wsResponse = wsRequest.execute(method)
  44. .whenComplete({ response, throwable ->
  45. callback?.call()
  46. }).toCompletableFuture().get(5, TimeUnit.SECONDS)
  47. return wsResponse.getStatus()
  48. }
  49. @Override
  50. PlayWSClientDecorator decorator() {
  51. return PlayWSClientDecorator.DECORATE
  52. }
  53. String expectedOperationName() {
  54. return "play-ws.request"
  55. }
  56. @Override
  57. boolean testCircularRedirects() {
  58. return false
  59. }
  60. }