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 2cb81b6464a..595ff56070e 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 73513000b95..ae410786f24 100644 --- a/pom.xml +++ b/pom.xml @@ -325,11 +325,6 @@ testcontainers test - - org.testcontainers - mockserver - test - org.testcontainers mysql @@ -350,9 +345,11 @@ influxdb test + - org.mock-server - mockserver-client-java + org.wiremock + wiremock + 3.13.1 test @@ -623,7 +620,6 @@ maven-failsafe-plugin - ${mockserver.version} ${project.version} 5 false 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/Dependencies.groovy b/src/test/groovy/org/prebid/server/functional/testcontainers/Dependencies.groovy index ab614e0ca5f..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 @@ -52,13 +51,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..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 @@ -1,16 +1,18 @@ package org.prebid.server.functional.testcontainers.container -import org.testcontainers.containers.MockServerContainer +import org.testcontainers.containers.GenericContainer import org.testcontainers.containers.Network import org.testcontainers.utility.DockerImageName -class NetworkServiceContainer extends MockServerContainer { +class NetworkServiceContainer extends GenericContainer { - NetworkServiceContainer(String version) { - super(DockerImageName.parse("mockserver/mockserver:mockserver-$version")) + NetworkServiceContainer() { + super(DockerImageName.parse("wiremock/wiremock:3.3.1")) def aliasWithTopLevelDomain = "${getNetworkAliases().first()}.com".toString() withCreateContainerCmdModifier { it.withHostName(aliasWithTopLevelDomain) } setNetworkAliases([aliasWithTopLevelDomain]) + withCommand("--disable-gzip") + withExposedPorts(8080) } String getHostAndPort() { 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..a35953886f9 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,77 @@ package org.prebid.server.functional.testcontainers.scaffolding -import org.mockserver.matchers.TimeToLive -import org.mockserver.matchers.Times -import org.mockserver.model.HttpRequest -import org.mockserver.model.HttpResponse +import com.github.tomakehurst.wiremock.matching.RequestPattern +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder 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.prebid.server.functional.testcontainers.container.NetworkServiceContainer -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 +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.apache.http.HttpStatus.SC_OK class Bidder extends NetworkScaffolding { - Bidder(MockServerContainer mockServerContainer, String endpoint = "/auction") { - super(mockServerContainer, endpoint) + 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')]")) + protected RequestPattern getRequest() { + postRequestedFor(urlEqualTo(endpoint)) + .build() } @Override - protected HttpRequest getRequest() { - request().withPath(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() { - 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(post(urlPathEqualTo(endpoint)) + .atPriority(Integer.MAX_VALUE) + .willReturn(aResponse() + .withStatus(SC_OK) + .withTransformers("response-template") + .withBody(DEFAULT_BODY_RESPONSE))) } List getBidderRequests(String bidRequestId) { @@ -65,20 +92,4 @@ class Bidder extends NetworkScaffolding { Map> getLastRecordedBidderRequestHeaders(String bidRequestId) { return getLastRecordedRequestHeaders(bidRequestId) } - - private String getBodyByRequest(HttpRequest request) { - def requestString = request.bodyAsString - def jsonNode = toJsonNode(requestString) - 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 6246f8c9f4d..f3be15dc102 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,12 +1,12 @@ package org.prebid.server.functional.testcontainers.scaffolding -import org.mockserver.model.HttpRequest +import com.github.tomakehurst.wiremock.matching.RequestPattern +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder 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 org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response -import static org.mockserver.model.HttpStatusCode.OK_200 +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo import static org.prebid.server.functional.util.CurrencyUtil.DEFAULT_CURRENCY_RATES class CurrencyConversion extends NetworkScaffolding { @@ -14,29 +14,26 @@ 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) { - super(mockServerContainer, CURRENCY_ENDPOINT_PATH) + CurrencyConversion(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, 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())) + throw new UnsupportedOperationException() } @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) + protected RequestPatternBuilder getRequest(String value) { + throw new UnsupportedOperationException() } } 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..ddec5272312 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,43 +1,42 @@ package org.prebid.server.functional.testcontainers.scaffolding -import org.mockserver.matchers.TimeToLive -import org.mockserver.matchers.Times -import org.mockserver.model.HttpRequest -import org.mockserver.model.HttpResponse +import com.github.tomakehurst.wiremock.matching.RequestPattern +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.prebid.server.functional.model.pricefloors.PriceFloorData -import org.testcontainers.containers.MockServerContainer +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response -import static org.mockserver.model.HttpStatusCode.OK_200 +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.apache.http.HttpStatus.SC_OK class FloorsProvider extends NetworkScaffolding { public static final String FLOORS_ENDPOINT = "/floors-provider/" - FloorsProvider(MockServerContainer mockServerContainer) { - super(mockServerContainer, FLOORS_ENDPOINT) + FloorsProvider(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, FLOORS_ENDPOINT) } - @Override - protected HttpRequest getRequest(String accountId) { - request().withPath(FLOORS_ENDPOINT + accountId) + protected RequestPattern getRequest() { + anyRequestedFor(urlEqualTo(FLOORS_ENDPOINT)) + .build() } @Override - protected HttpRequest getRequest() { - request().withPath(FLOORS_ENDPOINT) + 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(SC_OK) + .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 5af648b2bc0..af84ff27302 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,17 @@ package org.prebid.server.functional.testcontainers.scaffolding -import org.mockserver.matchers.Times -import org.mockserver.model.Header -import org.mockserver.model.HttpRequest -import org.mockserver.model.HttpStatusCode +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.prebid.server.functional.model.ResponseModel -import org.testcontainers.containers.MockServerContainer +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer -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 +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.apache.http.HttpStatus.SC_OK class HttpSettings extends NetworkScaffolding { @@ -18,64 +19,45 @@ 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(NetworkServiceContainer wireMockContainer, String endpoint = ENDPOINT) { + super(wireMockContainer, endpoint) } - @Override - protected HttpRequest getRequest(String accountId) { - request().withPath(ENDPOINT) - .withQueryStringParameter("account-ids", "[\"$accountId\"]") + protected RequestPattern getRequest() { + anyRequestedFor(urlPathEqualTo(endpoint)).build() } @Override - protected HttpRequest getRequest() { - request().withPath(ENDPOINT) + protected RequestPatternBuilder getRequest(String accountId) { + getRequestedFor(urlPathEqualTo(endpoint)) + .withQueryParam("account-ids", equalTo("[\"" + accountId + "\"]")) } @Override void setResponse() { + throw new UnsupportedOperationException() } - protected HttpRequest getRfcRequest(String accountId) { - request().withPath(RFC_ENDPOINT) - .withQueryStringParameter("account-id", accountId) + protected RequestPatternBuilder getRfcRequestPattern(String accountId) { + anyRequestedFor(urlPathEqualTo(endpoint)) + .withQueryParam("account-id", 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)) - } - - int getRfcRequestCount(String value) { - mockServerClient.retrieveRecordedRequests(getRfcRequest(value)) - .size() - } + ResponseModel responseModel, + Map headers = [:]) { - @Override - void reset() { - super.reset(ENDPOINT) - super.reset(RFC_ENDPOINT) - super.reset(AMP_ENDPOINT) - } + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(SC_OK) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) - static String getEndpoint() { - return ENDPOINT - } + headers.each { responseBuilder.withHeader(it.key, it.value) } - 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..66f83d456bf 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,156 +1,143 @@ package org.prebid.server.functional.testcontainers.scaffolding -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 com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder +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.prebid.server.functional.model.ResponseModel +import org.prebid.server.functional.testcontainers.container.NetworkServiceContainer import org.prebid.server.functional.util.ObjectMapperWrapper -import org.testcontainers.containers.MockServerContainer -import java.util.concurrent.TimeUnit - -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 +import static org.apache.http.HttpStatus.SC_OK 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(NetworkServiceContainer wireMockContainer, String endpoint) { + this.wireMockClient = new WireMock(wireMockContainer.host, wireMockContainer.firstMappedPort) this.endpoint = endpoint } - abstract protected HttpRequest getRequest(String value) + abstract protected RequestPattern getRequest() - abstract protected HttpRequest getRequest() + abstract protected RequestPatternBuilder getRequest(String value) abstract void setResponse() - int getRequestCount(HttpRequest httpRequest) { - mockServerClient.retrieveRecordedRequests(httpRequest) - .size() + int getRequestCount(RequestPatternBuilder requestPatternBuilder) { + return wireMockClient.find(requestPatternBuilder).size() } int getRequestCount(String value) { - mockServerClient.retrieveRecordedRequests(getRequest(value)) - .size() - } - - int getRequestCount() { - mockServerClient.retrieveRecordedRequests(request) - .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)) + Integer statusCode = SC_OK) { + + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(statusCode) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) + + wireMockClient.register(new StubMapping(requestPattern, responseBuilder.build())) } void setResponse(String value, ResponseModel responseModel, Map headers) { - setResponse(value, responseModel, OK_200, headers) + setResponse(value, responseModel, SC_OK, headers) } void setResponse(String value, ResponseModel responseModel, - HttpStatusCode statusCode = OK_200, + Integer statusCode = SC_OK, 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)) + + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(statusCode) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) + + headers.each { responseBuilder.withHeader(it.key, it.value) } + + 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)) + Integer statusCode = SC_OK) { + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(statusCode) + .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(SC_OK) + .withHeader("Content-Type", "application/json") + .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(SC_OK) + .withHeader("Content-Type", "application/json") + .withBody(encode(responseModel)) - void setResponse(String value, HttpStatusCode httpStatusCode) { - mockServerClient.when(getRequest(value), Times.exactly(1)) - .respond(response().withStatusCode(httpStatusCode.code())) + wireMockClient.register(new StubMapping(getRequest(), responseBuilder.build())) } - void setResponse(String value, HttpStatusCode httpStatusCode, String errorText) { - mockServerClient.when(getRequest(value), Times.exactly(1)) - .respond(response().withStatusCode(httpStatusCode.code()) - .withBody(errorText, APPLICATION_JSON)) + void setResponse(String value, Integer statusCode) { + def responseBuilder = ResponseDefinitionBuilder.responseDefinition() + .withStatus(statusCode) + + 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() } - } - - List getRecordedRequestsBody() { - mockServerClient.retrieveRecordedRequests(request) - .collect { it.body.toString() } + wireMockClient.find(getRequest(value)).bodyAsString } - Map> getLastRecordedRequestHeaders(HttpRequest httpRequest) { - getRecordedRequestsHeaders(httpRequest).last() + Map> getLastRecordedRequestHeaders(RequestPatternBuilder requestPatternBuilder) { + getRecordedRequestsHeaders(requestPatternBuilder).last() } - List>> getRecordedRequestsHeaders(HttpRequest httpRequest) { - getRequestsHeaders(mockServerClient.retrieveRecordedRequests(httpRequest) as List) + List>> getRecordedRequestsHeaders(RequestPatternBuilder builder) { + wireMockClient.find(builder).collect { req -> + req.headers.all().collectEntries { [it.key(), it.values()*.toString()] } + } } Map> getLastRecordedRequestHeaders(String value) { @@ -158,17 +145,12 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper { } List>> getRecordedRequestsHeaders(String value) { - getRequestsHeaders(mockServerClient.retrieveRecordedRequests(getRequest(value)) as List) + getRecordedRequestsHeaders(getRequest(value)) } - // 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) - } - - 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 66ce54a9531..e8ad892270b 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,39 +1,49 @@ package org.prebid.server.functional.testcontainers.scaffolding -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 com.github.tomakehurst.wiremock.matching.RequestPattern +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder 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 java.util.stream.Stream - -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response -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 java.lang.Integer.MAX_VALUE +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 +import static org.apache.hc.core5.http.HttpStatus.SC_INTERNAL_SERVER_ERROR +import static org.apache.hc.core5.http.HttpStatus.SC_OK class PrebidCache extends NetworkScaffolding { private static final String CACHE_ENDPOINT = "/cache" + private static final String RESPONSE_BODY = + ''' + { + "responses" : [ + {{#each (jsonPath request.body '$.puts')}} + { + "uuid" : "{{randomValue type='UUID'}}" + }{{#unless @last}},{{/unless}} + {{/each}} + ] + } + ''' - PrebidCache(MockServerContainer mockServerContainer) { - super(mockServerContainer, CACHE_ENDPOINT) - } - String getVTracGetRequestParams() { - getRecordedRequestsQueryParameters(request().withMethod("GET") - .withPath(CACHE_ENDPOINT)) + PrebidCache(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, CACHE_ENDPOINT) } - void setXmlCacheResponse(String payload, PrebidCacheResponse prebidCacheResponse) { - setResponse(getXmlCacheRequest(payload), prebidCacheResponse) + String getVTracGetRequestParams() { + getRecordedRequestsQueryParameters(getRequestedFor(urlMatching("^/cache(\\?.*)?\$"))) } int getXmlRequestCount(String payload) { @@ -44,84 +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 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(SC_OK) + .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(SC_OK) + .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(SC_INTERNAL_SERVER_ERROR))) } 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(SC_INTERNAL_SERVER_ERROR) + .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 a3bd0e9ddfb..4b5de3307d2 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,37 +1,34 @@ package org.prebid.server.functional.testcontainers.scaffolding -import org.mockserver.model.HttpRequest -import org.testcontainers.containers.MockServerContainer +import com.github.tomakehurst.wiremock.matching.RequestPattern +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder +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) { - super(mockServerContainer, CONFIG_ENDPOINT) + PubStackAnalytics(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, CONFIG_ENDPOINT) } @Override - protected HttpRequest getRequest() { - request().withPath(ANALYTICS_ENDPOINT) + protected RequestPattern getRequest() { + postRequestedFor(urlEqualTo(ANALYTICS_ENDPOINT)) + .build() } @Override - void setResponse() { - - } - - @Override - protected HttpRequest getRequest(String value) { - request().withPath(ANALYTICS_ENDPOINT) + protected RequestPatternBuilder getRequest(String value) { + throw new UnsupportedOperationException() } @Override - void reset() { - super.reset(CONFIG_ENDPOINT) - super.reset(ANALYTICS_ENDPOINT) + void setResponse() { + throw new UnsupportedOperationException() } } 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..959729d79f9 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,9 +1,7 @@ package org.prebid.server.functional.testcontainers.scaffolding -import org.mockserver.matchers.TimeToLive -import org.mockserver.matchers.Times -import org.mockserver.model.HttpRequest -import org.mockserver.model.HttpStatusCode +import com.github.tomakehurst.wiremock.matching.RequestPattern +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder import org.prebid.server.functional.model.config.Audience import org.prebid.server.functional.model.config.AudienceId import org.prebid.server.functional.model.config.IdentifierType @@ -12,59 +10,68 @@ 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 org.testcontainers.containers.MockServerContainer import java.nio.charset.StandardCharsets -import static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response -import static org.mockserver.model.HttpStatusCode.NO_CONTENT_204 -import static org.mockserver.model.HttpStatusCode.OK_200 +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.apache.http.HttpStatus.SC_NO_CONTENT +import static org.apache.http.HttpStatus.SC_OK class StoredCache extends NetworkScaffolding { private static final String CACHE_ENDPOINT = "/stored-cache" - StoredCache(MockServerContainer mockServerContainer) { - super(mockServerContainer, CACHE_ENDPOINT) + StoredCache(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, CACHE_ENDPOINT) } - @Override - protected HttpRequest getRequest(String impId) {} + protected RequestPattern getRequest() { + getRequestedFor(urlEqualTo(endpoint)) + .build() + } @Override - HttpRequest getRequest() { - request().withMethod("GET") - .withPath(endpoint) + protected RequestPatternBuilder getRequest(String bidRequestId) { + throw new UnsupportedOperationException() } @Override - void setResponse() {} + void setResponse() { + throw new UnsupportedOperationException() + } 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(SC_OK) + .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(SC_OK) + .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()) } + void setCachingResponse(Integer statusCode = SC_NO_CONTENT) { + wireMockClient.register(post(urlPathEqualTo(endpoint)) + .atPriority(Integer.MAX_VALUE) + .willReturn(aResponse() + .withStatus(statusCode))) } 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 343a118f53a..f80e26d8906 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,15 +1,15 @@ package org.prebid.server.functional.testcontainers.scaffolding -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 static org.mockserver.model.HttpRequest.request -import static org.mockserver.model.HttpResponse.response -import static org.mockserver.model.HttpStatusCode.OK_200 +import com.github.tomakehurst.wiremock.matching.RequestPattern +import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder +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.urlEqualTo +import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching +import static org.apache.http.HttpStatus.SC_OK 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 @@ -22,27 +22,23 @@ 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(NetworkServiceContainer wireMockContainer) { + super(wireMockContainer, VENDOR_LIST_ENDPOINT) } @Override - protected HttpRequest getRequest(String value) { - return null + protected RequestPattern getRequest() { + anyRequestedFor(urlEqualTo(VENDOR_LIST_ENDPOINT)) + .build() } @Override - protected HttpRequest getRequest() { - request().withPath(VENDOR_LIST_ENDPOINT) - } - - @Override - void reset() { - TcfPolicyVersion.values().each { version -> super.reset("/v${version.vendorListVersion}/vendor-list.json") } + protected RequestPatternBuilder getRequest(String value) { + throw new UnsupportedOperationException() } 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 { @@ -51,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(SC_OK) + .withFixedDelay(second * 1000) + .withBody(prepareEncodeResponseBody))) } } 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 4a0229122b6..83f93334e0d 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/HttpSettingsSpec.groovy @@ -1,5 +1,6 @@ package org.prebid.server.functional.tests +import org.apache.http.HttpStatus import org.prebid.server.functional.model.UidsCookie import org.prebid.server.functional.model.db.StoredRequest import org.prebid.server.functional.model.mock.services.httpsettings.HttpAccountsResponse @@ -16,6 +17,7 @@ import org.prebid.server.functional.testcontainers.scaffolding.HttpSettings import org.prebid.server.functional.util.PBSUtils import org.prebid.server.util.ResourceUtil +import static org.apache.http.HttpStatus.SC_UNAUTHORIZED import static org.prebid.server.functional.model.bidder.BidderName.GENERIC import static org.prebid.server.functional.testcontainers.Dependencies.networkServiceContainer @@ -25,21 +27,16 @@ 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) } def "PBS should take account information from http data source on auction request"() { @@ -74,7 +71,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 +86,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 +134,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 +143,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 +174,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 +184,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 +224,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 +239,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 +251,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) @@ -293,7 +290,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) @@ -302,7 +299,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" @@ -319,7 +316,7 @@ class HttpSettingsSpec extends BaseSpec { then: "Request should fail with error" def exception = thrown(PrebidServerException) - assert exception.statusCode == 401 + assert exception.statusCode == SC_UNAUTHORIZED assert exception.responseBody.contains("Account '$eventRequest.accountId' doesn't support events") } @@ -332,7 +329,7 @@ class HttpSettingsSpec extends BaseSpec { then: "Request should fail with error" def exception = thrown(PrebidServerException) - assert exception.statusCode == 401 + assert exception.statusCode == SC_UNAUTHORIZED assert exception.responseBody.contains("Account '$eventRequest.accountId' doesn't support events") } } 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..d4886f35e98 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,5 @@ package org.prebid.server.functional.tests -import org.mockserver.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 +15,15 @@ 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.apache.http.HttpStatus.SC_CONTINUE +import static org.apache.http.HttpStatus.SC_INSUFFICIENT_STORAGE +import static org.apache.http.HttpStatus.SC_OK +import static org.apache.http.HttpStatus.SC_BAD_REQUEST +import static org.apache.http.HttpStatus.SC_NO_CONTENT +import static org.apache.http.HttpStatus.SC_PROCESSING +import static org.apache.http.HttpStatus.SC_SERVICE_UNAVAILABLE +import static org.apache.http.HttpStatus.SC_INTERNAL_SERVER_ERROR import static org.prebid.server.functional.model.AccountStatus.ACTIVE - 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 @@ -36,7 +36,6 @@ import static org.prebid.server.functional.model.response.auction.BidRejectionRe import static org.prebid.server.functional.model.response.auction.BidRejectionReason.RESPONSE_REJECTED_INVALID_CREATIVE_NOT_SECURE import static org.prebid.server.functional.model.response.auction.BidRejectionReason.RESPONSE_REJECTED_INVALID_CREATIVE_SIZE import static org.prebid.server.functional.model.response.auction.BidRejectionReason.ERROR_TIMED_OUT -import static org.prebid.server.functional.model.response.auction.ErrorType.GENERIC class SeatNonBidSpec extends BaseSpec { @@ -64,7 +63,7 @@ class SeatNonBidSpec extends BaseSpec { assert seatNonBid.nonBid[0].statusCode == ERROR_NO_BID where: - responseStatusCode << [OK_200, NO_CONTENT_204] + responseStatusCode << [SC_OK, SC_NO_CONTENT] } def "PBS should populate seatNonBid when returnAllBidStatus=true and requested bidder responded with invalid bid response status code"() { @@ -75,7 +74,7 @@ class SeatNonBidSpec extends BaseSpec { def bidResponse = BidResponse.getDefaultBidResponse(bidRequest) and: "Set bidder response" - def statusCode = PBSUtils.getRandomElement([PROCESSING_102, BAD_REQUEST_400, INTERNAL_SERVER_ERROR_500]) + def statusCode = PBSUtils.getRandomElement([SC_PROCESSING, SC_BAD_REQUEST, SC_INTERNAL_SERVER_ERROR]) bidder.setResponse(bidRequest.id, bidResponse, statusCode) when: "PBS processes auction request" @@ -98,7 +97,7 @@ class SeatNonBidSpec extends BaseSpec { def bidResponse = BidResponse.getDefaultBidResponse(bidRequest) and: "Set bidder response" - bidder.setResponse(bidRequest.id, bidResponse, SERVICE_UNAVAILABLE_503) + bidder.setResponse(bidRequest.id, bidResponse, SC_SERVICE_UNAVAILABLE) when: "PBS processes auction request" def response = defaultPbsService.sendAuctionRequest(bidRequest) @@ -242,7 +241,7 @@ class SeatNonBidSpec extends BaseSpec { } and: "Set bidder response" - bidder.setResponse(bidRequest.id, bidResponse, PBSUtils.getRandomElement(HttpStatusCode.values() as List)) + bidder.setResponse(bidRequest.id, bidResponse, PBSUtils.getRandomNumber(SC_CONTINUE, SC_INSUFFICIENT_STORAGE)) when: "PBS processes auction request" def response = defaultPbsService.sendAuctionRequest(bidRequest) 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..f29bc868c57 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.apache.http.HttpStatus.SC_NOT_FOUND 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(SC_NOT_FOUND) 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..fcfa39f6e9d 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,7 +14,7 @@ import org.prebid.server.functional.util.PBSUtils import java.time.Instant -import static org.mockserver.model.HttpStatusCode.BAD_REQUEST_400 +import static org.apache.http.HttpStatus.SC_BAD_REQUEST 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.bidder.BidderName.GENERIC @@ -740,7 +740,7 @@ class PriceFloorsFetchingSpec extends PriceFloorsBaseSpec { accountDao.save(account) and: "Set Floors Provider response with status code != 200" - floorsProvider.setResponse(accountId, BAD_REQUEST_400) + floorsProvider.setResponse(accountId, SC_BAD_REQUEST) and: "PBS fetch rules from floors provider" cacheFloorsProviderRules(bidRequest, floorsPbsService, GENERIC, NONE) @@ -1952,7 +1952,7 @@ class PriceFloorsFetchingSpec extends PriceFloorsBaseSpec { cacheFloorsProviderRules(bidRequest, floorValue, pbsService) and: "Set Floors Provider response with status code != 200" - floorsProvider.setResponse(accountId, BAD_REQUEST_400) + floorsProvider.setResponse(accountId, SC_BAD_REQUEST) when: "PBS processes auction request" pbsService.sendAuctionRequest(bidRequest) 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..e9b819d23fa 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 @@ -21,7 +21,7 @@ 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.apache.http.HttpStatus.SC_BAD_REQUEST import static org.prebid.server.functional.model.Currency.USD import static org.prebid.server.functional.model.bidder.BidderName.GENERIC import static org.prebid.server.functional.model.pricefloors.MediaType.BANNER @@ -297,7 +297,7 @@ class PriceFloorsSignalingSpec extends PriceFloorsBaseSpec { accountDao.save(account) and: "Set Floors Provider response with status code != 200" - floorsProvider.setResponse(bidRequest.site.publisher.id, BAD_REQUEST_400) + floorsProvider.setResponse(bidRequest.site.publisher.id, SC_BAD_REQUEST) and: "Set bidder response" def bidResponse = BidResponse.getDefaultBidResponse(bidRequest) 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..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 @@ -434,7 +433,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..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 @@ -378,7 +377,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) 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