Skip to content

Commit 8ec774b

Browse files
committed
Support testing the USGen privacy module
1 parent 6e46054 commit 8ec774b

File tree

9 files changed

+77
-11
lines changed

9 files changed

+77
-11
lines changed

src/main/java/org/prebid/server/activity/infrastructure/creator/rule/PrivacyModulesRuleCreator.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.prebid.server.activity.infrastructure.creator.ActivityControllerCreationContext;
66
import org.prebid.server.activity.infrastructure.creator.PrivacyModuleCreationContext;
77
import org.prebid.server.activity.infrastructure.creator.privacy.PrivacyModuleCreator;
8+
import org.prebid.server.activity.infrastructure.privacy.AbstainPrivacyModule;
89
import org.prebid.server.activity.infrastructure.privacy.PrivacyModule;
910
import org.prebid.server.activity.infrastructure.privacy.PrivacyModuleQualifier;
1011
import org.prebid.server.activity.infrastructure.rule.AndRule;
@@ -17,12 +18,16 @@
1718
import java.util.List;
1819
import java.util.Map;
1920
import java.util.Objects;
21+
import java.util.Optional;
22+
import java.util.concurrent.ThreadLocalRandom;
2023
import java.util.function.UnaryOperator;
2124
import java.util.stream.Collectors;
2225

2326
public class PrivacyModulesRuleCreator extends AbstractRuleCreator<AccountActivityPrivacyModulesRuleConfig> {
2427

2528
private static final String WILDCARD = "*";
29+
private static final int SKIP_RATE_MIN = 0;
30+
private static final int SKIP_RATE_MAX = 100;
2631

2732
private final Map<PrivacyModuleQualifier, PrivacyModuleCreator> privacyModulesCreators;
2833

@@ -82,6 +87,15 @@ private static boolean isModuleEnabled(AccountPrivacyModuleConfig accountPrivacy
8287
private PrivacyModule createPrivacyModule(PrivacyModuleQualifier privacyModuleQualifier,
8388
ActivityControllerCreationContext creationContext) {
8489

90+
final Integer skipRate = Optional.ofNullable(creationContext.getPrivacyModulesConfigs())
91+
.map(configs -> configs.get(privacyModuleQualifier))
92+
.map(AccountPrivacyModuleConfig::getSkipRate)
93+
.orElse(SKIP_RATE_MIN);
94+
95+
if (ThreadLocalRandom.current().nextInt(SKIP_RATE_MAX) < skipRate) {
96+
return new AbstainPrivacyModule(privacyModuleQualifier);
97+
}
98+
8599
return privacyModulesCreators.get(privacyModuleQualifier)
86100
.from(creationContext(privacyModuleQualifier, creationContext));
87101
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.prebid.server.activity.infrastructure.privacy;
2+
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import org.prebid.server.activity.infrastructure.debug.Loggable;
6+
import org.prebid.server.activity.infrastructure.payload.ActivityInvocationPayload;
7+
8+
import java.util.Objects;
9+
10+
public class AbstainPrivacyModule implements PrivacyModule, Loggable {
11+
12+
private final PrivacyModuleQualifier privacyModuleQualifier;
13+
14+
public AbstainPrivacyModule(PrivacyModuleQualifier privacyModuleQualifier) {
15+
this.privacyModuleQualifier = Objects.requireNonNull(privacyModuleQualifier);
16+
}
17+
18+
@Override
19+
public Result proceed(ActivityInvocationPayload activityInvocationPayload) {
20+
return Result.ABSTAIN;
21+
}
22+
23+
@Override
24+
public JsonNode asLogEntry(ObjectMapper mapper) {
25+
return mapper.createObjectNode()
26+
.put("privacy_module", privacyModuleQualifier.moduleName())
27+
.put("skipped", true)
28+
.put("result", Result.ABSTAIN.name());
29+
}
30+
}

src/main/java/org/prebid/server/settings/model/activity/privacy/AccountPrivacyModuleConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ public sealed interface AccountPrivacyModuleConfig permits
2323

2424
PrivacyModuleQualifier getCode();
2525

26+
@JsonProperty("skipRate")
27+
Integer getSkipRate();
28+
2629
@JsonProperty
2730
Boolean enabled();
2831
}

src/main/java/org/prebid/server/settings/model/activity/privacy/AccountUSCustomLogicModuleConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public class AccountUSCustomLogicModuleConfig implements AccountPrivacyModuleCon
1717
@Accessors(fluent = true)
1818
Boolean enabled;
1919

20+
Integer skipRate;
21+
2022
Config config;
2123

2224
@Override

src/main/java/org/prebid/server/settings/model/activity/privacy/AccountUSNatModuleConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public class AccountUSNatModuleConfig implements AccountPrivacyModuleConfig {
1414
@Accessors(fluent = true)
1515
Boolean enabled;
1616

17+
Integer skipRate;
18+
1719
Config config;
1820

1921
@Override

src/test/java/org/prebid/server/activity/infrastructure/creator/ActivityInfrastructureCreatorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ public void parseShouldSkipPrivacyModulesDuplicatesAndEmitWarnings() {
9191
.activities(Map.of(Activity.SYNC_USER, AccountActivityConfiguration.of(
9292
null, singletonList(AccountActivityConditionsRuleConfig.of(null, null)))))
9393
.modules(asList(
94-
AccountUSNatModuleConfig.of(null, null),
95-
AccountUSNatModuleConfig.of(null, null)))
94+
AccountUSNatModuleConfig.of(null, null, null),
95+
AccountUSNatModuleConfig.of(null, null, null)))
9696
.build())
9797
.build();
9898

src/test/java/org/prebid/server/activity/infrastructure/creator/privacy/uscustomlogic/USCustomLogicModuleCreatorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ private static PrivacyModuleCreationContext givenCreationContext(List<Integer> s
248248

249249
return PrivacyModuleCreationContext.of(
250250
Activity.CALL_BIDDER,
251-
AccountUSCustomLogicModuleConfig.of(true, config),
251+
AccountUSCustomLogicModuleConfig.of(true, null, config),
252252
GppContextCreator.from(null, sectionsIds).build().getGppContext());
253253
}
254254

src/test/java/org/prebid/server/activity/infrastructure/creator/privacy/usnat/USNatModuleCreatorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ private static PrivacyModuleCreationContext givenCreationContext(List<Integer> s
126126

127127
return PrivacyModuleCreationContext.of(
128128
Activity.CALL_BIDDER,
129-
AccountUSNatModuleConfig.of(true, AccountUSNatModuleConfig.Config.of(skipSectionsIds)),
129+
AccountUSNatModuleConfig.of(true, null, AccountUSNatModuleConfig.Config.of(skipSectionsIds)),
130130
GppContextCreator.from(null, sectionsIds).build().getGppContext());
131131
}
132132
}

src/test/java/org/prebid/server/activity/infrastructure/creator/rule/PrivacyModulesRuleCreatorTest.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void fromShouldCreateDefaultRuleIfNoneOfConfiguredPrivacyModulesMatches()
5656
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
5757
singletonList("not_configured"));
5858
final ActivityControllerCreationContext creationContext = creationContext(Map.of(
59-
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(null, null)));
59+
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(null, null, null)));
6060

6161
// when
6262
final Rule rule = target.from(config, creationContext);
@@ -70,7 +70,7 @@ public void fromShouldCreateRuleWithAllConfiguredPrivacyModules() {
7070
// given
7171
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
7272
singletonList("*"));
73-
final AccountPrivacyModuleConfig moduleConfig = AccountUSNatModuleConfig.of(null, null);
73+
final AccountPrivacyModuleConfig moduleConfig = AccountUSNatModuleConfig.of(null, null, null);
7474
final ActivityControllerCreationContext creationContext = creationContext(
7575
Map.of(PrivacyModuleQualifier.US_NAT, moduleConfig));
7676

@@ -89,7 +89,7 @@ public void fromShouldCreateRuleWithAllConfiguredPrivacyModulesThatMatches() {
8989
// given
9090
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
9191
singletonList("iab.*"));
92-
final AccountPrivacyModuleConfig moduleConfig = AccountUSNatModuleConfig.of(null, null);
92+
final AccountPrivacyModuleConfig moduleConfig = AccountUSNatModuleConfig.of(null, null, null);
9393
final ActivityControllerCreationContext creationContext = creationContext(
9494
Map.of(PrivacyModuleQualifier.US_NAT, moduleConfig));
9595

@@ -108,7 +108,7 @@ public void fromShouldCreateRuleAndModifyContextWithUsedPrivacyModules() {
108108
// given
109109
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
110110
singletonList(PrivacyModuleQualifier.US_NAT.moduleName()));
111-
final AccountPrivacyModuleConfig moduleConfig = AccountUSNatModuleConfig.of(null, null);
111+
final AccountPrivacyModuleConfig moduleConfig = AccountUSNatModuleConfig.of(null, null, null);
112112
final ActivityControllerCreationContext creationContext = creationContext(
113113
Map.of(PrivacyModuleQualifier.US_NAT, moduleConfig));
114114

@@ -129,7 +129,7 @@ public void fromShouldSkipAlreadyUsedPrivacyModule() {
129129
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
130130
singletonList(PrivacyModuleQualifier.US_NAT.moduleName()));
131131
final ActivityControllerCreationContext creationContext = creationContext(Map.of(
132-
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(true, null)));
132+
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(true, null, null)));
133133
creationContext.use(PrivacyModuleQualifier.US_NAT);
134134

135135
// when
@@ -145,7 +145,22 @@ public void fromShouldSkipDisabledPrivacyModule() {
145145
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
146146
singletonList(PrivacyModuleQualifier.US_NAT.moduleName()));
147147
final ActivityControllerCreationContext creationContext = creationContext(Map.of(
148-
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(false, null)));
148+
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(false, null, null)));
149+
150+
// when
151+
final Rule rule = target.from(config, creationContext);
152+
153+
// then
154+
assertThat(rule.proceed(null)).isEqualTo(Rule.Result.ABSTAIN);
155+
}
156+
157+
@Test
158+
public void fromShouldDisableSkippedPrivacyModule() {
159+
// given
160+
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
161+
singletonList(PrivacyModuleQualifier.US_NAT.moduleName()));
162+
final ActivityControllerCreationContext creationContext = creationContext(Map.of(
163+
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(true, 100, null)));
149164

150165
// when
151166
final Rule rule = target.from(config, creationContext);
@@ -162,7 +177,7 @@ public void fromShouldSkipPrivacyModuleWithoutCreator() {
162177
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
163178
singletonList(PrivacyModuleQualifier.US_NAT.moduleName()));
164179
final ActivityControllerCreationContext creationContext = creationContext(Map.of(
165-
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(null, null)));
180+
PrivacyModuleQualifier.US_NAT, AccountUSNatModuleConfig.of(null, null, null)));
166181

167182
// when
168183
final Rule rule = target.from(config, creationContext);

0 commit comments

Comments
 (0)