From 45578cca9f8298cdfc183c6c08e4e38b33390126 Mon Sep 17 00:00:00 2001 From: markiian Date: Fri, 6 Feb 2026 15:20:24 +0200 Subject: [PATCH 1/5] Initial commit --- pom.xml | 28 ++++++- .../testcontainers/Dependencies.groovy | 6 +- .../container/NetworkServiceContainer.groovy | 11 ++- .../container/PrebidServerContainer.groovy | 2 + .../testcontainers/scaffolding/Bidder.groovy | 66 +++++++++++----- .../scaffolding/CurrencyConversion.groovy | 11 +++ .../scaffolding/FloorsProvider.groovy | 17 ++++- .../scaffolding/HttpSettings.groovy | 76 +++++++++---------- .../scaffolding/NetworkScaffolding.groovy | 54 +++++++++---- .../scaffolding/PrebidCache.groovy | 16 +++- .../scaffolding/PubStackAnalytics.groovy | 11 +++ .../scaffolding/StoredCache.groovy | 15 +++- .../scaffolding/VendorList.groovy | 16 +++- .../model/BidderResponseTransformer.groovy | 40 ++++++++++ .../server/functional/tests/BaseSpec.groovy | 12 +-- .../functional/tests/HttpSettingsSpec.groovy | 36 +++++---- .../util/ObjectMapperWrapper.groovy | 2 +- .../server/it/CacheResponseTransformer.java | 28 +++++++ 18 files changed, 332 insertions(+), 115 deletions(-) create mode 100644 src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/model/BidderResponseTransformer.groovy create mode 100644 src/test/java/org/prebid/server/it/CacheResponseTransformer.java diff --git a/pom.xml b/pom.xml index b9f4a2eff8b..9ac3512d264 100644 --- a/pom.xml +++ b/pom.xml @@ -355,6 +355,20 @@ mockserver-client-java test + + + org.wiremock + wiremock + 3.13.1 + test + + + + org.wiremock.integrations.testcontainers + wiremock-testcontainers-module + 1.0-alpha-15 + test + org.influxdb influxdb-java @@ -367,6 +381,18 @@ ${project.name} + + maven-jar-plugin + + + build-test-jar + package + + test-jar + + + + org.apache.maven.plugins maven-compiler-plugin @@ -383,7 +409,7 @@ ${maven-surefire-plugin.version} - false + true ${skipUnitTests} diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy index ab614e0ca5f..2cb7aee0331 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy @@ -52,13 +52,15 @@ class Dependencies { localStackContainer = new LocalStackContainer(DockerImageName.parse("localstack/localstack:s3-latest")) .withNetwork(network) .withServices(S3) - Startables.deepStart([networkServiceContainer, mysqlContainer, localStackContainer, influxdbContainer]).join() + Startables.deepStart([networkServiceContainer, mysqlContainer, localStackContainer, + influxdbContainer]).join() } } static void stop() { if (IS_LAUNCH_CONTAINERS) { - [networkServiceContainer, mysqlContainer, localStackContainer, influxdbContainer].parallelStream() + [networkServiceContainer, mysqlContainer, localStackContainer, + influxdbContainer].parallelStream() .forEach({ it.stop() }) } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy index 8022f2e8dcc..58b4d08a864 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy @@ -1,16 +1,21 @@ package org.prebid.server.functional.testcontainers.container -import org.testcontainers.containers.MockServerContainer import org.testcontainers.containers.Network import org.testcontainers.utility.DockerImageName +import org.testcontainers.utility.MountableFile +import org.wiremock.integrations.testcontainers.WireMockContainer -class NetworkServiceContainer extends MockServerContainer { +class NetworkServiceContainer extends WireMockContainer { NetworkServiceContainer(String version) { - super(DockerImageName.parse("mockserver/mockserver:mockserver-$version")) + super(DockerImageName.parse("wiremock/wiremock:3.3.1")) def aliasWithTopLevelDomain = "${getNetworkAliases().first()}.com".toString() withCreateContainerCmdModifier { it.withHostName(aliasWithTopLevelDomain) } setNetworkAliases([aliasWithTopLevelDomain]) + withCopyFileToContainer( + MountableFile.forHostPath("/home/administrator/wiremock-docker/extensions/wiremock-grpc-extension-standalone-0.5.0.jar"), + "/var/wiremock/extensions" + ) } String getHostAndPort() { diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy index 70509252af6..530f06e6604 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy @@ -33,6 +33,7 @@ class PrebidServerContainer extends GenericContainer { .forPort(PORT) .forStatusCode(200)) withDebug() + withNetworkAliases("backend") withNetwork(Dependencies.network) def commonConfig = [:] << DEFAULT_ENV << PbsConfig.defaultBiddersConfig @@ -43,6 +44,7 @@ class PrebidServerContainer extends GenericContainer { << PbsConfig.prebidCacheConfig << PbsConfig.mySqlConfig << PbsConfig.targetingConfig + << PbsConfig.httpSettingsConfig withConfig(commonConfig) withConfig(customConfig) } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy index 05d6fcfa3d7..4c0333df919 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy @@ -1,50 +1,78 @@ package org.prebid.server.functional.testcontainers.scaffolding -import org.mockserver.matchers.TimeToLive -import org.mockserver.matchers.Times +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.mockserver.model.HttpRequest -import org.mockserver.model.HttpResponse import org.prebid.server.functional.model.bidderspecific.BidderRequest import org.prebid.server.functional.model.request.auction.Banner import org.prebid.server.functional.model.request.auction.BidRequest import org.prebid.server.functional.model.request.auction.Format import org.prebid.server.functional.model.request.auction.Imp import org.prebid.server.functional.model.response.auction.BidResponse -import org.testcontainers.containers.MockServerContainer +import org.wiremock.integrations.testcontainers.WireMockContainer +import static com.github.tomakehurst.wiremock.client.WireMock.*; import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response -import static org.mockserver.model.HttpStatusCode.OK_200 import static org.mockserver.model.JsonPathBody.jsonPath class Bidder extends NetworkScaffolding { - Bidder(MockServerContainer mockServerContainer, String endpoint = "/auction") { - super(mockServerContainer, endpoint) + Bidder(WireMockContainer wireMockContainer, String endpoint = "/auction") { + super(wireMockContainer, endpoint) } @Override protected HttpRequest getRequest(String bidRequestId) { request().withPath(endpoint) - .withBody(jsonPath("\$[?(@.id == '$bidRequestId')]")) + .withBody(jsonPath("\$[?(@.id == '$bidRequestId')]")) } @Override protected HttpRequest getRequest() { - request().withPath(endpoint) + return request().withPath(endpoint) + } + + @Override + protected RequestPatternBuilder getRequestPattern() { + postRequestedFor(urlEqualTo(endpoint)) + } + + @Override + protected RequestPatternBuilder getRequestPattern(String bidRequestId) { + postRequestedFor(urlEqualTo(endpoint)) + .withRequestBody(matchingJsonPath("\$.id", equalTo(bidRequestId))) } HttpRequest getRequest(String bidRequestId, String requestMatchPath) { request().withPath(endpoint) - .withBody(jsonPath("\$[?(@.$requestMatchPath == '$bidRequestId')]")) + .withBody(jsonPath("\$[?(@.$requestMatchPath == '$bidRequestId')]")) } @Override void setResponse() { - mockServerClient.when(request().withPath(endpoint), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond {request -> request.withPath(endpoint) - ? response().withStatusCode(OK_200.code()).withBody(getBodyByRequest(request)) - : HttpResponse.notFoundResponse()} + wireMockClient.register(any(urlPathEqualTo(endpoint)) + .atPriority(1) + .willReturn(aResponse() + .withTransformers("response-template") + .withStatus(200) + .withBody("{\n" + + " \"id\": \"{{jsonPath request.body '\$.id'}}\",\n" + + " \"seatbid\": [\n" + + " {\n" + + " \"bid\": [\n" + + " {\n" + + " \"id\": \"16d8142f-9449-48d7-9a03-42cc12ca49a0\",\n" + + " \"impid\": \"{{jsonPath request.body '\$.imp[0].id'}}\",\n" + + " \"price\": 8.381,\n" + + " \"crid\": \"1\",\n" + + " \"w\": 300,\n" + + " \"h\": 250\n" + + " }\n" + + " ],\n" + + " \"seat\": \"generic\"\n" + + " }\n" + + " ]\n" + + "}") + )) } List getBidderRequests(String bidRequestId) { @@ -66,9 +94,8 @@ class Bidder extends NetworkScaffolding { return getLastRecordedRequestHeaders(bidRequestId) } - private String getBodyByRequest(HttpRequest request) { - def requestString = request.bodyAsString - def jsonNode = toJsonNode(requestString) + private String getBodyByRequest(String body) { + def jsonNode = toJsonNode(body) def id = jsonNode.get("id").asText() def impNode = jsonNode.get("imp") def imps = impNode.collect { @@ -76,7 +103,8 @@ class Bidder extends NetworkScaffolding { new Imp(id: it.get("id").asText(), banner: formatNode != null ? new Banner(format: [new Format(width: formatNode.first().get("w").asInt(), height: formatNode.first().get("h").asInt())]) - : null)} + : null) + } def bidRequest = new BidRequest(id: id, imp: imps) def response = BidResponse.getDefaultBidResponse(bidRequest) encode(response) diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy index 6246f8c9f4d..8769d3efefd 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy @@ -1,5 +1,6 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.mockserver.model.HttpRequest import org.prebid.server.functional.model.mock.services.currencyconversion.CurrencyConversionRatesResponse import org.testcontainers.containers.MockServerContainer @@ -39,4 +40,14 @@ class CurrencyConversion extends NetworkScaffolding { request().withMethod("GET") .withPath(CURRENCY_ENDPOINT_PATH) } + + @Override + protected RequestPatternBuilder getRequestPattern() { + return null + } + + @Override + protected RequestPatternBuilder getRequestPattern(String value) { + return null + } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy index 77c18b09088..8d419e561fc 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy @@ -1,11 +1,12 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.mockserver.matchers.TimeToLive import org.mockserver.matchers.Times import org.mockserver.model.HttpRequest import org.mockserver.model.HttpResponse import org.prebid.server.functional.model.pricefloors.PriceFloorData -import org.testcontainers.containers.MockServerContainer +import org.wiremock.integrations.testcontainers.WireMockContainer import static org.mockserver.model.HttpRequest.request import static org.mockserver.model.HttpResponse.response @@ -15,8 +16,8 @@ class FloorsProvider extends NetworkScaffolding { public static final String FLOORS_ENDPOINT = "/floors-provider/" - FloorsProvider(MockServerContainer mockServerContainer) { - super(mockServerContainer, FLOORS_ENDPOINT) + FloorsProvider(WireMockContainer wireMockContainer) { + super(wireMockContainer, FLOORS_ENDPOINT) } @Override @@ -29,6 +30,16 @@ class FloorsProvider extends NetworkScaffolding { request().withPath(FLOORS_ENDPOINT) } + @Override + protected RequestPatternBuilder getRequestPattern() { + return null + } + + @Override + protected RequestPatternBuilder getRequestPattern(String value) { + return null + } + @Override void setResponse() { mockServerClient.when(request().withPath("^.*$endpoint.*\$"), Times.unlimited(), TimeToLive.unlimited(), -10) diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy index 5af648b2bc0..a4c8cc8732c 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy @@ -1,16 +1,19 @@ package org.prebid.server.functional.testcontainers.scaffolding -import org.mockserver.matchers.Times -import org.mockserver.model.Header +import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder +import com.github.tomakehurst.wiremock.stubbing.StubMapping import org.mockserver.model.HttpRequest import org.mockserver.model.HttpStatusCode import org.prebid.server.functional.model.ResponseModel -import org.testcontainers.containers.MockServerContainer +import org.wiremock.integrations.testcontainers.WireMockContainer +import static com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response import static org.mockserver.model.HttpStatusCode.OK_200 -import static org.mockserver.model.MediaType.APPLICATION_JSON class HttpSettings extends NetworkScaffolding { @@ -18,8 +21,8 @@ class HttpSettings extends NetworkScaffolding { private static final String RFC_ENDPOINT = "/stored-requests-rfc" private static final String AMP_ENDPOINT = "/amp-stored-requests" - HttpSettings(MockServerContainer mockServerContainer) { - super(mockServerContainer, ENDPOINT) + HttpSettings(WireMockContainer wireMockContainer, String endpoint = ENDPOINT) { + super(wireMockContainer, endpoint) } @Override @@ -30,52 +33,47 @@ class HttpSettings extends NetworkScaffolding { @Override protected HttpRequest getRequest() { - request().withPath(ENDPOINT) + request().withPath(endpoint) } @Override - void setResponse() { + protected RequestPatternBuilder getRequestPattern() { + return null } - protected HttpRequest getRfcRequest(String accountId) { - request().withPath(RFC_ENDPOINT) - .withQueryStringParameter("account-id", accountId) + @Override + protected RequestPatternBuilder getRequestPattern(String accountId) { + getRequestedFor(urlPathEqualTo(endpoint)) + .withQueryParam("account-ids", equalTo("[\"" + accountId + "\"]")) } - - void setRfcResponse(String value, - ResponseModel responseModel, - HttpStatusCode statusCode = OK_200, - Map headers = [:]) { - def responseHeaders = headers.collect { new Header(it.key, it.value) } - def mockResponse = encode(responseModel) - mockServerClient.when(getRfcRequest(value), Times.unlimited()) - .respond(response().withStatusCode(statusCode.code()) - .withBody(mockResponse, APPLICATION_JSON) - .withHeaders(responseHeaders)) + @Override + void setResponse() { } - int getRfcRequestCount(String value) { - mockServerClient.retrieveRecordedRequests(getRfcRequest(value)) - .size() + protected RequestPatternBuilder getRfcRequestPattern(String accountId) { + anyRequestedFor(urlPathEqualTo(endpoint)) + .withQueryParam("account-id", equalTo(accountId)) } - @Override - void reset() { - super.reset(ENDPOINT) - super.reset(RFC_ENDPOINT) - super.reset(AMP_ENDPOINT) - } + void setRfcResponse(String value, + ResponseModel responseModel, + HttpStatusCode statusCode = OK_200, + Map headers = [:]) { - static String getEndpoint() { - return ENDPOINT - } + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(statusCode.code()) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) + + headers.each { k, v -> + responseBuilder.withHeader(k, v) + } - static String getAmpEndpoint() { - return AMP_ENDPOINT + wireMockClient.register(new StubMapping(getRfcRequestPattern(value).build(), responseBuilder.build())) } - static String getRfcEndpoint() { - return RFC_ENDPOINT + int getRfcRequestCount(String value) { + return wireMockClient.find(getRfcRequestPattern(value)).size() } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy index 8ac5ad41483..33b1ecea946 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy @@ -1,5 +1,13 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder +import com.github.tomakehurst.wiremock.client.WireMock +import com.github.tomakehurst.wiremock.http.ResponseDefinition +import com.github.tomakehurst.wiremock.matching.RequestPattern +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder +import com.github.tomakehurst.wiremock.stubbing.ServeEvent +import com.github.tomakehurst.wiremock.stubbing.StubMapping +import com.github.tomakehurst.wiremock.verification.LoggedRequest import org.mockserver.client.MockServerClient import org.mockserver.matchers.Times import org.mockserver.model.ClearType @@ -8,10 +16,11 @@ import org.mockserver.model.HttpRequest import org.mockserver.model.HttpStatusCode import org.prebid.server.functional.model.ResponseModel import org.prebid.server.functional.util.ObjectMapperWrapper -import org.testcontainers.containers.MockServerContainer +import org.wiremock.integrations.testcontainers.WireMockContainer import java.util.concurrent.TimeUnit +import static com.github.tomakehurst.wiremock.client.WireMock.* import static java.util.concurrent.TimeUnit.SECONDS import static org.mockserver.model.ClearType.ALL import static org.mockserver.model.HttpRequest.request @@ -22,10 +31,11 @@ import static org.mockserver.model.MediaType.APPLICATION_JSON abstract class NetworkScaffolding implements ObjectMapperWrapper { protected MockServerClient mockServerClient + protected WireMock wireMockClient protected String endpoint - NetworkScaffolding(MockServerContainer mockServerContainer, String endpoint) { - this.mockServerClient = new MockServerClient(mockServerContainer.host, mockServerContainer.serverPort) + NetworkScaffolding(WireMockContainer wireMockContainer, String endpoint) { + this.wireMockClient = new WireMock(wireMockContainer.host, wireMockContainer.port) this.endpoint = endpoint } @@ -33,21 +43,21 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { abstract protected HttpRequest getRequest() + abstract protected RequestPatternBuilder getRequestPattern() + + abstract protected RequestPatternBuilder getRequestPattern(String value) + abstract void setResponse() int getRequestCount(HttpRequest httpRequest) { - mockServerClient.retrieveRecordedRequests(httpRequest) - .size() - } + return wireMockClient.find(getRequestPattern()).size() - int getRequestCount(String value) { - mockServerClient.retrieveRecordedRequests(getRequest(value)) - .size() + /* mockServerClient.retrieveRecordedRequests(httpRequest) + .size()*/ } - int getRequestCount() { - mockServerClient.retrieveRecordedRequests(request) - .size() + int getRequestCount(String value) { + return wireMockClient.find(getRequestPattern(value)).size() } void setResponse(HttpRequest httpRequest, @@ -70,12 +80,24 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { ResponseModel responseModel, HttpStatusCode statusCode = OK_200, Map headers = [:]) { - def responseHeaders = headers.collect { new Header(it.key, it.value) } + + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(statusCode.code()) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) + + headers.each { k, v -> + responseBuilder.withHeader(k, v) + } + + wireMockClient.register(new StubMapping(getRequestPattern(value).build(), responseBuilder.build())) + + /*def responseHeaders = headers.collect { new Header(it.key, it.value) } def mockResponse = encode(responseModel) mockServerClient.when(getRequest(value), Times.unlimited()) .respond(response().withStatusCode(statusCode.code()) .withBody(mockResponse, APPLICATION_JSON) - .withHeaders(responseHeaders)) + .withHeaders(responseHeaders))*/ } void setResponse(String value, @@ -127,12 +149,12 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { List getRecordedRequestsBody(HttpRequest httpRequest) { mockServerClient.retrieveRecordedRequests(httpRequest) - .collect { it.body.toString() } + .collect { it.body.toString() } } String getRecordedRequestsQueryParameters(HttpRequest httpRequest) { mockServerClient.retrieveRecordedRequests(httpRequest) - .collect { it -> it.queryStringParameters.multimap.toString()} + .collect { it -> it.queryStringParameters.multimap.toString() } } List getRecordedRequestsBody(String value) { diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy index 66ce54a9531..13c7a0d6ba8 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy @@ -1,5 +1,6 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.mockserver.matchers.TimeToLive import org.mockserver.matchers.Times import org.mockserver.model.HttpRequest @@ -10,6 +11,7 @@ import org.prebid.server.functional.model.request.cache.BidCacheRequest import org.prebid.server.functional.model.response.vtrack.TransferValue import org.prebid.server.functional.util.PBSUtils import org.testcontainers.containers.MockServerContainer +import org.wiremock.integrations.testcontainers.WireMockContainer import java.util.stream.Stream @@ -23,8 +25,8 @@ class PrebidCache extends NetworkScaffolding { private static final String CACHE_ENDPOINT = "/cache" - PrebidCache(MockServerContainer mockServerContainer) { - super(mockServerContainer, CACHE_ENDPOINT) + PrebidCache(WireMockContainer wireMockContainer) { + super(wireMockContainer, CACHE_ENDPOINT) } String getVTracGetRequestParams() { @@ -70,6 +72,16 @@ class PrebidCache extends NetworkScaffolding { .withPath(CACHE_ENDPOINT) } + @Override + protected RequestPatternBuilder getRequestPattern() { + return null + } + + @Override + protected RequestPatternBuilder getRequestPattern(String value) { + return null + } + @Override void setResponse() { mockServerClient.when(request() diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy index a3bd0e9ddfb..442dd2d3b33 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy @@ -1,5 +1,6 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.mockserver.model.HttpRequest import org.testcontainers.containers.MockServerContainer @@ -19,6 +20,16 @@ class PubStackAnalytics extends NetworkScaffolding { request().withPath(ANALYTICS_ENDPOINT) } + @Override + protected RequestPatternBuilder getRequestPattern() { + return null + } + + @Override + protected RequestPatternBuilder getRequestPattern(String value) { + return null + } + @Override void setResponse() { diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy index c8ad7caa924..3ed366ee61b 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy @@ -1,5 +1,7 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.WireMockServer +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.mockserver.matchers.TimeToLive import org.mockserver.matchers.Times import org.mockserver.model.HttpRequest @@ -13,7 +15,6 @@ import org.prebid.server.functional.model.config.TargetingResult import org.prebid.server.functional.model.request.auction.BidRequest import org.prebid.server.functional.model.request.auction.User import org.prebid.server.functional.util.PBSUtils -import org.testcontainers.containers.MockServerContainer import java.nio.charset.StandardCharsets @@ -26,7 +27,7 @@ class StoredCache extends NetworkScaffolding { private static final String CACHE_ENDPOINT = "/stored-cache" - StoredCache(MockServerContainer mockServerContainer) { + StoredCache(WireMockServer mockServerContainer) { super(mockServerContainer, CACHE_ENDPOINT) } @@ -39,6 +40,16 @@ class StoredCache extends NetworkScaffolding { .withPath(endpoint) } + @Override + protected RequestPatternBuilder getRequestPattern() { + return null + } + + @Override + protected RequestPatternBuilder getRequestPattern(String value) { + return null + } + @Override void setResponse() {} diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy index 343a118f53a..7adaa1f4001 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy @@ -1,11 +1,13 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.mockserver.matchers.TimeToLive import org.mockserver.matchers.Times import org.mockserver.model.Delay import org.mockserver.model.HttpRequest import org.mockserver.model.HttpResponse import org.testcontainers.containers.MockServerContainer +import org.wiremock.integrations.testcontainers.WireMockContainer import static org.mockserver.model.HttpRequest.request import static org.mockserver.model.HttpResponse.response @@ -22,8 +24,8 @@ class VendorList extends NetworkScaffolding { private static final String VENDOR_LIST_ENDPOINT = "/v{TCF_POLICY}/vendor-list.json" - VendorList(MockServerContainer mockServerContainer) { - super(mockServerContainer, VENDOR_LIST_ENDPOINT) + VendorList(WireMockContainer wireMockContainer) { + super(wireMockContainer, VENDOR_LIST_ENDPOINT) } @Override @@ -36,6 +38,16 @@ class VendorList extends NetworkScaffolding { request().withPath(VENDOR_LIST_ENDPOINT) } + @Override + protected RequestPatternBuilder getRequestPattern() { + return null + } + + @Override + protected RequestPatternBuilder getRequestPattern(String value) { + return null + } + @Override void reset() { TcfPolicyVersion.values().each { version -> super.reset("/v${version.vendorListVersion}/vendor-list.json") } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/model/BidderResponseTransformer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/model/BidderResponseTransformer.groovy new file mode 100644 index 00000000000..195ab741b86 --- /dev/null +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/model/BidderResponseTransformer.groovy @@ -0,0 +1,40 @@ +package org.prebid.server.functional.testcontainers.scaffolding.model + +import com.github.tomakehurst.wiremock.common.FileSource +import com.github.tomakehurst.wiremock.extension.Parameters +import com.github.tomakehurst.wiremock.extension.ResponseTransformer +import com.github.tomakehurst.wiremock.http.Request +import com.github.tomakehurst.wiremock.http.Response + +class BidderResponseTransformer extends ResponseTransformer { + + @Override + Response transform(Request request, Response response, FileSource files, Parameters parameters) { + return Response.response().body("{\n" + + " \"name\": \"John Doe\",\n" + + " \"age\": 30,\n" + + " \"isStudent\": false,\n" + + " \"car\": null\n" + + "}").build() + } + + @Override + String getName() { + return "BidderResponseTransformer"; // <-- саме таке ім’я треба використовувати + } + + @Override + boolean applyGlobally() { + return false; // трансформер застосовується тільки для stub з transformers("dynamic-body-transformer") + } + + @Override + void start() { + super.start() + } + + @Override + void stop() { + super.stop() + } +} diff --git a/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy index 13479030d1d..44ea40a4342 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy @@ -53,16 +53,16 @@ abstract class BaseSpec extends Specification implements ObjectMapperWrapper { protected static final PrebidServerService defaultPbsService = pbsServiceFactory.getService([:]) def setupSpec() { - prebidCache.setResponse() + // prebidCache.setResponse() bidder.setResponse() - vendorList.setResponse() + // vendorList.setResponse() } def cleanupSpec() { - bidder.reset() - prebidCache.reset() - repository.removeAllDatabaseData() - vendorList.reset() + /* bidder.reset() + prebidCache.reset() + repository.removeAllDatabaseData() + vendorList.reset()*/ } protected static int getRandomTimeout() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy index 4a0229122b6..38b2d11c347 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy @@ -15,6 +15,7 @@ import org.prebid.server.functional.testcontainers.PbsConfig import org.prebid.server.functional.testcontainers.scaffolding.HttpSettings import org.prebid.server.functional.util.PBSUtils import org.prebid.server.util.ResourceUtil +import spock.lang.IgnoreRest import static org.prebid.server.functional.model.bidder.BidderName.GENERIC import static org.prebid.server.functional.testcontainers.Dependencies.networkServiceContainer @@ -25,21 +26,18 @@ class HttpSettingsSpec extends BaseSpec { static PrebidServerService prebidServerService static PrebidServerService prebidServerServiceWithRfc + private static final String rfcEndpoint= "/stored-requests-rfc" private static final HttpSettings httpSettings = new HttpSettings(networkServiceContainer) + private static final HttpSettings httpSettingsWithRFC = new HttpSettings(networkServiceContainer, rfcEndpoint) private static final Map PBS_CONFIG_WITH_RFC = new HashMap<>(PbsConfig.httpSettingsConfig) + - ['settings.http.endpoint': "${networkServiceContainer.rootUri}${HttpSettings.rfcEndpoint}".toString(), - 'settings.http.rfc3986-compatible': 'true'] + ['settings.http.endpoint' : "${networkServiceContainer.rootUri}${rfcEndpoint}".toString(), + 'settings.http.rfc3986-compatible': 'true'] def setupSpec() { prebidServerService = pbsServiceFactory.getService(PbsConfig.httpSettingsConfig) prebidServerServiceWithRfc = pbsServiceFactory.getService(PBS_CONFIG_WITH_RFC) bidder.setResponse() - vendorList.setResponse() - } - - def cleanupSpec() { - prebidServerService = pbsServiceFactory.removeContainer(PbsConfig.httpSettingsConfig) - prebidServerService = pbsServiceFactory.removeContainer(PBS_CONFIG_WITH_RFC) + // vendorList.setResponse() } def "PBS should take account information from http data source on auction request"() { @@ -52,7 +50,7 @@ class HttpSettingsSpec extends BaseSpec { httpSettings.setResponse(bidRequest.accountId, httpSettingsResponse) when: "PBS processes auction request" - def response = prebidServerService.sendAuctionRequest(bidRequest) + def response = defaultPbsService.sendAuctionRequest(bidRequest) then: "Response should contain basic fields" assert response.id @@ -74,7 +72,7 @@ class HttpSettingsSpec extends BaseSpec { and: "Prepare default account response with gdpr = 0" def httpSettingsResponse = HttpAccountsResponse.getDefaultHttpAccountsResponse(bidRequest.accountId) - httpSettings.setRfcResponse(bidRequest.accountId, httpSettingsResponse) + httpSettingsWithRFC.setRfcResponse(bidRequest.accountId, httpSettingsResponse) when: "PBS processes auction request" def response = prebidServerServiceWithRfc.sendAuctionRequest(bidRequest) @@ -89,7 +87,7 @@ class HttpSettingsSpec extends BaseSpec { assert bidder.getRequestCount(bidRequest.id) == 1 and: "There should be only one account request" - assert httpSettings.getRfcRequestCount(bidRequest.accountId) == 1 + assert httpSettingsWithRFC.getRfcRequestCount(bidRequest.accountId) == 1 } def "PBS should take account information from http data source on AMP request"() { @@ -137,7 +135,7 @@ class HttpSettingsSpec extends BaseSpec { and: "Prepare default account response with gdpr = 0" def httpSettingsResponse = HttpAccountsResponse.getDefaultHttpAccountsResponse(ampRequest.account.toString()) - httpSettings.setRfcResponse(ampRequest.account.toString(), httpSettingsResponse) + httpSettingsWithRFC.setRfcResponse(ampRequest.account.toString(), httpSettingsResponse) when: "PBS processes amp request" def response = prebidServerServiceWithRfc.sendAmpRequest(ampRequest) @@ -146,7 +144,7 @@ class HttpSettingsSpec extends BaseSpec { assert !response.ext?.debug?.httpcalls?.isEmpty() and: "There should be only one account request" - assert httpSettings.getRfcRequestCount(ampRequest.account.toString()) == 1 + assert httpSettingsWithRFC.getRfcRequestCount(ampRequest.account.toString()) == 1 then: "Response should contain targeting" assert !response.ext?.debug?.httpcalls?.isEmpty() @@ -177,7 +175,7 @@ class HttpSettingsSpec extends BaseSpec { and: "Prepare default account response" def httpSettingsResponse = HttpAccountsResponse.getDefaultHttpAccountsResponse(eventRequest.accountId.toString()) - httpSettings.setRfcResponse(eventRequest.accountId.toString(), httpSettingsResponse) + httpSettingsWithRFC.setRfcResponse(eventRequest.accountId.toString(), httpSettingsResponse) when: "PBS processes event request" def responseBody = prebidServerServiceWithRfc.sendEventRequest(eventRequest) @@ -187,7 +185,7 @@ class HttpSettingsSpec extends BaseSpec { ResourceUtil.readByteArrayFromClassPath("org/prebid/server/functional/tracking-pixel.png") and: "There should be only one account request" - assert httpSettings.getRfcRequestCount(eventRequest.accountId.toString()) == 1 + assert httpSettingsWithRFC.getRfcRequestCount(eventRequest.accountId.toString()) == 1 } def "PBS should take account information from http data source on setuid request"() { @@ -227,8 +225,8 @@ class HttpSettingsSpec extends BaseSpec { def "PBS should take account information from http data source on setuid request when rfc3986 enabled"() { given: "Pbs config with adapters.generic.usersync.redirect.*" def pbsConfig = new HashMap<>(PbsConfig.httpSettingsConfig) + - ['settings.http.endpoint': "${networkServiceContainer.rootUri}${HttpSettings.rfcEndpoint}".toString(), - 'settings.http.rfc3986-compatible': 'true', + ['settings.http.endpoint' : "${networkServiceContainer.rootUri}${rfcEndpoint}".toString(), + 'settings.http.rfc3986-compatible' : 'true', 'adapters.generic.usersync.redirect.url' : "$networkServiceContainer.rootUri/generic-usersync&redir={{redirect_url}}".toString(), 'adapters.generic.usersync.redirect.support-cors' : 'false', 'adapters.generic.usersync.redirect.format-override': 'blank'] @@ -242,7 +240,7 @@ class HttpSettingsSpec extends BaseSpec { and: "Prepare default account response" def httpSettingsResponse = HttpAccountsResponse.getDefaultHttpAccountsResponse(request.account) - httpSettings.setRfcResponse(request.account, httpSettingsResponse) + httpSettingsWithRFC.setRfcResponse(request.account, httpSettingsResponse) when: "PBS processes setuid request" def response = prebidServerService.sendSetUidRequest(request, uidsCookie) @@ -254,7 +252,7 @@ class HttpSettingsSpec extends BaseSpec { ResourceUtil.readByteArrayFromClassPath("org/prebid/server/functional/tracking-pixel.png") and: "There should be only one account request" - assert httpSettings.getRfcRequestCount(request.account) == 1 + assert httpSettingsWithRFC.getRfcRequestCount(request.account) == 1 cleanup: "Stop and remove pbs container" pbsServiceFactory.removeContainer(pbsConfig) diff --git a/src/test/groovy/org/prebid/server/functional/util/ObjectMapperWrapper.groovy b/src/test/groovy/org/prebid/server/functional/util/ObjectMapperWrapper.groovy index 15106b6a55f..8106bdaa029 100644 --- a/src/test/groovy/org/prebid/server/functional/util/ObjectMapperWrapper.groovy +++ b/src/test/groovy/org/prebid/server/functional/util/ObjectMapperWrapper.groovy @@ -10,7 +10,7 @@ import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL trait ObjectMapperWrapper { - private static final ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(NON_NULL) + static final ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(NON_NULL) .registerModule(new ZonedDateTimeModule()) private static final YAMLMapper yamlMapper = new YAMLMapper().setSerializationInclusion(NON_NULL) as YAMLMapper private static final XmlMapper xmlMapper = new XmlMapper() diff --git a/src/test/java/org/prebid/server/it/CacheResponseTransformer.java b/src/test/java/org/prebid/server/it/CacheResponseTransformer.java new file mode 100644 index 00000000000..75abd3cab7e --- /dev/null +++ b/src/test/java/org/prebid/server/it/CacheResponseTransformer.java @@ -0,0 +1,28 @@ +package org.prebid.server.it; + +import com.github.tomakehurst.wiremock.common.FileSource; +import com.github.tomakehurst.wiremock.extension.Parameters; +import com.github.tomakehurst.wiremock.extension.ResponseTransformer; +import com.github.tomakehurst.wiremock.http.Request; + +public class CacheResponseTransformer extends ResponseTransformer { + + @Override + public com.github.tomakehurst.wiremock.http.Response transform( + Request request, com.github.tomakehurst.wiremock.http.Response response, FileSource files, + Parameters parameters) { + + return com.github.tomakehurst.wiremock.http.Response.response().body("\"id\":132").status(200).build(); + } + + @Override + public String getName() { + return "cache-response-transformer"; + } + + @Override + public boolean applyGlobally() { + return false; + } + +} From d6a5c0951d8405bd3e9b2a05011b9784fe2a8d33 Mon Sep 17 00:00:00 2001 From: markiian Date: Wed, 18 Feb 2026 12:31:07 +0200 Subject: [PATCH 2/5] WIP: Initial commit with replaced mock server on WireMock --- .../testcontainers/Dependencies.groovy | 3 +- .../container/NetworkServiceContainer.groovy | 13 +- .../container/PrebidServerContainer.groovy | 1 - .../testcontainers/scaffolding/Bidder.groovy | 118 ++++++------ .../scaffolding/CurrencyConversion.groovy | 31 ++-- .../scaffolding/FloorsProvider.groovy | 53 +++--- .../scaffolding/HttpSettings.groovy | 25 +-- .../scaffolding/NetworkScaffolding.groovy | 171 ++++++++---------- .../scaffolding/PrebidCache.groovy | 147 +++++++-------- .../scaffolding/PubStackAnalytics.groovy | 36 +--- .../scaffolding/StoredCache.groovy | 59 +++--- .../scaffolding/VendorList.groovy | 54 ++---- .../model/BidderResponseTransformer.groovy | 40 ---- .../server/functional/tests/BaseSpec.groovy | 11 +- .../functional/tests/CacheVtrackSpec.groovy | 6 +- .../functional/tests/HttpSettingsSpec.groovy | 9 +- .../tests/privacy/GdprAmpSpec.groovy | 2 +- .../tests/privacy/GdprAuctionSpec.groovy | 2 +- 18 files changed, 298 insertions(+), 483 deletions(-) delete mode 100644 src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/model/BidderResponseTransformer.groovy diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy index 2cb7aee0331..a04e5c99386 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy @@ -10,7 +10,6 @@ import org.testcontainers.containers.PostgreSQLContainer import org.testcontainers.lifecycle.Startables import org.testcontainers.utility.DockerImageName -import static org.prebid.server.functional.util.SystemProperties.MOCKSERVER_VERSION import static org.testcontainers.containers.localstack.LocalStackContainer.Service.S3 class Dependencies { @@ -42,7 +41,7 @@ class Dependencies { .withDatabase("prebid") .withNetwork(network) - static final NetworkServiceContainer networkServiceContainer = new NetworkServiceContainer(MOCKSERVER_VERSION) + static final NetworkServiceContainer networkServiceContainer = new NetworkServiceContainer() .withNetwork(network) static LocalStackContainer localStackContainer diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy index 58b4d08a864..ff8658038f7 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy @@ -1,21 +1,18 @@ package org.prebid.server.functional.testcontainers.container +import org.testcontainers.containers.GenericContainer import org.testcontainers.containers.Network import org.testcontainers.utility.DockerImageName -import org.testcontainers.utility.MountableFile -import org.wiremock.integrations.testcontainers.WireMockContainer -class NetworkServiceContainer extends WireMockContainer { +class NetworkServiceContainer extends GenericContainer { - NetworkServiceContainer(String version) { + NetworkServiceContainer() { super(DockerImageName.parse("wiremock/wiremock:3.3.1")) def aliasWithTopLevelDomain = "${getNetworkAliases().first()}.com".toString() withCreateContainerCmdModifier { it.withHostName(aliasWithTopLevelDomain) } setNetworkAliases([aliasWithTopLevelDomain]) - withCopyFileToContainer( - MountableFile.forHostPath("/home/administrator/wiremock-docker/extensions/wiremock-grpc-extension-standalone-0.5.0.jar"), - "/var/wiremock/extensions" - ) + //withCommand("--use-chunked-encoding", "never","--verbose") // doesn't relevant for us + withExposedPorts(8080) } String getHostAndPort() { diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy index 530f06e6604..04787489d2e 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy @@ -44,7 +44,6 @@ class PrebidServerContainer extends GenericContainer { << PbsConfig.prebidCacheConfig << PbsConfig.mySqlConfig << PbsConfig.targetingConfig - << PbsConfig.httpSettingsConfig withConfig(commonConfig) withConfig(customConfig) } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy index 4c0333df919..9ea9b6cce82 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy @@ -1,78 +1,78 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.model.HttpRequest import org.prebid.server.functional.model.bidderspecific.BidderRequest -import org.prebid.server.functional.model.request.auction.Banner -import org.prebid.server.functional.model.request.auction.BidRequest -import org.prebid.server.functional.model.request.auction.Format -import org.prebid.server.functional.model.request.auction.Imp -import org.prebid.server.functional.model.response.auction.BidResponse -import org.wiremock.integrations.testcontainers.WireMockContainer -import static com.github.tomakehurst.wiremock.client.WireMock.*; +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.JsonPathBody.jsonPath +import static com.github.tomakehurst.wiremock.client.WireMock.post +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo +import static com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse + +import static org.mockserver.model.HttpStatusCode.OK_200 class Bidder extends NetworkScaffolding { - Bidder(WireMockContainer wireMockContainer, String endpoint = "/auction") { + private static final String DEFAULT_BODY_RESPONSE = + ''' + { + "id": "{{jsonPath request.body '$.id'}}", + "seatbid": [ + { + "bid": [ + {{#each (jsonPath request.body '$.imp')}} + { + "id": "bid-{{randomInt}}", + "impid": "{{this.id}}", + "price": 10.0, + {{#if this.banner}} + "w": {{this.banner.format.[0].w}}, + "h": {{this.banner.format.[0].h}}, + {{/if}} + "crid": "creative-{{@index}}" + }{{#unless @last}},{{/unless}} + {{/each}} + ], + "seat": "generic" + } + ] + } + ''' + + Bidder(NetworkServiceContainer wireMockContainer, String endpoint = "/auction") { super(wireMockContainer, endpoint) } - @Override - protected HttpRequest getRequest(String bidRequestId) { - request().withPath(endpoint) - .withBody(jsonPath("\$[?(@.id == '$bidRequestId')]")) - } - - @Override - protected HttpRequest getRequest() { - return request().withPath(endpoint) - } - - @Override - protected RequestPatternBuilder getRequestPattern() { + protected RequestPattern getRequest() { postRequestedFor(urlEqualTo(endpoint)) + .build() } @Override - protected RequestPatternBuilder getRequestPattern(String bidRequestId) { - postRequestedFor(urlEqualTo(endpoint)) + protected RequestPatternBuilder getRequest(String bidRequestId) { + postRequestedFor(urlMatching("^$endpoint(\\?.*)?\$")) .withRequestBody(matchingJsonPath("\$.id", equalTo(bidRequestId))) } - HttpRequest getRequest(String bidRequestId, String requestMatchPath) { - request().withPath(endpoint) - .withBody(jsonPath("\$[?(@.$requestMatchPath == '$bidRequestId')]")) + RequestPattern getRequest(String bidRequestId, String requestMatchPath) { + postRequestedFor(urlMatching("^$endpoint(\\?.*)?\$")) + .withRequestBody(matchingJsonPath("\$[?(@." + requestMatchPath + " == '" + bidRequestId + "')]")) + .build() } @Override void setResponse() { - wireMockClient.register(any(urlPathEqualTo(endpoint)) - .atPriority(1) + wireMockClient.register(post(urlPathEqualTo(endpoint)) + .atPriority(Integer.MAX_VALUE) .willReturn(aResponse() .withTransformers("response-template") - .withStatus(200) - .withBody("{\n" + - " \"id\": \"{{jsonPath request.body '\$.id'}}\",\n" + - " \"seatbid\": [\n" + - " {\n" + - " \"bid\": [\n" + - " {\n" + - " \"id\": \"16d8142f-9449-48d7-9a03-42cc12ca49a0\",\n" + - " \"impid\": \"{{jsonPath request.body '\$.imp[0].id'}}\",\n" + - " \"price\": 8.381,\n" + - " \"crid\": \"1\",\n" + - " \"w\": 300,\n" + - " \"h\": 250\n" + - " }\n" + - " ],\n" + - " \"seat\": \"generic\"\n" + - " }\n" + - " ]\n" + - "}") - )) + .withStatus(OK_200.code()) + .withBody(DEFAULT_BODY_RESPONSE))) } List getBidderRequests(String bidRequestId) { @@ -93,20 +93,4 @@ class Bidder extends NetworkScaffolding { Map> getLastRecordedBidderRequestHeaders(String bidRequestId) { return getLastRecordedRequestHeaders(bidRequestId) } - - private String getBodyByRequest(String body) { - def jsonNode = toJsonNode(body) - def id = jsonNode.get("id").asText() - def impNode = jsonNode.get("imp") - def imps = impNode.collect { - def formatNode = it.get("banner") != null ? it.get("banner").get("format") : null - new Imp(id: it.get("id").asText(), - banner: formatNode != null - ? new Banner(format: [new Format(width: formatNode.first().get("w").asInt(), height: formatNode.first().get("h").asInt())]) - : null) - } - def bidRequest = new BidRequest(id: id, imp: imps) - def response = BidResponse.getDefaultBidResponse(bidRequest) - encode(response) - } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy index 8769d3efefd..7fc21564014 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy @@ -1,10 +1,12 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.model.HttpRequest import org.prebid.server.functional.model.mock.services.currencyconversion.CurrencyConversionRatesResponse -import org.testcontainers.containers.MockServerContainer +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo import static org.mockserver.model.HttpRequest.request import static org.mockserver.model.HttpResponse.response import static org.mockserver.model.HttpStatusCode.OK_200 @@ -15,39 +17,28 @@ class CurrencyConversion extends NetworkScaffolding { static final String CURRENCY_ENDPOINT_PATH = "/currency" private static final CurrencyConversionRatesResponse DEFAULT_RATES_RESPONSE = CurrencyConversionRatesResponse.getDefaultCurrencyConversionRatesResponse(DEFAULT_CURRENCY_RATES) - CurrencyConversion(MockServerContainer mockServerContainer) { + CurrencyConversion(NetworkServiceContainer mockServerContainer) { super(mockServerContainer, CURRENCY_ENDPOINT_PATH) } void setCurrencyConversionRatesResponse(CurrencyConversionRatesResponse conversionRatesResponse = DEFAULT_RATES_RESPONSE) { - setResponse(request, conversionRatesResponse) + setResponse(getRequest(), conversionRatesResponse) } @Override void setResponse() { mockServerClient.when(request().withPath(endpoint)) - .respond(response().withStatusCode(OK_200.code())) + .respond(response().withStatusCode(OK_200.code())) } @Override - protected HttpRequest getRequest(String ignored) { - request().withMethod("GET") - .withPath(CURRENCY_ENDPOINT_PATH) + protected RequestPattern getRequest() { + getRequestedFor(urlEqualTo(CURRENCY_ENDPOINT_PATH)) + .build() } @Override - protected HttpRequest getRequest() { - request().withMethod("GET") - .withPath(CURRENCY_ENDPOINT_PATH) - } - - @Override - protected RequestPatternBuilder getRequestPattern() { - return null - } - - @Override - protected RequestPatternBuilder getRequestPattern(String value) { + protected RequestPatternBuilder getRequest(String value) { return null } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy index 8d419e561fc..48c06a49287 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy @@ -1,54 +1,43 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.matchers.TimeToLive -import org.mockserver.matchers.Times -import org.mockserver.model.HttpRequest -import org.mockserver.model.HttpResponse +import org.mockserver.model.HttpStatusCode import org.prebid.server.functional.model.pricefloors.PriceFloorData -import org.wiremock.integrations.testcontainers.WireMockContainer - -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse +import static com.github.tomakehurst.wiremock.client.WireMock.any +import static com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo +import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching import static org.mockserver.model.HttpStatusCode.OK_200 class FloorsProvider extends NetworkScaffolding { public static final String FLOORS_ENDPOINT = "/floors-provider/" - FloorsProvider(WireMockContainer wireMockContainer) { + FloorsProvider(NetworkServiceContainer wireMockContainer) { super(wireMockContainer, FLOORS_ENDPOINT) } - @Override - protected HttpRequest getRequest(String accountId) { - request().withPath(FLOORS_ENDPOINT + accountId) - } - - @Override - protected HttpRequest getRequest() { - request().withPath(FLOORS_ENDPOINT) - } - - @Override - protected RequestPatternBuilder getRequestPattern() { - return null + protected RequestPattern getRequest() { + anyRequestedFor(urlEqualTo(FLOORS_ENDPOINT)) + .build() } @Override - protected RequestPatternBuilder getRequestPattern(String value) { - return null + protected RequestPatternBuilder getRequest(String accountId) { + getRequestedFor(urlEqualTo(FLOORS_ENDPOINT + accountId)) } @Override void setResponse() { - mockServerClient.when(request().withPath("^.*$endpoint.*\$"), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond{request -> request.withPath(endpoint) - ? response().withStatusCode(OK_200.code()).withBody(defaultResponse) - : HttpResponse.notFoundResponse()} - } - - private String getDefaultResponse() { - encode(PriceFloorData.priceFloorData) + wireMockClient.register(any(urlMatching("^.*$endpoint.*\$")) + .atPriority(Integer.MAX_VALUE) + .willReturn(aResponse() + .withStatus(OK_200.code()) + .withBody(encode(PriceFloorData.priceFloorData)))) } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy index a4c8cc8732c..d6e4f5727f6 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy @@ -1,18 +1,17 @@ package org.prebid.server.functional.testcontainers.scaffolding import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder +import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import com.github.tomakehurst.wiremock.stubbing.StubMapping -import org.mockserver.model.HttpRequest import org.mockserver.model.HttpStatusCode import org.prebid.server.functional.model.ResponseModel -import org.wiremock.integrations.testcontainers.WireMockContainer +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer import static com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.equalTo import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo -import static org.mockserver.model.HttpRequest.request import static org.mockserver.model.HttpStatusCode.OK_200 class HttpSettings extends NetworkScaffolding { @@ -21,28 +20,16 @@ class HttpSettings extends NetworkScaffolding { private static final String RFC_ENDPOINT = "/stored-requests-rfc" private static final String AMP_ENDPOINT = "/amp-stored-requests" - HttpSettings(WireMockContainer wireMockContainer, String endpoint = ENDPOINT) { + HttpSettings(NetworkServiceContainer wireMockContainer, String endpoint = ENDPOINT) { super(wireMockContainer, endpoint) } - @Override - protected HttpRequest getRequest(String accountId) { - request().withPath(ENDPOINT) - .withQueryStringParameter("account-ids", "[\"$accountId\"]") - } - - @Override - protected HttpRequest getRequest() { - request().withPath(endpoint) - } - - @Override - protected RequestPatternBuilder getRequestPattern() { - return null + protected RequestPattern getRequest() { + anyRequestedFor(urlPathEqualTo(endpoint)).build() } @Override - protected RequestPatternBuilder getRequestPattern(String accountId) { + protected RequestPatternBuilder getRequest(String accountId) { getRequestedFor(urlPathEqualTo(endpoint)) .withQueryParam("account-ids", equalTo("[\"" + accountId + "\"]")) } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy index 33b1ecea946..5f88d54b1ee 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy @@ -2,31 +2,16 @@ package org.prebid.server.functional.testcontainers.scaffolding import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder import com.github.tomakehurst.wiremock.client.WireMock -import com.github.tomakehurst.wiremock.http.ResponseDefinition import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import com.github.tomakehurst.wiremock.stubbing.ServeEvent import com.github.tomakehurst.wiremock.stubbing.StubMapping -import com.github.tomakehurst.wiremock.verification.LoggedRequest import org.mockserver.client.MockServerClient -import org.mockserver.matchers.Times -import org.mockserver.model.ClearType -import org.mockserver.model.Header -import org.mockserver.model.HttpRequest import org.mockserver.model.HttpStatusCode import org.prebid.server.functional.model.ResponseModel +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer import org.prebid.server.functional.util.ObjectMapperWrapper -import org.wiremock.integrations.testcontainers.WireMockContainer -import java.util.concurrent.TimeUnit - -import static com.github.tomakehurst.wiremock.client.WireMock.* -import static java.util.concurrent.TimeUnit.SECONDS -import static org.mockserver.model.ClearType.ALL -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response import static org.mockserver.model.HttpStatusCode.OK_200 -import static org.mockserver.model.MediaType.APPLICATION_JSON abstract class NetworkScaffolding implements ObjectMapperWrapper { @@ -34,40 +19,35 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { protected WireMock wireMockClient protected String endpoint - NetworkScaffolding(WireMockContainer wireMockContainer, String endpoint) { - this.wireMockClient = new WireMock(wireMockContainer.host, wireMockContainer.port) + NetworkScaffolding(NetworkServiceContainer wireMockContainer, String endpoint) { + this.wireMockClient = new WireMock(wireMockContainer.host, wireMockContainer.firstMappedPort) this.endpoint = endpoint } - abstract protected HttpRequest getRequest(String value) - - abstract protected HttpRequest getRequest() - - abstract protected RequestPatternBuilder getRequestPattern() + abstract protected RequestPattern getRequest() - abstract protected RequestPatternBuilder getRequestPattern(String value) + abstract protected RequestPatternBuilder getRequest(String value) abstract void setResponse() - int getRequestCount(HttpRequest httpRequest) { - return wireMockClient.find(getRequestPattern()).size() - - /* mockServerClient.retrieveRecordedRequests(httpRequest) - .size()*/ + int getRequestCount(RequestPatternBuilder requestPatternBuilder) { + return wireMockClient.find(requestPatternBuilder).size() } int getRequestCount(String value) { - return wireMockClient.find(getRequestPattern(value)).size() + return wireMockClient.find(getRequest(value)).size() } - void setResponse(HttpRequest httpRequest, + void setResponse(RequestPattern requestPattern, ResponseModel responseModel, - HttpStatusCode statusCode = OK_200, - Times times = Times.exactly(1)) { - def mockResponse = encode(responseModel) - mockServerClient.when(httpRequest, times) - .respond(response().withStatusCode(statusCode.code()) - .withBody(mockResponse, APPLICATION_JSON)) + HttpStatusCode statusCode = OK_200) { + + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(statusCode.code()) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) + + wireMockClient.register(new StubMapping(requestPattern, responseBuilder.build())) } void setResponse(String value, @@ -90,89 +70,87 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { responseBuilder.withHeader(k, v) } - wireMockClient.register(new StubMapping(getRequestPattern(value).build(), responseBuilder.build())) - - /*def responseHeaders = headers.collect { new Header(it.key, it.value) } - def mockResponse = encode(responseModel) - mockServerClient.when(getRequest(value), Times.unlimited()) - .respond(response().withStatusCode(statusCode.code()) - .withBody(mockResponse, APPLICATION_JSON) - .withHeaders(responseHeaders))*/ + wireMockClient.register(new StubMapping(getRequest(value).build(), responseBuilder.build())) } void setResponse(String value, ResponseModel responseModel, int responseDelay, - HttpStatusCode statusCode = OK_200, - Map headers = [:]) { - def responseHeaders = headers.collect { new Header(it.key, it.value) } - def mockResponse = encode(responseModel) - mockServerClient.when(getRequest(value), Times.unlimited()) - .respond(response().withStatusCode(statusCode.code()) - .withBody(mockResponse, APPLICATION_JSON) - .withHeaders(responseHeaders) - .withDelay(TimeUnit.MILLISECONDS, responseDelay)) + HttpStatusCode statusCode = OK_200) { + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(statusCode.code()) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) + .withFixedDelay(responseDelay) + + wireMockClient.register(new StubMapping(getRequest(value).build(), responseBuilder.build())) } void setResponse(String value, String mockResponse) { - mockServerClient.when(getRequest(value), Times.exactly(1)) - .respond(response().withStatusCode(OK_200.code()) - .withBody(mockResponse, APPLICATION_JSON)) + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(OK_200.code()) + .withBody(mockResponse) + + wireMockClient.register(new StubMapping(getRequest(value).build(), responseBuilder.build())) } void setResponse(ResponseModel responseModel) { - def mockResponse = encode(responseModel) - mockServerClient.when(request().withPath(endpoint)) - .respond(response().withStatusCode(OK_200.code()) - .withBody(mockResponse, APPLICATION_JSON)) + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(OK_200.code()) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) + + wireMockClient.register(new StubMapping(getRequest(), responseBuilder.build())) } void setResponse(String value, HttpStatusCode httpStatusCode) { - mockServerClient.when(getRequest(value), Times.exactly(1)) - .respond(response().withStatusCode(httpStatusCode.code())) - } + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(httpStatusCode.code()) - void setResponse(String value, HttpStatusCode httpStatusCode, String errorText) { - mockServerClient.when(getRequest(value), Times.exactly(1)) - .respond(response().withStatusCode(httpStatusCode.code()) - .withBody(errorText, APPLICATION_JSON)) + wireMockClient.register(new StubMapping(getRequest(value).build(), responseBuilder.build())) } void setResponseWithTimeout(String value, int timeoutSec = 5) { - mockServerClient.when(getRequest(value), Times.exactly(1)) - .respond(response().withDelay(SECONDS, timeoutSec)) - } + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withFixedDelay(timeoutSec * 1000) - protected def getRequestAndResponse() { - mockServerClient.retrieveRecordedRequestsAndResponses(request()) + wireMockClient.register(new StubMapping(getRequest(value).build(), responseBuilder.build())) } - List getRecordedRequestsBody(HttpRequest httpRequest) { - mockServerClient.retrieveRecordedRequests(httpRequest) - .collect { it.body.toString() } + List getRecordedRequestsBody(RequestPatternBuilder requestPatternBuilder) { + wireMockClient.find(requestPatternBuilder).bodyAsString } - String getRecordedRequestsQueryParameters(HttpRequest httpRequest) { - mockServerClient.retrieveRecordedRequests(httpRequest) - .collect { it -> it.queryStringParameters.multimap.toString() } + String getRecordedRequestsQueryParameters(RequestPatternBuilder requestPatternBuilder) { + wireMockClient.find(requestPatternBuilder) + .collect { + it.queryParams.collectEntries { k, v -> + [(k): v.values()] + }.toString() + } } List getRecordedRequestsBody(String value) { - mockServerClient.retrieveRecordedRequests(getRequest(value)) - .collect { it.body.toString() } + wireMockClient.find(getRequest(value)).bodyAsString } - List getRecordedRequestsBody() { - mockServerClient.retrieveRecordedRequests(request) - .collect { it.body.toString() } + Map> getLastRecordedRequestHeaders(RequestPatternBuilder requestPatternBuilder) { + getRecordedRequestsHeaders(requestPatternBuilder).last() } - Map> getLastRecordedRequestHeaders(HttpRequest httpRequest) { - getRecordedRequestsHeaders(httpRequest).last() - } + List>> getRecordedRequestsHeaders(RequestPatternBuilder requestPatternBuilder) { + def requests = wireMockClient.find(requestPatternBuilder) + + List>> result = [] + requests.each { req -> + Map> headersMap = [:] + req.headers.all().each { header -> + headersMap[header.key() as String] = header.values()*.toString() + } + result << headersMap + } - List>> getRecordedRequestsHeaders(HttpRequest httpRequest) { - getRequestsHeaders(mockServerClient.retrieveRecordedRequests(httpRequest) as List) + result } Map> getLastRecordedRequestHeaders(String value) { @@ -180,17 +158,12 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { } List>> getRecordedRequestsHeaders(String value) { - getRequestsHeaders(mockServerClient.retrieveRecordedRequests(getRequest(value)) as List) - } - - // should be used instead of mockServerClient.reset due to memory leak on library - void reset(String resetEndpoint = endpoint, ClearType clearType = ALL) { - mockServerClient.clear(request().withPath(resetEndpoint), clearType) + getRecordedRequestsHeaders(getRequest(value)) } - private static List>> getRequestsHeaders(List httpRequests) { - httpRequests*.headerList*.collectEntries { header -> - [header.name as String, header.values.collect { it as String }] - } + void reset() { + wireMockClient.resetMappings() + wireMockClient.resetScenarios() + wireMockClient.resetRequests() } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy index 13c7a0d6ba8..25cade1b3e4 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy @@ -1,41 +1,49 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.matchers.TimeToLive -import org.mockserver.matchers.Times -import org.mockserver.model.HttpRequest -import org.mockserver.model.HttpResponse -import org.prebid.server.functional.model.mock.services.prebidcache.response.CacheObject -import org.prebid.server.functional.model.mock.services.prebidcache.response.PrebidCacheResponse import org.prebid.server.functional.model.request.cache.BidCacheRequest import org.prebid.server.functional.model.response.vtrack.TransferValue +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer import org.prebid.server.functional.util.PBSUtils -import org.testcontainers.containers.MockServerContainer -import org.wiremock.integrations.testcontainers.WireMockContainer -import java.util.stream.Stream - -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response +import static java.lang.Integer.MAX_VALUE import static org.mockserver.model.HttpStatusCode.INTERNAL_SERVER_ERROR_500 import static org.mockserver.model.HttpStatusCode.OK_200 -import static org.mockserver.model.JsonPathBody.jsonPath +import static com.github.tomakehurst.wiremock.client.WireMock.post +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo +import static com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse +import static com.github.tomakehurst.wiremock.client.WireMock.get +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor class PrebidCache extends NetworkScaffolding { private static final String CACHE_ENDPOINT = "/cache" - - PrebidCache(WireMockContainer wireMockContainer) { + private static final String RESPONSE_BODY = + ''' + { + "responses" : [ + {{#each (jsonPath request.body '$.puts')}} + { + "uuid" : "{{randomValue type='UUID'}}" + }{{#unless @last}},{{/unless}} + {{/each}} + ] + } + ''' + + + PrebidCache(NetworkServiceContainer wireMockContainer) { super(wireMockContainer, CACHE_ENDPOINT) } String getVTracGetRequestParams() { - getRecordedRequestsQueryParameters(request().withMethod("GET") - .withPath(CACHE_ENDPOINT)) - } - - void setXmlCacheResponse(String payload, PrebidCacheResponse prebidCacheResponse) { - setResponse(getXmlCacheRequest(payload), prebidCacheResponse) + getRecordedRequestsQueryParameters(getRequestedFor(urlMatching("^/cache(\\?.*)?\$"))) } int getXmlRequestCount(String payload) { @@ -46,94 +54,63 @@ class PrebidCache extends NetworkScaffolding { getRecordedRequestsBody(getXmlCacheRequest(payload)) } - Map getXmlRecordedRequestHeaders(String payload) { - getLastRecordedRequestHeaders(getXmlCacheRequest(payload)) + protected RequestPattern getRequest() { + postRequestedFor(urlEqualTo(endpoint)) + .build() } @Override - protected HttpRequest getRequest(String impId) { - request().withMethod("POST") - .withPath(CACHE_ENDPOINT) - .withBody(jsonPath("\$.puts[?(@.value.impid == '$impId')]")) + protected RequestPatternBuilder getRequest(String impId) { + postRequestedFor(urlEqualTo(CACHE_ENDPOINT)) + .withRequestBody(matchingJsonPath("\$.puts[?(@.value.impid == '" + impId + "')]")) } + List getRecordedRequests(String impId) { - mockServerClient.retrieveRecordedRequests(getRequest(impId)) - .collect { decode(it.body.toString(), BidCacheRequest) } + wireMockClient.find(getRequest(impId)).bodyAsString + .collect { decode(it, BidCacheRequest) } } Map> getRequestHeaders(String impId) { getLastRecordedRequestHeaders(getRequest(impId)) } - @Override - HttpRequest getRequest() { - request().withMethod("POST") - .withPath(CACHE_ENDPOINT) - } - - @Override - protected RequestPatternBuilder getRequestPattern() { - return null - } - - @Override - protected RequestPatternBuilder getRequestPattern(String value) { - return null - } - @Override void setResponse() { - mockServerClient.when(request() - .withMethod("POST") - .withPath(endpoint), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond { request -> - request.withPath(endpoint) - ? response().withStatusCode(OK_200.code()).withBody(getBodyByRequest(request)) - : HttpResponse.notFoundResponse() - } + wireMockClient.register(post(urlPathEqualTo(endpoint)) + .atPriority(MAX_VALUE) + .willReturn(aResponse() + .withTransformers("response-template") + .withStatus(OK_200.code()) + .withBody(RESPONSE_BODY))) } void setGetResponse(TransferValue vTrackResponse) { - mockServerClient.when(request() - .withMethod("GET") - .withPath(endpoint), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond { request -> - request.withPath(endpoint) - ? response().withStatusCode(OK_200.code()).withBody(encode(vTrackResponse)) - : HttpResponse.notFoundResponse() - } + wireMockClient.register(get(urlPathEqualTo(endpoint)) + .atPriority(MAX_VALUE) + .willReturn(aResponse() + .withStatus(OK_200.code()) + .withBody(encode(vTrackResponse)))) } void setInvalidPostResponse() { - mockServerClient.when(request() - .withMethod("POST") - .withPath(endpoint), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond { response().withStatusCode(INTERNAL_SERVER_ERROR_500.code()) } + wireMockClient.register(post(urlPathEqualTo(endpoint)) + .atPriority(MAX_VALUE) + .willReturn(aResponse() + .withStatus(INTERNAL_SERVER_ERROR_500.code()))) } void setInvalidGetResponse(String uuid, String errorMessage = PBSUtils.randomString) { - mockServerClient.when(request() - .withMethod("GET") - .withPath(endpoint) - .withQueryStringParameter("uuid", uuid), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond { response().withBody(errorMessage).withStatusCode(INTERNAL_SERVER_ERROR_500.code()) } - - } - - private static HttpRequest getXmlCacheRequest(String payload) { - request().withMethod("POST") - .withPath(CACHE_ENDPOINT) - .withBody(jsonPath("\$.puts[?(@.value =~/^.*$payload.*\$/)]")) + wireMockClient.register(get(urlPathEqualTo(endpoint)) + .withQueryParam("uuid", equalTo(uuid)) + .atPriority(MAX_VALUE) + .willReturn(aResponse() + .withStatus(INTERNAL_SERVER_ERROR_500.code()) + .withBody(errorMessage))) } - private String getBodyByRequest(HttpRequest request) { - def requestString = request.bodyAsString - def jsonNode = toJsonNode(requestString) - def putsSize = jsonNode.get("puts").size() - def cacheObjects = Stream.generate(CacheObject::getDefaultCacheObject) - .limit(putsSize) - .toList() - encode(new PrebidCacheResponse(responses: cacheObjects)) + private static RequestPatternBuilder getXmlCacheRequest(String payload) { + postRequestedFor(urlEqualTo(CACHE_ENDPOINT)) + .withRequestBody(matchingJsonPath("\$.puts[?(@.value =~ /.*" + payload + ".*/)]")) } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy index 442dd2d3b33..72463db980f 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy @@ -1,48 +1,32 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.model.HttpRequest -import org.testcontainers.containers.MockServerContainer +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer -import static org.mockserver.model.HttpRequest.request +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo class PubStackAnalytics extends NetworkScaffolding { private static final String CONFIG_ENDPOINT = "/bootstrap" private static final String ANALYTICS_ENDPOINT = "/intake/auction" - PubStackAnalytics(MockServerContainer mockServerContainer) { + PubStackAnalytics(NetworkServiceContainer mockServerContainer) { super(mockServerContainer, CONFIG_ENDPOINT) } @Override - protected HttpRequest getRequest() { - request().withPath(ANALYTICS_ENDPOINT) + protected RequestPattern getRequest() { + postRequestedFor(urlEqualTo(ANALYTICS_ENDPOINT)) + .build() } @Override - protected RequestPatternBuilder getRequestPattern() { + protected RequestPatternBuilder getRequest(String value) { return null } @Override - protected RequestPatternBuilder getRequestPattern(String value) { - return null - } - - @Override - void setResponse() { - - } - - @Override - protected HttpRequest getRequest(String value) { - request().withPath(ANALYTICS_ENDPOINT) - } - - @Override - void reset() { - super.reset(CONFIG_ENDPOINT) - super.reset(ANALYTICS_ENDPOINT) - } + void setResponse() {} } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy index 3ed366ee61b..3448b2f0a2c 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy @@ -1,10 +1,7 @@ package org.prebid.server.functional.testcontainers.scaffolding -import com.github.tomakehurst.wiremock.WireMockServer +import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.matchers.TimeToLive -import org.mockserver.matchers.Times -import org.mockserver.model.HttpRequest import org.mockserver.model.HttpStatusCode import org.prebid.server.functional.model.config.Audience import org.prebid.server.functional.model.config.AudienceId @@ -14,12 +11,17 @@ import org.prebid.server.functional.model.config.TargetingOrtb import org.prebid.server.functional.model.config.TargetingResult import org.prebid.server.functional.model.request.auction.BidRequest import org.prebid.server.functional.model.request.auction.User +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer import org.prebid.server.functional.util.PBSUtils import java.nio.charset.StandardCharsets -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse +import static com.github.tomakehurst.wiremock.client.WireMock.get +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.post +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo import static org.mockserver.model.HttpStatusCode.NO_CONTENT_204 import static org.mockserver.model.HttpStatusCode.OK_200 @@ -27,26 +29,17 @@ class StoredCache extends NetworkScaffolding { private static final String CACHE_ENDPOINT = "/stored-cache" - StoredCache(WireMockServer mockServerContainer) { + StoredCache(NetworkServiceContainer mockServerContainer) { super(mockServerContainer, CACHE_ENDPOINT) } - @Override - protected HttpRequest getRequest(String impId) {} - - @Override - HttpRequest getRequest() { - request().withMethod("GET") - .withPath(endpoint) - } - - @Override - protected RequestPatternBuilder getRequestPattern() { - return null + protected RequestPattern getRequest() { + getRequestedFor(urlEqualTo(endpoint)) + .build() } @Override - protected RequestPatternBuilder getRequestPattern(String value) { + protected RequestPatternBuilder getRequest(String bidRequestId) { return null } @@ -55,27 +48,29 @@ class StoredCache extends NetworkScaffolding { TargetingResult setTargetingResponse(BidRequest bidRequest, OptableTargetingConfig config) { def targetingResult = getBodyByRequest(bidRequest) - mockServerClient.when(request() - .withMethod("GET") - .withPath("$endpoint${QueryBuilder.buildQuery(bidRequest, config)}"), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond { response().withStatusCode(OK_200.code()).withBody(encode(targetingResult)) } + wireMockClient.register(get(urlPathEqualTo("$endpoint${QueryBuilder.buildQuery(bidRequest, config)}")) + .atPriority(Integer.MAX_VALUE) + .willReturn(aResponse() + .withStatus(OK_200.code()) + .withBody(encode(targetingResult)))) targetingResult } TargetingResult setCachedTargetingResponse(BidRequest bidRequest) { def targetingResult = getBodyByRequest(bidRequest) - mockServerClient.when(request() - .withMethod("GET") - .withPath(endpoint), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond { response().withStatusCode(OK_200.code()).withBody(encode(targetingResult)) } + wireMockClient.register(get(urlPathEqualTo(endpoint)) + .atPriority(Integer.MAX_VALUE) + .willReturn(aResponse() + .withStatus(OK_200.code()) + .withBody(encode(targetingResult)))) targetingResult } void setCachingResponse(HttpStatusCode statusCode = NO_CONTENT_204) { - mockServerClient.when(request() - .withMethod("POST") - .withPath(endpoint), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond { response().withStatusCode(statusCode.code()) } + wireMockClient.register(post(urlPathEqualTo(endpoint)) + .atPriority(Integer.MAX_VALUE) + .willReturn(aResponse() + .withStatus(statusCode.code()))) } private static TargetingResult getBodyByRequest(BidRequest bidRequest) { diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy index 7adaa1f4001..752e0f75d84 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy @@ -1,16 +1,14 @@ package org.prebid.server.functional.testcontainers.scaffolding +import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.matchers.TimeToLive -import org.mockserver.matchers.Times -import org.mockserver.model.Delay -import org.mockserver.model.HttpRequest -import org.mockserver.model.HttpResponse -import org.testcontainers.containers.MockServerContainer -import org.wiremock.integrations.testcontainers.WireMockContainer +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse +import static com.github.tomakehurst.wiremock.client.WireMock.any +import static com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo +import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching import static org.mockserver.model.HttpStatusCode.OK_200 import static org.prebid.server.functional.model.mock.services.vendorlist.GvlSpecificationVersion.V2 import static org.prebid.server.functional.model.mock.services.vendorlist.GvlSpecificationVersion.V3 @@ -24,37 +22,23 @@ class VendorList extends NetworkScaffolding { private static final String VENDOR_LIST_ENDPOINT = "/v{TCF_POLICY}/vendor-list.json" - VendorList(WireMockContainer wireMockContainer) { + VendorList(NetworkServiceContainer wireMockContainer) { super(wireMockContainer, VENDOR_LIST_ENDPOINT) } @Override - protected HttpRequest getRequest(String value) { - return null - } - - @Override - protected HttpRequest getRequest() { - request().withPath(VENDOR_LIST_ENDPOINT) + protected RequestPattern getRequest() { + anyRequestedFor(urlEqualTo(VENDOR_LIST_ENDPOINT)) + .build() } @Override - protected RequestPatternBuilder getRequestPattern() { + protected RequestPatternBuilder getRequest(String value) { return null } - @Override - protected RequestPatternBuilder getRequestPattern(String value) { - return null - } - - @Override - void reset() { - TcfPolicyVersion.values().each { version -> super.reset("/v${version.vendorListVersion}/vendor-list.json") } - } - void setResponse(TcfPolicyVersion tcfPolicyVersion = TCF_POLICY_V2, - Delay delay = null, + Integer second = 0, Map vendors = [(GENERIC_VENDOR_ID): Vendor.getDefaultVendor(GENERIC_VENDOR_ID)]) { def prepareEndpoint = endpoint.replace("{TCF_POLICY}", tcfPolicyVersion.vendorListVersion.toString()) def prepareEncodeResponseBody = encode(defaultVendorListResponse.tap { @@ -63,11 +47,11 @@ class VendorList extends NetworkScaffolding { it.gvlSpecificationVersion = tcfPolicyVersion >= TcfPolicyVersion.TCF_POLICY_V4 ? V3 : V2 }) - mockServerClient.when(request().withPath(prepareEndpoint), Times.unlimited(), TimeToLive.unlimited(), -10) - .respond { request -> - request.withPath(endpoint) - ? response().withStatusCode(OK_200.code()).withDelay(delay).withBody(prepareEncodeResponseBody) - : HttpResponse.notFoundResponse() - } + wireMockClient.register(any(urlMatching(prepareEndpoint)) + .atPriority(Integer.MAX_VALUE) + .willReturn(aResponse() + .withStatus(OK_200.code()) + .withFixedDelay(second * 1000) + .withBody(prepareEncodeResponseBody))) } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/model/BidderResponseTransformer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/model/BidderResponseTransformer.groovy deleted file mode 100644 index 195ab741b86..00000000000 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/model/BidderResponseTransformer.groovy +++ /dev/null @@ -1,40 +0,0 @@ -package org.prebid.server.functional.testcontainers.scaffolding.model - -import com.github.tomakehurst.wiremock.common.FileSource -import com.github.tomakehurst.wiremock.extension.Parameters -import com.github.tomakehurst.wiremock.extension.ResponseTransformer -import com.github.tomakehurst.wiremock.http.Request -import com.github.tomakehurst.wiremock.http.Response - -class BidderResponseTransformer extends ResponseTransformer { - - @Override - Response transform(Request request, Response response, FileSource files, Parameters parameters) { - return Response.response().body("{\n" + - " \"name\": \"John Doe\",\n" + - " \"age\": 30,\n" + - " \"isStudent\": false,\n" + - " \"car\": null\n" + - "}").build() - } - - @Override - String getName() { - return "BidderResponseTransformer"; // <-- саме таке ім’я треба використовувати - } - - @Override - boolean applyGlobally() { - return false; // трансформер застосовується тільки для stub з transformers("dynamic-body-transformer") - } - - @Override - void start() { - super.start() - } - - @Override - void stop() { - super.stop() - } -} diff --git a/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy index 44ea40a4342..769a20ff57b 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy @@ -53,16 +53,15 @@ abstract class BaseSpec extends Specification implements ObjectMapperWrapper { protected static final PrebidServerService defaultPbsService = pbsServiceFactory.getService([:]) def setupSpec() { - // prebidCache.setResponse() + prebidCache.setResponse() bidder.setResponse() - // vendorList.setResponse() + vendorList.setResponse() } def cleanupSpec() { - /* bidder.reset() - prebidCache.reset() - repository.removeAllDatabaseData() - vendorList.reset()*/ + bidder.reset() + repository.removeAllDatabaseData() + vendorList.reset() } protected static int getRandomTimeout() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/CacheVtrackSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/CacheVtrackSpec.groovy index e5637fe80e2..a58517a7637 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/CacheVtrackSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/CacheVtrackSpec.groovy @@ -359,7 +359,7 @@ class CacheVtrackSpec extends BaseSpec { and: "Verify parameters that came to external cache services" def requestParams = prebidCache.getVTracGetRequestParams() - assert requestParams == "[{ch=[$cacheHost], uuid=[$uuid]}]" + assert requestParams == "[[uuid:[$uuid], ch:[$cacheHost]]]" } def "PBS should return 200 status code when internal cache and get vtrack request contain uuid"() { @@ -388,7 +388,7 @@ class CacheVtrackSpec extends BaseSpec { and: "Verify parameters that came to external cache services" def requestParams = prebidCache.getVTracGetRequestParams() - assert requestParams == "[{uuid=[$uuid]}]" + assert requestParams == "[[uuid:[$uuid]]]" } def "PBS should return status code that came from pbc when internal cache and get vtrack request and response from pbc invalid"() { @@ -416,7 +416,7 @@ class CacheVtrackSpec extends BaseSpec { and: "Verify parameters that came to external cache services" def requestParams = prebidCache.getVTracGetRequestParams() - assert requestParams == "[{uuid=[$uuid]}]" + assert requestParams == "[[uuid:[$uuid]]]" } def "PBS should return 400 status code when internal cache and get vtrack request without uuid"() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy index 38b2d11c347..b3ac512393b 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy @@ -15,7 +15,6 @@ import org.prebid.server.functional.testcontainers.PbsConfig import org.prebid.server.functional.testcontainers.scaffolding.HttpSettings import org.prebid.server.functional.util.PBSUtils import org.prebid.server.util.ResourceUtil -import spock.lang.IgnoreRest import static org.prebid.server.functional.model.bidder.BidderName.GENERIC import static org.prebid.server.functional.testcontainers.Dependencies.networkServiceContainer @@ -36,8 +35,6 @@ class HttpSettingsSpec extends BaseSpec { def setupSpec() { prebidServerService = pbsServiceFactory.getService(PbsConfig.httpSettingsConfig) prebidServerServiceWithRfc = pbsServiceFactory.getService(PBS_CONFIG_WITH_RFC) - bidder.setResponse() - // vendorList.setResponse() } def "PBS should take account information from http data source on auction request"() { @@ -50,7 +47,7 @@ class HttpSettingsSpec extends BaseSpec { httpSettings.setResponse(bidRequest.accountId, httpSettingsResponse) when: "PBS processes auction request" - def response = defaultPbsService.sendAuctionRequest(bidRequest) + def response = prebidServerService.sendAuctionRequest(bidRequest) then: "Response should contain basic fields" assert response.id @@ -291,7 +288,7 @@ class HttpSettingsSpec extends BaseSpec { and: "Prepare default account response" def httpSettingsResponse = HttpAccountsResponse.getDefaultHttpAccountsResponse(accountId) - httpSettings.setRfcResponse(accountId, httpSettingsResponse) + httpSettingsWithRFC.setRfcResponse(accountId, httpSettingsResponse) when: "PBS processes vtrack request" def response = prebidServerServiceWithRfc.sendPostVtrackRequest(request, accountId) @@ -300,7 +297,7 @@ class HttpSettingsSpec extends BaseSpec { assert response.responses[0]?.uuid and: "There should be only one account request and pbc request" - assert httpSettings.getRfcRequestCount(accountId.toString()) == 1 + assert httpSettingsWithRFC.getRfcRequestCount(accountId) == 1 assert prebidCache.getXmlRequestCount(payload) == 1 and: "VastXml that was send to PrebidCache must contain event url" diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy index 717c9f32d5b..6b3de14ca57 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy @@ -434,7 +434,7 @@ class GdprAmpSpec extends PrivacyBaseSpec { vendorListResponse.reset() and: "Set vendor list response with delay" - vendorListResponse.setResponse(tcfPolicyVersion, Delay.seconds(EXPONENTIAL_BACKOFF_MAX_DELAY + 3)) + vendorListResponse.setResponse(tcfPolicyVersion, EXPONENTIAL_BACKOFF_MAX_DELAY + 3) when: "PBS processes amp request" defaultPrivacyPbsService.sendAmpRequest(ampRequest) diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy index 299d911a398..ba52d473416 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy @@ -378,7 +378,7 @@ class GdprAuctionSpec extends PrivacyBaseSpec { vendorListResponse.reset() and: "Set vendor list response with delay" - vendorListResponse.setResponse(tcfPolicyVersion, Delay.seconds(EXPONENTIAL_BACKOFF_MAX_DELAY + 3)) + vendorListResponse.setResponse(tcfPolicyVersion, EXPONENTIAL_BACKOFF_MAX_DELAY + 3) when: "PBS processes auction request" defaultPrivacyPbsService.sendAuctionRequest(bidRequest) From eedeb47dd5504d36e134ab17746663c0a105de40 Mon Sep 17 00:00:00 2001 From: markiian Date: Wed, 18 Feb 2026 12:35:42 +0200 Subject: [PATCH 3/5] WIP: Cleanup --- pom.xml | 19 ------------- .../container/NetworkServiceContainer.groovy | 1 - .../container/PrebidServerContainer.groovy | 1 - .../util/ObjectMapperWrapper.groovy | 2 +- .../server/it/CacheResponseTransformer.java | 28 ------------------- 5 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 src/test/java/org/prebid/server/it/CacheResponseTransformer.java diff --git a/pom.xml b/pom.xml index 9ac3512d264..f2d142b9432 100644 --- a/pom.xml +++ b/pom.xml @@ -362,13 +362,6 @@ 3.13.1 test - - - org.wiremock.integrations.testcontainers - wiremock-testcontainers-module - 1.0-alpha-15 - test - org.influxdb influxdb-java @@ -381,18 +374,6 @@ ${project.name} - - maven-jar-plugin - - - build-test-jar - package - - test-jar - - - - org.apache.maven.plugins maven-compiler-plugin diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy index ff8658038f7..c9aeef7c264 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy @@ -11,7 +11,6 @@ class NetworkServiceContainer extends GenericContainer def aliasWithTopLevelDomain = "${getNetworkAliases().first()}.com".toString() withCreateContainerCmdModifier { it.withHostName(aliasWithTopLevelDomain) } setNetworkAliases([aliasWithTopLevelDomain]) - //withCommand("--use-chunked-encoding", "never","--verbose") // doesn't relevant for us withExposedPorts(8080) } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy index 04787489d2e..70509252af6 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/container/PrebidServerContainer.groovy @@ -33,7 +33,6 @@ class PrebidServerContainer extends GenericContainer { .forPort(PORT) .forStatusCode(200)) withDebug() - withNetworkAliases("backend") withNetwork(Dependencies.network) def commonConfig = [:] << DEFAULT_ENV << PbsConfig.defaultBiddersConfig diff --git a/src/test/groovy/org/prebid/server/functional/util/ObjectMapperWrapper.groovy b/src/test/groovy/org/prebid/server/functional/util/ObjectMapperWrapper.groovy index 8106bdaa029..15106b6a55f 100644 --- a/src/test/groovy/org/prebid/server/functional/util/ObjectMapperWrapper.groovy +++ b/src/test/groovy/org/prebid/server/functional/util/ObjectMapperWrapper.groovy @@ -10,7 +10,7 @@ import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL trait ObjectMapperWrapper { - static final ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(NON_NULL) + private static final ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(NON_NULL) .registerModule(new ZonedDateTimeModule()) private static final YAMLMapper yamlMapper = new YAMLMapper().setSerializationInclusion(NON_NULL) as YAMLMapper private static final XmlMapper xmlMapper = new XmlMapper() diff --git a/src/test/java/org/prebid/server/it/CacheResponseTransformer.java b/src/test/java/org/prebid/server/it/CacheResponseTransformer.java deleted file mode 100644 index 75abd3cab7e..00000000000 --- a/src/test/java/org/prebid/server/it/CacheResponseTransformer.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.prebid.server.it; - -import com.github.tomakehurst.wiremock.common.FileSource; -import com.github.tomakehurst.wiremock.extension.Parameters; -import com.github.tomakehurst.wiremock.extension.ResponseTransformer; -import com.github.tomakehurst.wiremock.http.Request; - -public class CacheResponseTransformer extends ResponseTransformer { - - @Override - public com.github.tomakehurst.wiremock.http.Response transform( - Request request, com.github.tomakehurst.wiremock.http.Response response, FileSource files, - Parameters parameters) { - - return com.github.tomakehurst.wiremock.http.Response.response().body("\"id\":132").status(200).build(); - } - - @Override - public String getName() { - return "cache-response-transformer"; - } - - @Override - public boolean applyGlobally() { - return false; - } - -} From 2d99ddb0c0d7a2e0c80053840feae93e63de5670 Mon Sep 17 00:00:00 2001 From: markiian Date: Wed, 18 Feb 2026 12:36:38 +0200 Subject: [PATCH 4/5] WIP: launchContainers to false --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f2d142b9432..130e191ff22 100644 --- a/pom.xml +++ b/pom.xml @@ -390,7 +390,7 @@ ${maven-surefire-plugin.version} - true + false ${skipUnitTests} From a6a8efe7b33771071c6c1fda486157432519cd01 Mon Sep 17 00:00:00 2001 From: markiian Date: Wed, 18 Feb 2026 21:00:55 +0200 Subject: [PATCH 5/5] WIP: Add HttStatusCode and remove mockserver dependency --- docs/developers/functional-tests.md | 8 ++++---- extra/pom.xml | 17 ----------------- pom.xml | 11 ----------- .../functional/model/HttpStatusCode.groovy | 18 ++++++++++++++++++ .../functional/model/ResponseModel.groovy | 2 +- .../container/NetworkServiceContainer.groovy | 1 + .../testcontainers/scaffolding/Bidder.groovy | 5 ++--- .../scaffolding/CurrencyConversion.groovy | 15 ++++----------- .../scaffolding/FloorsProvider.groovy | 5 ++--- .../scaffolding/HttpSettings.groovy | 6 +++--- .../scaffolding/NetworkScaffolding.groovy | 18 ++++++++---------- .../scaffolding/PrebidCache.groovy | 12 ++++++------ .../scaffolding/PubStackAnalytics.groovy | 4 ++-- .../scaffolding/StoredCache.groovy | 16 ++++++++-------- .../scaffolding/VendorList.groovy | 4 ++-- .../functional/tests/SeatNonBidSpec.groovy | 15 +++++++-------- .../optabletargeting/CacheStorageSpec.groovy | 4 ++-- .../pricefloors/PriceFloorsFetchingSpec.groovy | 2 +- .../PriceFloorsSignalingSpec.groovy | 3 ++- .../tests/privacy/GdprAmpSpec.groovy | 1 - .../tests/privacy/GdprAuctionSpec.groovy | 1 - .../functional/util/SystemProperties.groovy | 1 - 22 files changed, 73 insertions(+), 96 deletions(-) create mode 100644 src/test/groovy/org/prebid/server/functional/model/HttpStatusCode.groovy diff --git a/docs/developers/functional-tests.md b/docs/developers/functional-tests.md index 523466fb0b0..abeb3ab38d4 100644 --- a/docs/developers/functional-tests.md +++ b/docs/developers/functional-tests.md @@ -2,8 +2,8 @@ Main language: Groovy. Project functional tests use [Spock](https://spockframework.org/) as a main testing framework. Also used [Docker](https://www.docker.com/) for running PBS and other services. -[Testcontainers](https://www.testcontainers.org/) is used as provider of lightweight, throwaway instances of PBS, MySQLContainer, MockServerContainer containers. -And [MockServer](https://www.mock-server.com/) for mocking external services. +[Testcontainers](https://www.testcontainers.org/) is used as provider of lightweight, throwaway instances of PBS, MySQLContainer, WireMock containers. +And [WireMock](https://wiremock.org/) for mocking external services. ## Getting Started @@ -64,12 +64,12 @@ Functional tests need to have name template **.\*Spec.groovy** - `/functional/testcontainers/PBSTestExtension` - allows to hook into a spec’s lifecycle to add ErrorListener using annotation `PBSTest`. - `/functional/testcontainers/TestcontainersExtension` - allow to hook into a spec’s lifecycle to start and stop support service containers using global extension. - `/functional/testcontainers/container` - responsible for creating and configuring containers. -- `/functional/testcontainers/scaffolding/NetworkScaffolding` - makes HTTP requests to a MockServer. +- `/functional/testcontainers/scaffolding/NetworkScaffolding` - makes HTTP requests to a WireMock. **Properties:** -`launchContainers` - responsible for starting the MockServer and the MySQLContainer container. Default value is false to not launch containers for unit tests. +`launchContainers` - responsible for starting containers. Default value is false to not launch containers for unit tests. `tests.max-container-count` - maximum number of simultaneously running PBS containers. Default value is 5. `skipFunctionalTests` - allow to skip funtional tests. Default value is false. `skipUnitTests` - allow to skip unit tests. Default value is false. diff --git a/extra/pom.xml b/extra/pom.xml index 836df8f4a38..39ce2649faa 100644 --- a/extra/pom.xml +++ b/extra/pom.xml @@ -62,8 +62,6 @@ 3.12.1 2.4-M6-groovy-4.0 - - 5.15.0 false @@ -262,21 +260,6 @@ json-logic-java ${json-logic.version} - - org.mock-server - mockserver-client-java - ${mockserver.version} - - - com.google.code.findbugs - jsr305 - - - commons-logging - commons-logging - - - diff --git a/pom.xml b/pom.xml index 130e191ff22..8864e120eb2 100644 --- a/pom.xml +++ b/pom.xml @@ -325,11 +325,6 @@ testcontainers test - - org.testcontainers - mockserver - test - org.testcontainers mysql @@ -350,11 +345,6 @@ influxdb test - - org.mock-server - mockserver-client-java - test - org.wiremock @@ -630,7 +620,6 @@ maven-failsafe-plugin - ${mockserver.version} ${project.version} 5 false diff --git a/src/test/groovy/org/prebid/server/functional/model/HttpStatusCode.groovy b/src/test/groovy/org/prebid/server/functional/model/HttpStatusCode.groovy new file mode 100644 index 00000000000..e9e574b5d78 --- /dev/null +++ b/src/test/groovy/org/prebid/server/functional/model/HttpStatusCode.groovy @@ -0,0 +1,18 @@ +package org.prebid.server.functional.model + +enum HttpStatusCode { + + PROCESSING_102(102), + OK_200(200), + NO_CONTENT_204(204), + BAD_REQUEST_400(400), + NOT_FOUNT_404(404), + INTERNAL_SERVER_ERROR_500(500), + SERVICE_UNAVAILABLE_503(503) + + Integer code + + HttpStatusCode(Integer code){ + this.code = code + } +} diff --git a/src/test/groovy/org/prebid/server/functional/model/ResponseModel.groovy b/src/test/groovy/org/prebid/server/functional/model/ResponseModel.groovy index 91a7f1fe9d0..5fe89f8488a 100644 --- a/src/test/groovy/org/prebid/server/functional/model/ResponseModel.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/ResponseModel.groovy @@ -1,6 +1,6 @@ package org.prebid.server.functional.model /** - * This marker interface should limit the possible values used by the MockServerClientWrapper. + * This marker interface should limit the possible values used by the WireMockClientWrapper. */ interface ResponseModel {} diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy index c9aeef7c264..3b732809bd5 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/container/NetworkServiceContainer.groovy @@ -11,6 +11,7 @@ class NetworkServiceContainer extends GenericContainer def aliasWithTopLevelDomain = "${getNetworkAliases().first()}.com".toString() withCreateContainerCmdModifier { it.withHostName(aliasWithTopLevelDomain) } setNetworkAliases([aliasWithTopLevelDomain]) + withCommand("--disable-gzip") withExposedPorts(8080) } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy index 9ea9b6cce82..4848619ad1e 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/Bidder.groovy @@ -13,8 +13,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo import static com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo import static com.github.tomakehurst.wiremock.client.WireMock.aResponse - -import static org.mockserver.model.HttpStatusCode.OK_200 +import static org.prebid.server.functional.model.HttpStatusCode.OK_200 class Bidder extends NetworkScaffolding { @@ -71,7 +70,7 @@ class Bidder extends NetworkScaffolding { .atPriority(Integer.MAX_VALUE) .willReturn(aResponse() .withTransformers("response-template") - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withBody(DEFAULT_BODY_RESPONSE))) } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy index 7fc21564014..16dde6c58da 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/CurrencyConversion.groovy @@ -7,9 +7,6 @@ import org.prebid.server.functional.testcontainers.container.NetworkServiceConta import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response -import static org.mockserver.model.HttpStatusCode.OK_200 import static org.prebid.server.functional.util.CurrencyUtil.DEFAULT_CURRENCY_RATES class CurrencyConversion extends NetworkScaffolding { @@ -17,8 +14,8 @@ class CurrencyConversion extends NetworkScaffolding { static final String CURRENCY_ENDPOINT_PATH = "/currency" private static final CurrencyConversionRatesResponse DEFAULT_RATES_RESPONSE = CurrencyConversionRatesResponse.getDefaultCurrencyConversionRatesResponse(DEFAULT_CURRENCY_RATES) - CurrencyConversion(NetworkServiceContainer mockServerContainer) { - super(mockServerContainer, CURRENCY_ENDPOINT_PATH) + CurrencyConversion(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, CURRENCY_ENDPOINT_PATH) } void setCurrencyConversionRatesResponse(CurrencyConversionRatesResponse conversionRatesResponse = DEFAULT_RATES_RESPONSE) { @@ -26,15 +23,11 @@ class CurrencyConversion extends NetworkScaffolding { } @Override - void setResponse() { - mockServerClient.when(request().withPath(endpoint)) - .respond(response().withStatusCode(OK_200.code())) - } + void setResponse() {} @Override protected RequestPattern getRequest() { - getRequestedFor(urlEqualTo(CURRENCY_ENDPOINT_PATH)) - .build() + getRequestedFor(urlEqualTo(CURRENCY_ENDPOINT_PATH)).build() } @Override diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy index 48c06a49287..684acf229f2 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/FloorsProvider.groovy @@ -2,7 +2,6 @@ package org.prebid.server.functional.testcontainers.scaffolding import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.model.HttpStatusCode import org.prebid.server.functional.model.pricefloors.PriceFloorData import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer @@ -12,7 +11,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching -import static org.mockserver.model.HttpStatusCode.OK_200 +import static org.prebid.server.functional.model.HttpStatusCode.OK_200 class FloorsProvider extends NetworkScaffolding { @@ -37,7 +36,7 @@ class FloorsProvider extends NetworkScaffolding { wireMockClient.register(any(urlMatching("^.*$endpoint.*\$")) .atPriority(Integer.MAX_VALUE) .willReturn(aResponse() - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withBody(encode(PriceFloorData.priceFloorData)))) } } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy index d6e4f5727f6..025abada7a8 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/HttpSettings.groovy @@ -4,7 +4,7 @@ import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import com.github.tomakehurst.wiremock.stubbing.StubMapping -import org.mockserver.model.HttpStatusCode +import org.prebid.server.functional.model.HttpStatusCode import org.prebid.server.functional.model.ResponseModel import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer @@ -12,7 +12,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.equalTo import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo -import static org.mockserver.model.HttpStatusCode.OK_200 +import static org.prebid.server.functional.model.HttpStatusCode.OK_200 class HttpSettings extends NetworkScaffolding { @@ -49,7 +49,7 @@ class HttpSettings extends NetworkScaffolding { Map headers = [:]) { def responseBuilder = ResponseDefinitionBuilder.responseDefinition() - .withStatus(statusCode.code()) + .withStatus(statusCode.code) .withHeader("Content-Type", "application/json") .withBody(encode(responseModel)) diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy index 5f88d54b1ee..498b09eaee9 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/NetworkScaffolding.groovy @@ -5,17 +5,15 @@ import com.github.tomakehurst.wiremock.client.WireMock import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import com.github.tomakehurst.wiremock.stubbing.StubMapping -import org.mockserver.client.MockServerClient -import org.mockserver.model.HttpStatusCode +import org.prebid.server.functional.model.HttpStatusCode import org.prebid.server.functional.model.ResponseModel import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer import org.prebid.server.functional.util.ObjectMapperWrapper -import static org.mockserver.model.HttpStatusCode.OK_200 +import static org.prebid.server.functional.model.HttpStatusCode.OK_200 abstract class NetworkScaffolding implements ObjectMapperWrapper { - protected MockServerClient mockServerClient protected WireMock wireMockClient protected String endpoint @@ -43,7 +41,7 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { HttpStatusCode statusCode = OK_200) { def responseBuilder = ResponseDefinitionBuilder.responseDefinition() - .withStatus(statusCode.code()) + .withStatus(statusCode.code) .withHeader("Content-Type", "application/json") .withBody(encode(responseModel)) @@ -62,7 +60,7 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { Map headers = [:]) { def responseBuilder = ResponseDefinitionBuilder.responseDefinition() - .withStatus(statusCode.code()) + .withStatus(statusCode.code) .withHeader("Content-Type", "application/json") .withBody(encode(responseModel)) @@ -78,7 +76,7 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { int responseDelay, HttpStatusCode statusCode = OK_200) { def responseBuilder = ResponseDefinitionBuilder.responseDefinition() - .withStatus(statusCode.code()) + .withStatus(statusCode.code) .withHeader("Content-Type", "application/json") .withBody(encode(responseModel)) .withFixedDelay(responseDelay) @@ -88,7 +86,7 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { void setResponse(String value, String mockResponse) { def responseBuilder = ResponseDefinitionBuilder.responseDefinition() - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withBody(mockResponse) wireMockClient.register(new StubMapping(getRequest(value).build(), responseBuilder.build())) @@ -96,7 +94,7 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { void setResponse(ResponseModel responseModel) { def responseBuilder = ResponseDefinitionBuilder.responseDefinition() - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withHeader("Content-Type", "application/json") .withBody(encode(responseModel)) @@ -105,7 +103,7 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { void setResponse(String value, HttpStatusCode httpStatusCode) { def responseBuilder = ResponseDefinitionBuilder.responseDefinition() - .withStatus(httpStatusCode.code()) + .withStatus(httpStatusCode.code) wireMockClient.register(new StubMapping(getRequest(value).build(), responseBuilder.build())) } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy index 25cade1b3e4..64fc6455be8 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PrebidCache.groovy @@ -8,8 +8,6 @@ import org.prebid.server.functional.testcontainers.container.NetworkServiceConta import org.prebid.server.functional.util.PBSUtils import static java.lang.Integer.MAX_VALUE -import static org.mockserver.model.HttpStatusCode.INTERNAL_SERVER_ERROR_500 -import static org.mockserver.model.HttpStatusCode.OK_200 import static com.github.tomakehurst.wiremock.client.WireMock.post import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching @@ -20,6 +18,8 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo import static com.github.tomakehurst.wiremock.client.WireMock.aResponse import static com.github.tomakehurst.wiremock.client.WireMock.get import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor +import static org.prebid.server.functional.model.HttpStatusCode.INTERNAL_SERVER_ERROR_500 +import static org.prebid.server.functional.model.HttpStatusCode.OK_200 class PrebidCache extends NetworkScaffolding { @@ -81,7 +81,7 @@ class PrebidCache extends NetworkScaffolding { .atPriority(MAX_VALUE) .willReturn(aResponse() .withTransformers("response-template") - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withBody(RESPONSE_BODY))) } @@ -89,7 +89,7 @@ class PrebidCache extends NetworkScaffolding { wireMockClient.register(get(urlPathEqualTo(endpoint)) .atPriority(MAX_VALUE) .willReturn(aResponse() - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withBody(encode(vTrackResponse)))) } @@ -97,7 +97,7 @@ class PrebidCache extends NetworkScaffolding { wireMockClient.register(post(urlPathEqualTo(endpoint)) .atPriority(MAX_VALUE) .willReturn(aResponse() - .withStatus(INTERNAL_SERVER_ERROR_500.code()))) + .withStatus(INTERNAL_SERVER_ERROR_500.code))) } void setInvalidGetResponse(String uuid, String errorMessage = PBSUtils.randomString) { @@ -105,7 +105,7 @@ class PrebidCache extends NetworkScaffolding { .withQueryParam("uuid", equalTo(uuid)) .atPriority(MAX_VALUE) .willReturn(aResponse() - .withStatus(INTERNAL_SERVER_ERROR_500.code()) + .withStatus(INTERNAL_SERVER_ERROR_500.code) .withBody(errorMessage))) } diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy index 72463db980f..d4dc19ad88f 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/PubStackAnalytics.groovy @@ -12,8 +12,8 @@ class PubStackAnalytics extends NetworkScaffolding { private static final String CONFIG_ENDPOINT = "/bootstrap" private static final String ANALYTICS_ENDPOINT = "/intake/auction" - PubStackAnalytics(NetworkServiceContainer mockServerContainer) { - super(mockServerContainer, CONFIG_ENDPOINT) + PubStackAnalytics(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, CONFIG_ENDPOINT) } @Override diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy index 3448b2f0a2c..6deb9a67fb4 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/StoredCache.groovy @@ -2,7 +2,7 @@ package org.prebid.server.functional.testcontainers.scaffolding import com.github.tomakehurst.wiremock.matching.RequestPattern import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder -import org.mockserver.model.HttpStatusCode +import org.prebid.server.functional.model.HttpStatusCode import org.prebid.server.functional.model.config.Audience import org.prebid.server.functional.model.config.AudienceId import org.prebid.server.functional.model.config.IdentifierType @@ -22,15 +22,15 @@ import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.post import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo -import static org.mockserver.model.HttpStatusCode.NO_CONTENT_204 -import static org.mockserver.model.HttpStatusCode.OK_200 +import static org.prebid.server.functional.model.HttpStatusCode.NO_CONTENT_204 +import static org.prebid.server.functional.model.HttpStatusCode.OK_200 class StoredCache extends NetworkScaffolding { private static final String CACHE_ENDPOINT = "/stored-cache" - StoredCache(NetworkServiceContainer mockServerContainer) { - super(mockServerContainer, CACHE_ENDPOINT) + StoredCache(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, CACHE_ENDPOINT) } protected RequestPattern getRequest() { @@ -51,7 +51,7 @@ class StoredCache extends NetworkScaffolding { wireMockClient.register(get(urlPathEqualTo("$endpoint${QueryBuilder.buildQuery(bidRequest, config)}")) .atPriority(Integer.MAX_VALUE) .willReturn(aResponse() - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withBody(encode(targetingResult)))) targetingResult } @@ -61,7 +61,7 @@ class StoredCache extends NetworkScaffolding { wireMockClient.register(get(urlPathEqualTo(endpoint)) .atPriority(Integer.MAX_VALUE) .willReturn(aResponse() - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withBody(encode(targetingResult)))) targetingResult } @@ -70,7 +70,7 @@ class StoredCache extends NetworkScaffolding { wireMockClient.register(post(urlPathEqualTo(endpoint)) .atPriority(Integer.MAX_VALUE) .willReturn(aResponse() - .withStatus(statusCode.code()))) + .withStatus(statusCode.code))) } private static TargetingResult getBodyByRequest(BidRequest bidRequest) { diff --git a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy index 752e0f75d84..cb837ddd595 100644 --- a/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy +++ b/src/test/groovy/org/prebid/server/functional/testcontainers/scaffolding/VendorList.groovy @@ -9,7 +9,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.any import static com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching -import static org.mockserver.model.HttpStatusCode.OK_200 +import static org.prebid.server.functional.model.HttpStatusCode.OK_200 import static org.prebid.server.functional.model.mock.services.vendorlist.GvlSpecificationVersion.V2 import static org.prebid.server.functional.model.mock.services.vendorlist.GvlSpecificationVersion.V3 import static org.prebid.server.functional.model.mock.services.vendorlist.VendorListResponse.Vendor @@ -50,7 +50,7 @@ class VendorList extends NetworkScaffolding { wireMockClient.register(any(urlMatching(prepareEndpoint)) .atPriority(Integer.MAX_VALUE) .willReturn(aResponse() - .withStatus(OK_200.code()) + .withStatus(OK_200.code) .withFixedDelay(second * 1000) .withBody(prepareEncodeResponseBody))) } diff --git a/src/test/groovy/org/prebid/server/functional/tests/SeatNonBidSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/SeatNonBidSpec.groovy index 02adb2ab5e5..b6f6a60195b 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/SeatNonBidSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/SeatNonBidSpec.groovy @@ -1,6 +1,6 @@ package org.prebid.server.functional.tests -import org.mockserver.model.HttpStatusCode +import org.prebid.server.functional.model.HttpStatusCode import org.prebid.server.functional.model.bidder.BidderName import org.prebid.server.functional.model.config.AccountAuctionConfig import org.prebid.server.functional.model.config.AccountBidValidationConfig @@ -16,14 +16,13 @@ import org.prebid.server.functional.model.response.auction.BidResponse import org.prebid.server.functional.model.response.auction.SeatBid import org.prebid.server.functional.util.PBSUtils -import static org.mockserver.model.HttpStatusCode.BAD_REQUEST_400 -import static org.mockserver.model.HttpStatusCode.INTERNAL_SERVER_ERROR_500 -import static org.mockserver.model.HttpStatusCode.NO_CONTENT_204 -import static org.mockserver.model.HttpStatusCode.OK_200 -import static org.mockserver.model.HttpStatusCode.PROCESSING_102 -import static org.mockserver.model.HttpStatusCode.SERVICE_UNAVAILABLE_503 import static org.prebid.server.functional.model.AccountStatus.ACTIVE - +import static org.prebid.server.functional.model.HttpStatusCode.OK_200 +import static org.prebid.server.functional.model.HttpStatusCode.BAD_REQUEST_400 +import static org.prebid.server.functional.model.HttpStatusCode.NO_CONTENT_204 +import static org.prebid.server.functional.model.HttpStatusCode.PROCESSING_102 +import static org.prebid.server.functional.model.HttpStatusCode.SERVICE_UNAVAILABLE_503 +import static org.prebid.server.functional.model.HttpStatusCode.INTERNAL_SERVER_ERROR_500 import static org.prebid.server.functional.model.config.BidValidationEnforcement.ENFORCE import static org.prebid.server.functional.model.request.auction.DebugCondition.DISABLED import static org.prebid.server.functional.model.request.auction.DebugCondition.ENABLED diff --git a/src/test/groovy/org/prebid/server/functional/tests/module/optabletargeting/CacheStorageSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/module/optabletargeting/CacheStorageSpec.groovy index 9a71d42ba7f..3f1d8704b9b 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/module/optabletargeting/CacheStorageSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/module/optabletargeting/CacheStorageSpec.groovy @@ -20,7 +20,7 @@ import org.prebid.server.functional.tests.module.ModuleBaseSpec import org.prebid.server.functional.util.PBSUtils import static org.apache.commons.codec.binary.Base64.encodeBase64 -import static org.mockserver.model.HttpStatusCode.NOT_FOUND_404 +import static org.prebid.server.functional.model.HttpStatusCode.NOT_FOUNT_404 import static org.prebid.server.functional.model.ModuleName.OPTABLE_TARGETING import static org.prebid.server.functional.testcontainers.Dependencies.getNetworkServiceContainer @@ -93,7 +93,7 @@ class CacheStorageSpec extends ModuleBaseSpec { and: "Mocked external request" storedCache.setTargetingResponse(bidRequest, targetingConfig) - storedCache.setCachingResponse(NOT_FOUND_404) + storedCache.setCachingResponse(NOT_FOUNT_404) and: "Flash metrics" flushMetrics(prebidServerStoredCacheService) diff --git a/src/test/groovy/org/prebid/server/functional/tests/pricefloors/PriceFloorsFetchingSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/pricefloors/PriceFloorsFetchingSpec.groovy index b40f6e8cac2..d77aeb65f36 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/pricefloors/PriceFloorsFetchingSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/pricefloors/PriceFloorsFetchingSpec.groovy @@ -14,9 +14,9 @@ import org.prebid.server.functional.util.PBSUtils import java.time.Instant -import static org.mockserver.model.HttpStatusCode.BAD_REQUEST_400 import static org.prebid.server.functional.model.Currency.EUR import static org.prebid.server.functional.model.Currency.JPY +import static org.prebid.server.functional.model.HttpStatusCode.BAD_REQUEST_400 import static org.prebid.server.functional.model.bidder.BidderName.GENERIC import static org.prebid.server.functional.model.pricefloors.Country.MULTIPLE import static org.prebid.server.functional.model.pricefloors.MediaType.BANNER diff --git a/src/test/groovy/org/prebid/server/functional/tests/pricefloors/PriceFloorsSignalingSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/pricefloors/PriceFloorsSignalingSpec.groovy index b06c2530242..aa25da817c2 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/pricefloors/PriceFloorsSignalingSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/pricefloors/PriceFloorsSignalingSpec.groovy @@ -1,5 +1,6 @@ package org.prebid.server.functional.tests.pricefloors +import org.prebid.server.functional.model.HttpStatusCode import org.prebid.server.functional.model.db.StoredRequest import org.prebid.server.functional.model.pricefloors.Country import org.prebid.server.functional.model.pricefloors.FloorModelGroup @@ -21,8 +22,8 @@ import org.prebid.server.functional.util.PBSUtils import java.math.RoundingMode import java.time.Instant -import static org.mockserver.model.HttpStatusCode.BAD_REQUEST_400 import static org.prebid.server.functional.model.Currency.USD +import static org.prebid.server.functional.model.HttpStatusCode.BAD_REQUEST_400 import static org.prebid.server.functional.model.bidder.BidderName.GENERIC import static org.prebid.server.functional.model.pricefloors.MediaType.BANNER import static org.prebid.server.functional.model.pricefloors.MediaType.MULTIPLE diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy index 6b3de14ca57..327d97ba625 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy @@ -1,6 +1,5 @@ package org.prebid.server.functional.tests.privacy -import org.mockserver.model.Delay import org.prebid.server.functional.model.ChannelType import org.prebid.server.functional.model.config.AccountConfig import org.prebid.server.functional.model.config.AccountGdprConfig diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy index ba52d473416..8d1838ff3e7 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy @@ -1,6 +1,5 @@ package org.prebid.server.functional.tests.privacy -import org.mockserver.model.Delay import org.prebid.server.functional.model.ChannelType import org.prebid.server.functional.model.config.AccountGdprConfig import org.prebid.server.functional.model.config.AccountMetricsConfig diff --git a/src/test/groovy/org/prebid/server/functional/util/SystemProperties.groovy b/src/test/groovy/org/prebid/server/functional/util/SystemProperties.groovy index 91379b3bbc1..410f9736991 100644 --- a/src/test/groovy/org/prebid/server/functional/util/SystemProperties.groovy +++ b/src/test/groovy/org/prebid/server/functional/util/SystemProperties.groovy @@ -3,7 +3,6 @@ package org.prebid.server.functional.util class SystemProperties { public static final String PBS_VERSION = System.getProperty("pbs.version")?.split("-")?.first() - public static final String MOCKSERVER_VERSION = System.getProperty("mockserver.version") public static final boolean USE_FIXED_CONTAINER_PORTS = getPropertyOrDefault("tests.fixed-container-ports", false) public static final int DEFAULT_TIMEOUT = 5000