Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Core: Default enabled property is true in analytics acc config #3485

Merged
merged 2 commits into from
Oct 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,12 @@ private boolean isNotAllowedAdapterByGlobalOrAccountAnalyticsConfig(String adapt

if (modules != null && modules.containsKey(adapter)) {
final ObjectNode moduleConfig = modules.get(adapter);
return moduleConfig == null || !moduleConfig.has("enabled")
|| !moduleConfig.get("enabled").asBoolean();

if (moduleConfig == null || !moduleConfig.has("enabled")) {
return false;
}

return !moduleConfig.get("enabled").asBoolean();
}

return !globalEnabledAdapters.contains(adapter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,22 +62,23 @@ class AnalyticsSpec extends BaseSpec {
when: "PBS processes auction request"
pbsServiceWithLogAnalytics.sendAuctionRequest(bidRequest)

then: "PBS should call log analytics"
then: "Bidder request shouldn't contain additional field from logAnalytics"
def bidderRequest = bidder.getBidderRequest(bidRequest.id)
assert !bidderRequest.ext.prebid.analytics

and: "Analytics bid request shouldn't be emitted in logs"
PBSUtils.waitUntil({ pbsServiceWithLogAnalytics.isContainLogsByValue(bidRequest.id) })
def logsByValue = pbsServiceWithLogAnalytics.getLogsByValue(bidRequest.id)
assert logsByValue

and: "Analytics adapter shouldn't contain additional info"
def analyticsBidRequest = extractResolvedRequestFromLog(logsByValue)
assert !analyticsBidRequest?.ext?.prebid?.analytics?.logAnalytics?.additionalData
}

def "PBS shouldn't populate log analytics when log enabled in account and disabled in global config"() {
def "PBS shouldn't populate log analytics when log analytics is directly non-restricted for account and disabled in global config"() {
given: "Basic bid request"
def bidRequest = BidRequest.defaultBidRequest

and: "Account in the DB"
def logAnalyticsModule = new LogAnalytics(enabled: true)
def logAnalyticsModule = new LogAnalytics(enabled: logAnalyticsEnable)
def config = new AccountAnalyticsConfig(modules: new AnalyticsModule(logAnalytics: logAnalyticsModule))
def accountConfig = new AccountConfig(analytics: config)
def account = new Account(uuid: bidRequest.accountId, config: accountConfig)
Expand All @@ -86,17 +87,24 @@ class AnalyticsSpec extends BaseSpec {
when: "PBS processes auction request"
pbsServiceWithoutLogAnalytics.sendAuctionRequest(bidRequest)

then: "Bidder request shouldn't contain additional field from logAnalytics"
def bidderRequest = bidder.getBidderRequest(bidRequest.id)
assert !bidderRequest.ext.prebid.analytics

then: "PBS shouldn't call log analytics"
def logsByValue = pbsServiceWithLogAnalytics.getLogsByValue(bidRequest.id)
assert !logsByValue

where:
logAnalyticsEnable << [null, true]
}

def "PBS should populate log analytics when log enabled in account and global config"() {
def "PBS should populate log analytics when log analytics is directly non-restricted for account and enabled global config"() {
given: "Basic bid request"
def bidRequest = BidRequest.defaultBidRequest

and: "Account in the DB"
def logAnalyticsModule = new LogAnalytics(enabled: true)
def logAnalyticsModule = new LogAnalytics(enabled: logAnalyticsEnable)
def config = new AccountAnalyticsConfig(modules: new AnalyticsModule(logAnalytics: logAnalyticsModule))
def accountConfig = new AccountConfig(analytics: config)
def account = new Account(uuid: bidRequest.accountId, config: accountConfig)
Expand All @@ -105,17 +113,17 @@ class AnalyticsSpec extends BaseSpec {
when: "PBS processes auction request"
pbsServiceWithLogAnalytics.sendAuctionRequest(bidRequest)

then: "PBS should call log analytics"
then: "Analytics bid request shouldn't be emitted in logs"
PBSUtils.waitUntil({ pbsServiceWithLogAnalytics.isContainLogsByValue(bidRequest.id) })
def logsByValue = pbsServiceWithLogAnalytics.getLogsByValue(bidRequest.id)
assert logsByValue

and: "Analytics adapter shouldn't contain additional info"
def analyticsBidRequest = extractResolvedRequestFromLog(logsByValue)
assert !analyticsBidRequest?.ext?.prebid?.analytics?.logAnalytics?.additionalData

where:
logAnalyticsEnable << [null, true]
}

def "PBS shouldn't populate log analytics when log disabled in account and enabled in global config"() {
def "PBS shouldn't populate log analytics when log analytics is directly restricted for account and enabled in global config"() {
given: "Basic bid request"
def bidRequest = BidRequest.defaultBidRequest

Expand All @@ -129,12 +137,16 @@ class AnalyticsSpec extends BaseSpec {
when: "PBS processes auction request"
pbsServiceWithLogAnalytics.sendAuctionRequest(bidRequest)

then: "PBS shouldn't call log analytics"
then: "Bidder request shouldn't contain additional field from logAnalytics"
def bidderRequest = bidder.getBidderRequest(bidRequest.id)
assert !bidderRequest.ext.prebid.analytics

and: "PBS shouldn't call log analytics"
def logsByValue = pbsServiceWithLogAnalytics.getLogsByValue(bidRequest.id)
assert !logsByValue
}

def "PBS shouldn't populate log analytics when log disabled in global config and without account"() {
def "PBS shouldn't populate log analytics when log disabled in global config and not set for account"() {
given: "Basic bid request"
def bidRequest = BidRequest.defaultBidRequest

Expand All @@ -147,20 +159,24 @@ class AnalyticsSpec extends BaseSpec {
when: "PBS processes auction request"
pbsServiceWithoutLogAnalytics.sendAuctionRequest(bidRequest)

then: "PBS shouldn't call log analytics"
then: "Bidder request shouldn't contain additional field from logAnalytics"
def bidderRequest = bidder.getBidderRequest(bidRequest.id)
assert !bidderRequest.ext.prebid.analytics

and: "PBS shouldn't call log analytics"
def logsByValue = pbsServiceWithLogAnalytics.getLogsByValue(bidRequest.id)
assert !logsByValue
}

def "PBS should populate log analytics with additional data when log enabled in account and data specified"() {
def "PBS should populate log analytics with additional data when log is directly non-restricted for account and data specified"() {
given: "Basic bid request"
def bidRequest = BidRequest.defaultBidRequest.tap {
ext.prebid.analytics = new PrebidAnalytics()
}

and: "Account in the DB"
def additionalData = PBSUtils.randomString
def logAnalyticsModule = new LogAnalytics(enabled: true, additionalData: additionalData)
def logAnalyticsModule = new LogAnalytics(enabled: logAnalyticsEnable, additionalData: additionalData)
def config = new AccountAnalyticsConfig(modules: new AnalyticsModule(logAnalytics: logAnalyticsModule))
def accountConfig = new AccountConfig(analytics: config)
def account = new Account(uuid: bidRequest.accountId, config: accountConfig)
Expand All @@ -169,25 +185,29 @@ class AnalyticsSpec extends BaseSpec {
when: "PBS processes auction request"
pbsServiceWithLogAnalytics.sendAuctionRequest(bidRequest)

then: "PBS should call log analytics"
then: "Bidder request shouldn't contain additional field from logAnalytics"
def bidderRequest = bidder.getBidderRequest(bidRequest.id)
assert !bidderRequest.ext.prebid.analytics.logAnalytics

then: "Analytics bid request should be emitted in logs"
PBSUtils.waitUntil({ pbsServiceWithLogAnalytics.isContainLogsByValue(bidRequest.id) })
def logsByValue = pbsServiceWithLogAnalytics.getLogsByValue(bidRequest.id)
assert logsByValue

and: "Analytics adapter should contain additional info"
def analyticsBidRequest = extractResolvedRequestFromLog(logsByValue)
assert analyticsBidRequest.ext.prebid.analytics.logAnalytics.additionalData == additionalData

where:
logAnalyticsEnable << [null, true]
}

def "PBS should populate log analytics with additional data from request when log enabled in account and data specified in request only"() {
def "PBS should populate log analytics with additional data from request when data specified in request only"() {
given: "Basic bid request"
def additionalData = PBSUtils.randomString
def bidRequest = BidRequest.defaultBidRequest.tap {
ext.prebid.analytics = new PrebidAnalytics(logAnalytics: new LogAnalytics(additionalData: additionalData))
}

and: "Account in the DB"
def logAnalyticsModule = new LogAnalytics(enabled: true, additionalData: null)
def logAnalyticsModule = new LogAnalytics(enabled: logAnalyticsEnable, additionalData: null)
def config = new AccountAnalyticsConfig(modules: new AnalyticsModule(logAnalytics: logAnalyticsModule))
def accountConfig = new AccountConfig(analytics: config)
def account = new Account(uuid: bidRequest.accountId, config: accountConfig)
Expand All @@ -196,14 +216,14 @@ class AnalyticsSpec extends BaseSpec {
when: "PBS processes auction request"
pbsServiceWithLogAnalytics.sendAuctionRequest(bidRequest)

then: "PBS should call log analytics"
then: "Analytics bid request should be emitted in logs"
PBSUtils.waitUntil({ pbsServiceWithLogAnalytics.isContainLogsByValue(bidRequest.id) })
def logsByValue = pbsServiceWithLogAnalytics.getLogsByValue(bidRequest.id)
assert logsByValue

and: "Analytics adapter should contain additional info"
def analyticsBidRequest = extractResolvedRequestFromLog(logsByValue)
assert analyticsBidRequest.ext.prebid.analytics.logAnalytics.additionalData == additionalData

where:
logAnalyticsEnable << [null, true]
}

def "PBS should prioritize logAnalytics from request when data specified in account and request"() {
Expand All @@ -215,7 +235,7 @@ class AnalyticsSpec extends BaseSpec {

and: "Account in the DB"
def accountAdditionalData = PBSUtils.randomString
def logAnalyticsModule = new LogAnalytics(enabled: true, additionalData: accountAdditionalData)
def logAnalyticsModule = new LogAnalytics(enabled: logAnalyticsEnable, additionalData: accountAdditionalData)
def config = new AccountAnalyticsConfig(modules: new AnalyticsModule(logAnalytics: logAnalyticsModule))
def accountConfig = new AccountConfig(analytics: config)
def account = new Account(uuid: bidRequest.accountId, config: accountConfig)
Expand All @@ -224,14 +244,14 @@ class AnalyticsSpec extends BaseSpec {
when: "PBS processes auction request"
pbsServiceWithLogAnalytics.sendAuctionRequest(bidRequest)

then: "PBS should call log analytics"
then: "Analytics bid request should be emitted in logs"
PBSUtils.waitUntil({ pbsServiceWithLogAnalytics.isContainLogsByValue(bidRequest.id) })
def logsByValue = pbsServiceWithLogAnalytics.getLogsByValue(bidRequest.id)
assert logsByValue

and: "Analytics adapter should contain additional info"
def analyticsBidRequest = extractResolvedRequestFromLog(logsByValue)
assert analyticsBidRequest.ext.prebid.analytics.logAnalytics.additionalData == bidRequestAdditionalData

where:
logAnalyticsEnable << [null, true]
}

private static BidRequest extractResolvedRequestFromLog(String logsByText) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,31 @@ public void shouldNotCallAnalyticsAdapterIfDisabledByAccount() {
verify(firstReporter, never()).processEvent(auctionEventCaptor.capture());
}

@Test
public void shouldCallAnalyticsAdapterIfAdapterNodePresentButEnabledPropertyNotPresent() {
// given
final ObjectNode moduleConfig = mapper.createObjectNode();
moduleConfig.put("property1", "value1");
moduleConfig.put("property2", "value2");

final AuctionContext auctionContext = AuctionContext.builder()
.account(Account.builder()
.analytics(AccountAnalyticsConfig.of(
true, null, Map.of("logAnalytics", moduleConfig)))
.build())
.bidRequest(BidRequest.builder()
.ext(ExtRequest.of(ExtRequestPrebid.builder().analytics(mapper.createObjectNode()).build()))
.build())
.build();

// when
target.processEvent(AuctionEvent.builder().auctionContext(auctionContext).build());

// then
verify(vertx, times(2)).runOnContext(any());
verify(firstReporter).processEvent(any());
}

@Test
public void shouldUpdateAuctionEventWithPropertiesFromAdapterSpecificAccountConfig() {
// given
Expand Down
Loading