Skip to content

Commit

Permalink
Add functional tests for module-execution host level config (#3595)
Browse files Browse the repository at this point in the history
* Add functional tests for module-execution host level config
  • Loading branch information
osulzhenko authored Dec 5, 2024
1 parent 817122f commit e5d6058
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,6 @@ class PrebidServerContainer extends GenericContainer<PrebidServerContainer> {

private static String normalizeProperty(String property) {
property.replace(".", "_")
.replace("-", "")
.replace("[", "_")
.replace("]", "_")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import org.prebid.server.functional.model.request.auction.TraceLevel
import org.prebid.server.functional.model.response.auction.InvocationResult
import org.prebid.server.functional.service.PrebidServerService
import org.prebid.server.functional.util.PBSUtils
import spock.lang.PendingFeature

import static org.prebid.server.functional.model.ModuleName.ORTB2_BLOCKING
import static org.prebid.server.functional.model.ModuleName.PB_RICHMEDIA_FILTER
Expand Down Expand Up @@ -293,7 +292,6 @@ class GeneralModuleSpec extends ModuleBaseSpec {
modulesConfig << [null, new PbsModulesConfig()]
}

@PendingFeature
def "PBS should call all modules without account config when modules enabled in module-execution host config"() {
given: "PBS service with module-execution config"
def pbsConfig = MULTI_MODULE_CONFIG + ENABLED_INVOKE_CONFIG +
Expand Down Expand Up @@ -333,6 +331,37 @@ class GeneralModuleSpec extends ModuleBaseSpec {
pbsServiceFactory.removeContainer(pbsConfig)
}

def "PBS shouldn't call any module without account config when modules disabled in module-execution host config"() {
given: "PBS service with module-execution config"
def pbsConfig = MULTI_MODULE_CONFIG + ENABLED_INVOKE_CONFIG +
[("hooks.admin.module-execution.${ORTB2_BLOCKING.code}".toString()): 'false']
def pbsServiceWithMultipleModules = pbsServiceFactory.getService(pbsConfig)

and: "Default bid request with verbose trace"
def bidRequest = defaultBidRequest.tap {
ext.prebid.trace = TraceLevel.VERBOSE
}

and: "Flush metrics"
flushMetrics(pbsServiceWithMultipleModules)

when: "PBS processes auction request"
def response = pbsServiceWithMultipleModules.sendAuctionRequest(bidRequest)

then: "PBS response shouldn't include trace information about no-called modules"
assert !response?.ext?.prebid?.modules?.trace?.stages?.outcomes?.groups?.invocationResults?.flatten()

and: "Ortb2blocking module call metrics shouldn't be updated"
def metrics = pbsServiceWithMultipleModuleWithRequireInvoke.sendCollectedMetricsRequest()
assert !metrics[CALL_METRIC.formatted(ORTB2_BLOCKING.code, BIDDER_REQUEST.metricValue, ORTB2_BLOCKING_BIDDER_REQUEST.code)]
assert !metrics[CALL_METRIC.formatted(ORTB2_BLOCKING.code, RAW_BIDDER_RESPONSE.metricValue, ORTB2_BLOCKING_RAW_BIDDER_RESPONSE.code)]
assert !metrics[NOOP_METRIC.formatted(ORTB2_BLOCKING.code, BIDDER_REQUEST.metricValue, ORTB2_BLOCKING_BIDDER_REQUEST.code)]
assert !metrics[NOOP_METRIC.formatted(ORTB2_BLOCKING.code, RAW_BIDDER_RESPONSE.metricValue, ORTB2_BLOCKING_RAW_BIDDER_RESPONSE.code)]

cleanup: "Stop and remove pbs container"
pbsServiceFactory.removeContainer(pbsConfig)
}

def "PBS should call module without account config when default-account module-execution config enabled module"() {
given: "PBS service with module-execution and default account configs"
def defaultAccountConfigSettings = AccountConfig.defaultAccountConfig.tap {
Expand All @@ -358,19 +387,15 @@ class GeneralModuleSpec extends ModuleBaseSpec {
when: "PBS processes auction request"
def response = pbsServiceWithMultipleModules.sendAuctionRequest(bidRequest)

then: "PBS response should include trace information about called modules"
verifyAll(response?.ext?.prebid?.modules?.trace?.stages?.outcomes?.groups?.invocationResults?.flatten() as List<InvocationResult>) {
it.status == [SUCCESS, SUCCESS]
it.action == [NO_ACTION, NO_ACTION]
it.hookId.moduleCode.sort() == [ORTB2_BLOCKING, ORTB2_BLOCKING].code.sort()
}
then: "PBS response shouldn't include trace information about no-called modules"
assert !response?.ext?.prebid?.modules?.trace?.stages?.outcomes?.groups?.invocationResults?.flatten()

and: "Ortb2blocking module call metrics should be updated"
def metrics = pbsServiceWithMultipleModules.sendCollectedMetricsRequest()
assert metrics[CALL_METRIC.formatted(ORTB2_BLOCKING.code, BIDDER_REQUEST.metricValue, ORTB2_BLOCKING_BIDDER_REQUEST.code)] == 1
assert metrics[CALL_METRIC.formatted(ORTB2_BLOCKING.code, RAW_BIDDER_RESPONSE.metricValue, ORTB2_BLOCKING_RAW_BIDDER_RESPONSE.code)] == 1
assert metrics[NOOP_METRIC.formatted(ORTB2_BLOCKING.code, BIDDER_REQUEST.metricValue, ORTB2_BLOCKING_BIDDER_REQUEST.code)] == 1
assert metrics[NOOP_METRIC.formatted(ORTB2_BLOCKING.code, RAW_BIDDER_RESPONSE.metricValue, ORTB2_BLOCKING_RAW_BIDDER_RESPONSE.code)] == 1
and: "Ortb2blocking module call metrics shouldn't be updated"
def metrics = pbsServiceWithMultipleModuleWithRequireInvoke.sendCollectedMetricsRequest()
assert !metrics[CALL_METRIC.formatted(ORTB2_BLOCKING.code, BIDDER_REQUEST.metricValue, ORTB2_BLOCKING_BIDDER_REQUEST.code)]
assert !metrics[CALL_METRIC.formatted(ORTB2_BLOCKING.code, RAW_BIDDER_RESPONSE.metricValue, ORTB2_BLOCKING_RAW_BIDDER_RESPONSE.code)]
assert !metrics[NOOP_METRIC.formatted(ORTB2_BLOCKING.code, BIDDER_REQUEST.metricValue, ORTB2_BLOCKING_BIDDER_REQUEST.code)]
assert !metrics[NOOP_METRIC.formatted(ORTB2_BLOCKING.code, RAW_BIDDER_RESPONSE.metricValue, ORTB2_BLOCKING_RAW_BIDDER_RESPONSE.code)]

and: "RB-Richmedia-Filter module call metrics shouldn't be updated"
assert !metrics[CALL_METRIC.formatted(PB_RICHMEDIA_FILTER.code, ALL_PROCESSED_BID_RESPONSES.metricValue, PB_RICHMEDIA_FILTER_ALL_PROCESSED_RESPONSES.code)]
Expand Down

0 comments on commit e5d6058

Please sign in to comment.