@@ -25,6 +25,7 @@ import org.prebid.server.functional.model.response.cookiesync.CookieSyncResponse
2525import org.prebid.server.functional.model.response.cookiesync.RawCookieSyncResponse
2626import org.prebid.server.functional.model.response.currencyrates.CurrencyRatesResponse
2727import org.prebid.server.functional.model.response.getuids.GetuidResponse
28+ import org.prebid.server.functional.model.response.influx.InfluxResponse
2829import org.prebid.server.functional.model.response.infobidders.BidderInfoResponse
2930import org.prebid.server.functional.model.response.setuid.SetuidResponse
3031import org.prebid.server.functional.model.response.status.StatusResponse
@@ -42,6 +43,8 @@ import java.time.format.DateTimeFormatter
4243
4344import static io.restassured.RestAssured.given
4445import static java.time.ZoneOffset.UTC
46+ import static org.prebid.server.functional.testcontainers.Dependencies.influxdbContainer
47+
4548
4649class PrebidServerService implements ObjectMapperWrapper {
4750
@@ -59,10 +62,12 @@ class PrebidServerService implements ObjectMapperWrapper {
5962 static final String HTTP_INTERACTION_ENDPOINT = " /logging/httpinteraction"
6063 static final String COLLECTED_METRICS_ENDPOINT = " /collected-metrics"
6164 static final String PROMETHEUS_METRICS_ENDPOINT = " /metrics"
65+ static final String INFLUX_DB_ENDPOINT = " /query"
6266 static final String UIDS_COOKIE_NAME = " uids"
6367
6468 private final PrebidServerContainer pbsContainer
6569 private final RequestSpecification requestSpecification
70+ private final RequestSpecification influxRequestSpecification
6671 private final RequestSpecification adminRequestSpecification
6772 private final RequestSpecification prometheusRequestSpecification
6873
@@ -75,6 +80,8 @@ class PrebidServerService implements ObjectMapperWrapper {
7580 this . pbsContainer = pbsContainer
7681 requestSpecification = new RequestSpecBuilder (). setBaseUri(pbsContainer. rootUri)
7782 .build()
83+ influxRequestSpecification = new RequestSpecBuilder (). setBaseUri(pbsContainer. influxUri)
84+ .build()
7885 adminRequestSpecification = buildAndGetRequestSpecification(pbsContainer. adminRootUri, authenticationScheme)
7986 prometheusRequestSpecification = buildAndGetRequestSpecification(pbsContainer. prometheusRootUri, authenticationScheme)
8087 }
@@ -290,6 +297,16 @@ class PrebidServerService implements ObjectMapperWrapper {
290297 decode(response. asString(), new TypeReference<Map<String , Number > > () {})
291298 }
292299
300+ Map<String , Number > sendInfluxMetricsRequest () {
301+ def response = given(influxRequestSpecification)
302+ .queryParams([" db" : influxdbContainer. getDatabase(),
303+ " q" : " SELECT COUNT(count) FROM /.*/ WHERE count >= 1 GROUP BY \" measurement\" " ])
304+ .get(INFLUX_DB_ENDPOINT )
305+
306+ checkResponseStatusCode(response)
307+ collectInToMap(decode(response. getBody(). asString(), InfluxResponse ))
308+ }
309+
293310 String sendPrometheusMetricsRequest () {
294311 def response = given(prometheusRequestSpecification). get(PROMETHEUS_METRICS_ENDPOINT )
295312
@@ -431,6 +448,15 @@ class PrebidServerService implements ObjectMapperWrapper {
431448 }
432449 }
433450
451+ Boolean isContainMetricByValue (String value ) {
452+ try {
453+ PBSUtils . waitUntil({ sendInfluxMetricsRequest()[value] != null })
454+ true
455+ } catch (IllegalStateException ignored) {
456+ false
457+ }
458+ }
459+
434460 private String getPbsLogsByValue (String value ) {
435461 pbsContainer. logs. split(" \n " ). find { it. contains(value) }
436462 }
@@ -454,4 +480,10 @@ class PrebidServerService implements ObjectMapperWrapper {
454480 .setAuth(authScheme)
455481 .build()
456482 }
483+
484+ private static Map<String , Number > collectInToMap (InfluxResponse responseBody ) {
485+ responseBody?. results?. first()?. series?. collectEntries {
486+ [(it. name): it. values?. first()?. getAt(1 ) as Integer ]
487+ } ?: [:]
488+ }
457489}
0 commit comments