Skip to content

Commit 85a05f3

Browse files
committed
Add units
1 parent 089ed03 commit 85a05f3

7 files changed

Lines changed: 97 additions & 24 deletions

File tree

src/main/java/org/prebid/server/activity/infrastructure/creator/privacy/uscustomlogic/USCustomLogicModuleCreator.java

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import org.prebid.server.activity.infrastructure.privacy.uscustomlogic.USCustomLogicDataSupplier;
1515
import org.prebid.server.activity.infrastructure.privacy.uscustomlogic.USCustomLogicModule;
1616
import org.prebid.server.auction.gpp.model.GppContext;
17-
import org.prebid.server.exception.InvalidAccountConfigException;
18-
import org.prebid.server.json.DecodeException;
1917
import org.prebid.server.json.JsonLogic;
2018
import org.prebid.server.log.ConditionalLogger;
2119
import org.prebid.server.log.Logger;
@@ -151,16 +149,7 @@ private PrivacyModule forConfig(int sectionId,
151149
private JsonLogicNode jsonLogicNode(ObjectNode jsonLogicConfig) {
152150
final String jsonAsString = jsonLogicConfig.toString();
153151
return jsonLogicNodesCache != null
154-
? jsonLogicNodesCache.computeIfAbsent(jsonAsString, this::parseJsonLogicNode)
155-
: parseJsonLogicNode(jsonAsString);
156-
}
157-
158-
private JsonLogicNode parseJsonLogicNode(String jsonLogicConfig) {
159-
try {
160-
return jsonLogic.parse(jsonLogicConfig);
161-
} catch (DecodeException e) {
162-
metrics.updateAlertsMetrics(MetricName.general);
163-
throw new InvalidAccountConfigException("JsonLogic exception: " + e.getMessage());
164-
}
152+
? jsonLogicNodesCache.computeIfAbsent(jsonAsString, jsonLogic::parse)
153+
: jsonLogic.parse(jsonAsString);
165154
}
166155
}

src/main/java/org/prebid/server/activity/infrastructure/creator/privacy/usnat/USNatModuleCreator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ private PrivacyModule forSection(Activity activity,
8787
return new USNatModule(activity, gppReaderFactory.forSection(sectionId, gppModel), config);
8888
} catch (Exception e) {
8989
conditionalLogger.error(
90-
"UsNat privacy module creation failed: %s. Activity: %s. Section: %s. Gpp: %s."
91-
.formatted(e.getMessage(), activity, sectionId, gppModel.encode()),
90+
"UsNat privacy module creation failed: %s. Activity: %s. Section: %s. Gpp: %s.".formatted(
91+
e.getMessage(), activity, sectionId, gppModel != null ? gppModel.encode() : null),
9292
samplingRate);
9393
metrics.updateAlertsMetrics(MetricName.general);
9494

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ protected Rule fromConfiguration(AccountActivityPrivacyModulesRuleConfig ruleCon
5252
.map(configuredModuleName -> mapToModulesQualifiers(configuredModuleName, creationContext))
5353
.flatMap(Collection::stream)
5454
.filter(qualifier -> !creationContext.isUsed(qualifier))
55-
.peek(creationContext::use)
5655
.map(qualifier -> createPrivacyModule(qualifier, creationContext))
5756
.filter(Objects::nonNull)
5857
.toList();
@@ -93,15 +92,18 @@ private PrivacyModule createPrivacyModule(PrivacyModuleQualifier privacyModuleQu
9392
ActivityControllerCreationContext creationContext) {
9493

9594
if (creationContext.getSkipPrivacyModules().contains(privacyModuleQualifier)) {
95+
creationContext.use(privacyModuleQualifier);
9696
return new SkippedPrivacyModule(privacyModuleQualifier);
9797
}
9898

9999
try {
100-
return privacyModulesCreators.get(privacyModuleQualifier)
100+
final PrivacyModule privacyModule = privacyModulesCreators.get(privacyModuleQualifier)
101101
.from(creationContext(privacyModuleQualifier, creationContext));
102+
creationContext.use(privacyModuleQualifier);
103+
104+
return privacyModule;
102105
} catch (Exception e) {
103-
logger.error("PrivacyModule %s creation failed: %s."
104-
.formatted(privacyModuleQualifier, e.getMessage()));
106+
logger.error("PrivacyModule %s creation failed: %s.".formatted(privacyModuleQualifier, e.getMessage()));
105107
metrics.updateAlertsMetrics(MetricName.general);
106108

107109
return null;

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,4 +209,39 @@ public void parseShouldReturnImitatedTransmitEidsActivity() {
209209
assertThat(controllers.get(Activity.TRANSMIT_UFPD).isAllowed(null)).isEqualTo(false);
210210
assertThat(controllers.get(Activity.TRANSMIT_EIDS).isAllowed(null)).isEqualTo(false);
211211
}
212+
213+
@Test
214+
public void parseShouldSkipRuleThatFailedCreation() {
215+
// given
216+
final Account account = Account.builder()
217+
.privacy(AccountPrivacyConfig.builder()
218+
.activities(Map.of(
219+
Activity.SYNC_USER, AccountActivityConfiguration.of(null, null),
220+
Activity.CALL_BIDDER, AccountActivityConfiguration.of(false, null),
221+
Activity.MODIFY_UFDP, AccountActivityConfiguration.of(true, null),
222+
Activity.TRANSMIT_UFPD, AccountActivityConfiguration.of(true, singletonList(
223+
AccountActivityConditionsRuleConfig.of(null, null)))))
224+
.build())
225+
.build();
226+
final GppContext gppContext = GppContextCreator.from(null, null).build().getGppContext();
227+
228+
given(activityRuleFactory.from(
229+
same(account.getPrivacy().getActivities().get(Activity.TRANSMIT_UFPD).getRules().getFirst()),
230+
argThat(arg -> arg.getGppContext() == gppContext)))
231+
.willThrow(new IllegalArgumentException());
232+
233+
// when
234+
final Map<Activity, ActivityController> controllers = creator.parse(account, gppContext, debug);
235+
236+
// then
237+
assertThat(controllers.keySet()).containsExactlyInAnyOrder(Activity.values());
238+
239+
assertThat(controllers.get(Activity.SYNC_USER).isAllowed(null))
240+
.isEqualTo(ActivityInfrastructure.ALLOW_ACTIVITY_BY_DEFAULT);
241+
assertThat(controllers.get(Activity.CALL_BIDDER).isAllowed(null)).isEqualTo(false);
242+
assertThat(controllers.get(Activity.MODIFY_UFDP).isAllowed(null)).isEqualTo(true);
243+
assertThat(controllers.get(Activity.TRANSMIT_UFPD).isAllowed(null)).isEqualTo(true);
244+
245+
verify(metrics).updateAlertsMetrics(eq(MetricName.general));
246+
}
212247
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import org.prebid.server.activity.infrastructure.privacy.usnat.reader.USNationalGppReader;
1717
import org.prebid.server.activity.infrastructure.rule.Rule;
1818
import org.prebid.server.auction.gpp.model.GppContextCreator;
19-
import org.prebid.server.exception.InvalidAccountConfigException;
2019
import org.prebid.server.json.DecodeException;
2120
import org.prebid.server.json.JsonLogic;
2221
import org.prebid.server.metric.MetricName;
@@ -31,7 +30,6 @@
3130
import static java.util.Collections.singleton;
3231
import static java.util.Collections.singletonList;
3332
import static org.assertj.core.api.Assertions.assertThat;
34-
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
3533
import static org.mockito.ArgumentMatchers.any;
3634
import static org.mockito.ArgumentMatchers.anyBoolean;
3735
import static org.mockito.ArgumentMatchers.anyInt;
@@ -232,8 +230,11 @@ public void fromShouldThrowExceptionAndEmitMetricsOnInvalidJsonLogicConfig() {
232230
singletonList(7),
233231
givenConfig(singleton(7), null, Activity.CALL_BIDDER, mapper.createObjectNode()));
234232

235-
// when and then
236-
assertThatExceptionOfType(InvalidAccountConfigException.class).isThrownBy(() -> target.from(creationContext));
233+
// when
234+
final PrivacyModule privacyModule = target.from(creationContext);
235+
236+
// then
237+
assertThat(privacyModule.proceed(null)).isEqualTo(Rule.Result.ABSTAIN);
237238

238239
verify(jsonLogic).parse(any());
239240
verify(metrics).updateAlertsMetrics(eq(MetricName.general));

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.prebid.server.activity.infrastructure.privacy.usnat.reader.USNationalGppReader;
1313
import org.prebid.server.activity.infrastructure.rule.Rule;
1414
import org.prebid.server.auction.gpp.model.GppContextCreator;
15+
import org.prebid.server.metric.MetricName;
1516
import org.prebid.server.metric.Metrics;
1617
import org.prebid.server.settings.model.activity.privacy.AccountUSNatModuleConfig;
1718

@@ -125,11 +126,36 @@ public void fromShouldShouldSkipConfiguredSectionsIds() {
125126
verifyNoMoreInteractions(gppReaderFactory);
126127
}
127128

129+
@Test
130+
public void fromShouldShouldSkipSectionsWithInvalidGppSubstring() {
131+
// given
132+
given(gppReaderFactory.forSection(eq(7), any()))
133+
.willReturn(new USNationalGppReader(null) {
134+
135+
@Override
136+
public Integer getMspaServiceProviderMode() {
137+
throw new IllegalStateException();
138+
}
139+
});
140+
141+
final PrivacyModuleCreationContext creationContext = givenCreationContext(singletonList(7), emptyList());
142+
143+
// when
144+
target.from(creationContext);
145+
146+
// then
147+
verify(gppReaderFactory).forSection(eq(7), any());
148+
verify(metrics).updateAlertsMetrics(eq(MetricName.general));
149+
150+
verifyNoMoreInteractions(gppReaderFactory);
151+
verifyNoMoreInteractions(metrics);
152+
}
153+
128154
private static PrivacyModuleCreationContext givenCreationContext(List<Integer> sectionsIds,
129155
List<Integer> skipSectionsIds) {
130156

131157
return PrivacyModuleCreationContext.of(
132-
Activity.CALL_BIDDER,
158+
Activity.TRANSMIT_UFPD,
133159
AccountUSNatModuleConfig.of(true, 0, AccountUSNatModuleConfig.Config.of(skipSectionsIds, false)),
134160
GppContextCreator.from(null, sectionsIds).build().getGppContext());
135161
}

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,26 @@ public void fromShouldSkipPrivacyModuleWithoutCreator() {
196196
assertThat(rule.proceed(null)).isEqualTo(Rule.Result.ABSTAIN);
197197
}
198198

199+
@Test
200+
public void fromShouldSkipPrivacyModuleThatFailedCreation() {
201+
// given
202+
final AccountActivityPrivacyModulesRuleConfig config = AccountActivityPrivacyModulesRuleConfig.of(
203+
singletonList(PrivacyModuleQualifier.US_NAT.moduleName()));
204+
final AccountPrivacyModuleConfig moduleConfig = AccountUSNatModuleConfig.of(null, 0, null);
205+
final ActivityControllerCreationContext creationContext = creationContext(
206+
Map.of(PrivacyModuleQualifier.US_NAT, moduleConfig));
207+
208+
given(privacyModuleCreator.from(eq(PrivacyModuleCreationContext.of(null, moduleConfig, null))))
209+
.willThrow(new IllegalArgumentException());
210+
211+
// when
212+
final Rule rule = target.from(config, creationContext);
213+
214+
// then
215+
assertThat(rule.proceed(null)).isEqualTo(Rule.Result.ABSTAIN);
216+
assertThat(creationContext.isUsed(PrivacyModuleQualifier.US_NAT)).isFalse();
217+
}
218+
199219
private static ActivityControllerCreationContext creationContext(
200220
Map<PrivacyModuleQualifier, AccountPrivacyModuleConfig> modulesConfigs) {
201221

0 commit comments

Comments
 (0)