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 b9f4a2eff8b..8864e120eb2 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/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/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..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
@@ -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.prebid.server.functional.model.HttpStatusCode.OK_200
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()
+ .withTransformers("response-template")
+ .withStatus(OK_200.code)
+ .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..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
@@ -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,24 @@ 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()))
- }
+ void setResponse() {}
@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) {
+ 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..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
@@ -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.prebid.server.functional.model.HttpStatusCode.OK_200
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(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 5af648b2bc0..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
@@ -1,16 +1,18 @@
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.HttpStatusCode
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.prebid.server.functional.model.HttpStatusCode.OK_200
class HttpSettings extends NetworkScaffolding {
@@ -18,64 +20,47 @@ 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() {
}
- 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,
+ HttpStatusCode statusCode = OK_200,
+ Map headers = [:]) {
- @Override
- void reset() {
- super.reset(ENDPOINT)
- super.reset(RFC_ENDPOINT)
- super.reset(AMP_ENDPOINT)
- }
+ def responseBuilder = ResponseDefinitionBuilder.responseDefinition()
+ .withStatus(statusCode.code)
+ .withHeader("Content-Type", "application/json")
+ .withBody(encode(responseModel))
- static String getEndpoint() {
- return ENDPOINT
- }
+ 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..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
@@ -1,63 +1,51 @@
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.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.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.prebid.server.functional.model.HttpStatusCode.OK_200
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))
+ 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,
@@ -70,87 +58,97 @@ abstract class NetworkScaffolding implements ObjectMapperWrapper {
ResponseModel responseModel,
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))
+
+ 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(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