opentelemetry-java-instrume.../dd-java-agent/instrumentation/play-ws-1/src/test/groovy/PlayWSClientTest.groovy

137 lines
4.2 KiB
Groovy

import play.libs.ws.StandaloneWSClient
import play.libs.ws.StandaloneWSRequest
import play.libs.ws.StandaloneWSResponse
import play.libs.ws.ahc.StandaloneAhcWSClient
import scala.collection.JavaConverters
import scala.concurrent.Await
import scala.concurrent.ExecutionContext
import scala.concurrent.Future
import scala.concurrent.duration.Duration
import spock.lang.Shared
import spock.lang.Timeout
import java.util.concurrent.TimeUnit
@Timeout(5)
class PlayJavaWSClientTest extends PlayWSClientTestBase {
@Shared
StandaloneWSClient wsClient
@Override
int doRequest(String method, URI uri, Map<String, String> headers, Closure callback) {
StandaloneWSRequest wsRequest = wsClient.url(uri.toURL().toString()).setFollowRedirects(true)
headers.entrySet().each { entry -> wsRequest.addHeader(entry.getKey(), entry.getValue()) }
StandaloneWSResponse wsResponse = wsRequest.setMethod(method).execute()
.whenComplete({ response, throwable ->
callback?.call()
}).toCompletableFuture().get(5, TimeUnit.SECONDS)
return wsResponse.getStatus()
}
def setupSpec() {
wsClient = new StandaloneAhcWSClient(asyncHttpClient, materializer)
}
def cleanupSpec() {
wsClient?.close()
}
}
@Timeout(5)
class PlayJavaStreamedWSClientTest extends PlayWSClientTestBase {
@Shared
StandaloneWSClient wsClient
@Override
int doRequest(String method, URI uri, Map<String, String> headers, Closure callback) {
StandaloneWSRequest wsRequest = wsClient.url(uri.toURL().toString()).setFollowRedirects(true)
headers.entrySet().each { entry -> wsRequest.addHeader(entry.getKey(), entry.getValue()) }
StandaloneWSResponse wsResponse = wsRequest.setMethod(method).stream()
.whenComplete({ response, throwable ->
callback?.call()
}).toCompletableFuture().get(5, TimeUnit.SECONDS)
// The status can be ready before the body so explicity call wait for body to be ready
wsResponse.getBodyAsSource().runFold("", { acc, out -> "" }, materializer)
.toCompletableFuture().get(5, TimeUnit.SECONDS)
return wsResponse.getStatus()
}
def setupSpec() {
wsClient = new StandaloneAhcWSClient(asyncHttpClient, materializer)
}
def cleanupSpec() {
wsClient?.close()
}
}
@Timeout(5)
class PlayScalaWSClientTest extends PlayWSClientTestBase {
@Shared
play.api.libs.ws.StandaloneWSClient wsClient
@Override
int doRequest(String method, URI uri, Map<String, String> headers, Closure callback) {
Future<play.api.libs.ws.StandaloneWSResponse> futureResponse = wsClient.url(uri.toURL().toString())
.withMethod(method)
.withFollowRedirects(true)
.withHttpHeaders(JavaConverters.mapAsScalaMap(headers).toSeq())
.execute()
.transform({ theTry ->
callback?.call()
theTry
}, ExecutionContext.global())
play.api.libs.ws.StandaloneWSResponse wsResponse = Await.result(futureResponse, Duration.apply(5, TimeUnit.SECONDS))
return wsResponse.status()
}
def setupSpec() {
wsClient = new play.api.libs.ws.ahc.StandaloneAhcWSClient(asyncHttpClient, materializer)
}
def cleanupSpec() {
wsClient?.close()
}
}
@Timeout(5)
class PlayScalaStreamedWSClientTest extends PlayWSClientTestBase {
@Shared
play.api.libs.ws.StandaloneWSClient wsClient
@Override
int doRequest(String method, URI uri, Map<String, String> headers, Closure callback) {
Future<play.api.libs.ws.StandaloneWSResponse> futureResponse = wsClient.url(uri.toURL().toString())
.withMethod(method)
.withFollowRedirects(true)
.withHttpHeaders(JavaConverters.mapAsScalaMap(headers).toSeq())
.stream()
.transform({ theTry ->
callback?.call()
theTry
}, ExecutionContext.global())
play.api.libs.ws.StandaloneWSResponse wsResponse = Await.result(futureResponse, Duration.apply(5, TimeUnit.SECONDS))
// The status can be ready before the body so explicity call wait for body to be ready
Await.result(
wsResponse.bodyAsSource().runFold("", { acc, out -> "" }, materializer),
Duration.apply(5, TimeUnit.SECONDS))
return wsResponse.status()
}
def setupSpec() {
wsClient = new play.api.libs.ws.ahc.StandaloneAhcWSClient(asyncHttpClient, materializer)
}
def cleanupSpec() {
wsClient?.close()
}
}