From 718188ca656675ea3b3dc19106c01340ea53b80a Mon Sep 17 00:00:00 2001 From: Danylo Date: Tue, 30 Jul 2024 12:20:31 +0200 Subject: [PATCH 1/3] Add support for TCF Policy Version 5. --- .../privacy/gdpr/TcfDefinerService.java | 152 +++++++++++++++++- .../VersionedVendorListService.java | 11 +- .../privacy/gdpr/TcfDefinerServiceTest.java | 40 ++++- .../VersionedVendorListServiceTest.java | 5 +- 4 files changed, 196 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java b/src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java index eba6d4e2cf8..08d23ba2bf8 100644 --- a/src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java +++ b/src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java @@ -1,6 +1,8 @@ package org.prebid.server.privacy.gdpr; import com.iabtcf.decoder.TCString; +import com.iabtcf.utils.IntIterable; +import com.iabtcf.v2.PublisherRestriction; import io.vertx.core.Future; import lombok.Value; import org.apache.commons.lang3.BooleanUtils; @@ -29,6 +31,7 @@ import org.prebid.server.settings.model.GdprConfig; import org.prebid.server.util.ObjectUtil; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -360,14 +363,14 @@ private TCStringParsingResult toValidResult(String consentString, TCStringParsin } final int tcfPolicyVersion = tcString.getTcfPolicyVersion(); - // disable support for tcf policy version > 4 - if (tcfPolicyVersion > 4) { + // disable support for tcf policy version > 5 + if (tcfPolicyVersion > 5) { warnings.add("Parsing consent string: %s failed. TCF policy version %d is not supported".formatted( consentString, tcfPolicyVersion)); return TCStringParsingResult.of(TCStringEmpty.create(), warnings); } - return TCStringParsingResult.of(tcString, warnings); + return TCStringParsingResult.of(TCStringWrapper.of(tcString), warnings); } private TCString decodeTcString(String consentString, RequestLogInfo requestLogInfo, List warnings) { @@ -427,4 +430,147 @@ private static class TCStringParsingResult { List warnings; } + + protected static class TCStringWrapper implements TCString { + + private final TCString tcString; + + private TCStringWrapper(TCString tcString) { + this.tcString = Objects.requireNonNull(tcString); + } + + public static TCString of(TCString tcString) { + return new TCStringWrapper(tcString); + } + + @Override + public int getVersion() { + return tcString.getVersion(); + } + + @Override + public Instant getCreated() { + return tcString.getCreated(); + } + + @Override + public Instant getLastUpdated() { + return tcString.getLastUpdated(); + } + + @Override + public int getCmpId() { + return tcString.getCmpId(); + } + + @Override + public int getCmpVersion() { + return tcString.getCmpVersion(); + } + + @Override + public int getConsentScreen() { + return tcString.getConsentScreen(); + } + + @Override + public String getConsentLanguage() { + return tcString.getConsentLanguage(); + } + + @Override + public int getVendorListVersion() { + return tcString.getTcfPolicyVersion() < 4 ? 2 : 3; + } + + @Override + public IntIterable getPurposesConsent() { + return tcString.getPurposesConsent(); + } + + @Override + public IntIterable getVendorConsent() { + return tcString.getVendorConsent(); + } + + @Override + public boolean getDefaultVendorConsent() { + return tcString.getDefaultVendorConsent(); + } + + @Override + public int getTcfPolicyVersion() { + return tcString.getTcfPolicyVersion(); + } + + @Override + public boolean isServiceSpecific() { + return tcString.isServiceSpecific(); + } + + @Override + public boolean getUseNonStandardStacks() { + return tcString.getUseNonStandardStacks(); + } + + @Override + public IntIterable getSpecialFeatureOptIns() { + return tcString.getSpecialFeatureOptIns(); + } + + @Override + public IntIterable getPurposesLITransparency() { + return tcString.getPurposesLITransparency(); + } + + @Override + public boolean getPurposeOneTreatment() { + return tcString.getPurposeOneTreatment(); + } + + @Override + public String getPublisherCC() { + return tcString.getPublisherCC(); + } + + @Override + public IntIterable getVendorLegitimateInterest() { + return tcString.getVendorLegitimateInterest(); + } + + @Override + public List getPublisherRestrictions() { + return tcString.getPublisherRestrictions(); + } + + @Override + public IntIterable getAllowedVendors() { + return tcString.getAllowedVendors(); + } + + @Override + public IntIterable getDisclosedVendors() { + return tcString.getDisclosedVendors(); + } + + @Override + public IntIterable getPubPurposesConsent() { + return tcString.getPubPurposesConsent(); + } + + @Override + public IntIterable getPubPurposesLITransparency() { + return tcString.getPubPurposesLITransparency(); + } + + @Override + public IntIterable getCustomPurposesConsent() { + return tcString.getCustomPurposesConsent(); + } + + @Override + public IntIterable getCustomPurposesLITransparency() { + return tcString.getCustomPurposesLITransparency(); + } + } } diff --git a/src/main/java/org/prebid/server/privacy/gdpr/vendorlist/VersionedVendorListService.java b/src/main/java/org/prebid/server/privacy/gdpr/vendorlist/VersionedVendorListService.java index d6375872383..d0b6057e41a 100644 --- a/src/main/java/org/prebid/server/privacy/gdpr/vendorlist/VersionedVendorListService.java +++ b/src/main/java/org/prebid/server/privacy/gdpr/vendorlist/VersionedVendorListService.java @@ -21,12 +21,13 @@ public VersionedVendorListService(VendorListService vendorListServiceV2, VendorL public Future> forConsent(TCString consent) { final int tcfPolicyVersion = consent.getTcfPolicyVersion(); final int vendorListVersion = consent.getVendorListVersion(); - if (tcfPolicyVersion < 4) { - return vendorListServiceV2.forVersion(vendorListVersion); - } else if (tcfPolicyVersion == 4) { - return vendorListServiceV3.forVersion(vendorListVersion); + if (tcfPolicyVersion > 5) { + return Future.failedFuture(new PreBidException( + "Invalid tcf policy version: %d".formatted(tcfPolicyVersion))); } - return Future.failedFuture(new PreBidException("Invalid tcf policy version: %d".formatted(tcfPolicyVersion))); + return tcfPolicyVersion < 4 + ? vendorListServiceV2.forVersion(vendorListVersion) + : vendorListServiceV3.forVersion(vendorListVersion); } } diff --git a/src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java b/src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java index eeb3b8a67fd..bb87cb5d652 100644 --- a/src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java +++ b/src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java @@ -31,6 +31,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; @@ -245,7 +246,7 @@ public void resolveTcfContextShouldTreatTcfConsentWithTcfPolicyVersionGreaterTha final String vendorConsent = TCStringEncoder.newBuilder() .version(2) - .tcfPolicyVersion(5) + .tcfPolicyVersion(6) .encode(); // when @@ -260,7 +261,7 @@ public void resolveTcfContextShouldTreatTcfConsentWithTcfPolicyVersionGreaterTha null); // then - final String expectedWarning = "Parsing consent string: %s failed. TCF policy version 5 is not supported" + final String expectedWarning = "Parsing consent string: %s failed. TCF policy version 6 is not supported" .formatted(vendorConsent); assertThat(result).isSucceeded(); assertThat(result.result().getConsent()).isInstanceOf(TCStringEmpty.class); @@ -634,17 +635,52 @@ public void resultForBidderNamesShouldReturnTcfResponseFromTcf2ServiceWhenConsen @Test public void isConsentStringValidShouldReturnTrueWhenStringIsValid() { + // when and then assertThat(TcfDefinerService.isConsentStringValid("CPBCa-mPBCa-mAAAAAENA0CAAEAAAAAAACiQAaQAwAAgAgABoAAAAAA")) .isTrue(); } @Test public void isConsentStringValidShouldReturnFalseWhenStringIsNull() { + // when and then assertThat(TcfDefinerService.isConsentStringValid(null)).isFalse(); } @Test public void isConsentStringValidShouldReturnFalseWhenStringNotValid() { + // when and then assertThat(TcfDefinerService.isConsentStringValid("invalid")).isFalse(); } + + @Test + public void tcStringWrapperShouldReturnVendorListVersionEquals2() { + // given + final int tcfPolicyVersion = ThreadLocalRandom.current().nextInt(0, 4); + final TCString tcString = TCStringEncoder.newBuilder() + .version(2) + .tcfPolicyVersion(tcfPolicyVersion) + .toTCString(); + + // when + final TCString wrappedTcString = TcfDefinerService.TCStringWrapper.of(tcString); + + // then + assertThat(wrappedTcString.getVendorListVersion()).isEqualTo(2); + } + + @Test + public void tcStringWrapperShouldReturnVendorListVersionEquals3() { + // given + final int tcfPolicyVersion = ThreadLocalRandom.current().nextInt(4, 6); + final TCString tcString = TCStringEncoder.newBuilder() + .version(2) + .tcfPolicyVersion(tcfPolicyVersion) + .toTCString(); + + // when + final TCString wrappedTcString = TcfDefinerService.TCStringWrapper.of(tcString); + + // then + assertThat(wrappedTcString.getVendorListVersion()).isEqualTo(3); + } } diff --git a/src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VersionedVendorListServiceTest.java b/src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VersionedVendorListServiceTest.java index fb50f5169e0..03a538d2f58 100644 --- a/src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VersionedVendorListServiceTest.java +++ b/src/test/java/org/prebid/server/privacy/gdpr/vendorlist/VersionedVendorListServiceTest.java @@ -48,9 +48,10 @@ public void versionedVendorListServiceShouldTreatTcfPolicyLessThanFourAsVendorLi @Test public void versionedVendorListServiceShouldTreatTcfPolicyFourAsVendorListSpecificationThree() { // given + final int tcfPolicyVersion = ThreadLocalRandom.current().nextInt(4, 6); final TCString consent = TCStringEncoder.newBuilder() .version(2) - .tcfPolicyVersion(4) + .tcfPolicyVersion(tcfPolicyVersion) .vendorListVersion(12) .toTCString(); @@ -64,7 +65,7 @@ public void versionedVendorListServiceShouldTreatTcfPolicyFourAsVendorListSpecif @Test public void versionedVendorListServiceShouldTreatTcfPolicyGreaterThanFourAsInvalidVersion() { // given - final int tcfPolicyVersion = ThreadLocalRandom.current().nextInt(5, 63); + final int tcfPolicyVersion = ThreadLocalRandom.current().nextInt(6, 63); final TCString consent = TCStringEncoder.newBuilder() .version(2) .tcfPolicyVersion(tcfPolicyVersion) From 8c0a0dcd4fba9c4c4a73fae813ff26d257bfbc79 Mon Sep 17 00:00:00 2001 From: Danylo Date: Tue, 30 Jul 2024 13:11:30 +0200 Subject: [PATCH 2/3] Remove unintended changes. --- .../privacy/gdpr/TcfDefinerService.java | 148 +----------------- .../privacy/gdpr/TcfDefinerServiceTest.java | 33 ---- 2 files changed, 1 insertion(+), 180 deletions(-) diff --git a/src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java b/src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java index 08d23ba2bf8..8836fbaa24c 100644 --- a/src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java +++ b/src/main/java/org/prebid/server/privacy/gdpr/TcfDefinerService.java @@ -1,8 +1,6 @@ package org.prebid.server.privacy.gdpr; import com.iabtcf.decoder.TCString; -import com.iabtcf.utils.IntIterable; -import com.iabtcf.v2.PublisherRestriction; import io.vertx.core.Future; import lombok.Value; import org.apache.commons.lang3.BooleanUtils; @@ -31,7 +29,6 @@ import org.prebid.server.settings.model.GdprConfig; import org.prebid.server.util.ObjectUtil; -import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -370,7 +367,7 @@ private TCStringParsingResult toValidResult(String consentString, TCStringParsin return TCStringParsingResult.of(TCStringEmpty.create(), warnings); } - return TCStringParsingResult.of(TCStringWrapper.of(tcString), warnings); + return TCStringParsingResult.of(tcString, warnings); } private TCString decodeTcString(String consentString, RequestLogInfo requestLogInfo, List warnings) { @@ -430,147 +427,4 @@ private static class TCStringParsingResult { List warnings; } - - protected static class TCStringWrapper implements TCString { - - private final TCString tcString; - - private TCStringWrapper(TCString tcString) { - this.tcString = Objects.requireNonNull(tcString); - } - - public static TCString of(TCString tcString) { - return new TCStringWrapper(tcString); - } - - @Override - public int getVersion() { - return tcString.getVersion(); - } - - @Override - public Instant getCreated() { - return tcString.getCreated(); - } - - @Override - public Instant getLastUpdated() { - return tcString.getLastUpdated(); - } - - @Override - public int getCmpId() { - return tcString.getCmpId(); - } - - @Override - public int getCmpVersion() { - return tcString.getCmpVersion(); - } - - @Override - public int getConsentScreen() { - return tcString.getConsentScreen(); - } - - @Override - public String getConsentLanguage() { - return tcString.getConsentLanguage(); - } - - @Override - public int getVendorListVersion() { - return tcString.getTcfPolicyVersion() < 4 ? 2 : 3; - } - - @Override - public IntIterable getPurposesConsent() { - return tcString.getPurposesConsent(); - } - - @Override - public IntIterable getVendorConsent() { - return tcString.getVendorConsent(); - } - - @Override - public boolean getDefaultVendorConsent() { - return tcString.getDefaultVendorConsent(); - } - - @Override - public int getTcfPolicyVersion() { - return tcString.getTcfPolicyVersion(); - } - - @Override - public boolean isServiceSpecific() { - return tcString.isServiceSpecific(); - } - - @Override - public boolean getUseNonStandardStacks() { - return tcString.getUseNonStandardStacks(); - } - - @Override - public IntIterable getSpecialFeatureOptIns() { - return tcString.getSpecialFeatureOptIns(); - } - - @Override - public IntIterable getPurposesLITransparency() { - return tcString.getPurposesLITransparency(); - } - - @Override - public boolean getPurposeOneTreatment() { - return tcString.getPurposeOneTreatment(); - } - - @Override - public String getPublisherCC() { - return tcString.getPublisherCC(); - } - - @Override - public IntIterable getVendorLegitimateInterest() { - return tcString.getVendorLegitimateInterest(); - } - - @Override - public List getPublisherRestrictions() { - return tcString.getPublisherRestrictions(); - } - - @Override - public IntIterable getAllowedVendors() { - return tcString.getAllowedVendors(); - } - - @Override - public IntIterable getDisclosedVendors() { - return tcString.getDisclosedVendors(); - } - - @Override - public IntIterable getPubPurposesConsent() { - return tcString.getPubPurposesConsent(); - } - - @Override - public IntIterable getPubPurposesLITransparency() { - return tcString.getPubPurposesLITransparency(); - } - - @Override - public IntIterable getCustomPurposesConsent() { - return tcString.getCustomPurposesConsent(); - } - - @Override - public IntIterable getCustomPurposesLITransparency() { - return tcString.getCustomPurposesLITransparency(); - } - } } diff --git a/src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java b/src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java index bb87cb5d652..4b33f28c350 100644 --- a/src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java +++ b/src/test/java/org/prebid/server/privacy/gdpr/TcfDefinerServiceTest.java @@ -31,7 +31,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Set; -import java.util.concurrent.ThreadLocalRandom; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; @@ -651,36 +650,4 @@ public void isConsentStringValidShouldReturnFalseWhenStringNotValid() { // when and then assertThat(TcfDefinerService.isConsentStringValid("invalid")).isFalse(); } - - @Test - public void tcStringWrapperShouldReturnVendorListVersionEquals2() { - // given - final int tcfPolicyVersion = ThreadLocalRandom.current().nextInt(0, 4); - final TCString tcString = TCStringEncoder.newBuilder() - .version(2) - .tcfPolicyVersion(tcfPolicyVersion) - .toTCString(); - - // when - final TCString wrappedTcString = TcfDefinerService.TCStringWrapper.of(tcString); - - // then - assertThat(wrappedTcString.getVendorListVersion()).isEqualTo(2); - } - - @Test - public void tcStringWrapperShouldReturnVendorListVersionEquals3() { - // given - final int tcfPolicyVersion = ThreadLocalRandom.current().nextInt(4, 6); - final TCString tcString = TCStringEncoder.newBuilder() - .version(2) - .tcfPolicyVersion(tcfPolicyVersion) - .toTCString(); - - // when - final TCString wrappedTcString = TcfDefinerService.TCStringWrapper.of(tcString); - - // then - assertThat(wrappedTcString.getVendorListVersion()).isEqualTo(3); - } } From 968a973dcaa18370820db5a850d7ef172e33f465 Mon Sep 17 00:00:00 2001 From: Markiyan Mykush <95693607+marki1an@users.noreply.github.com> Date: Tue, 30 Jul 2024 16:34:07 +0300 Subject: [PATCH 3/3] Tests: Update functional tests for support tcf policy version 5 (#3341) --- .../vendorlist/GvlSpecificationVersion.groovy | 15 +++++++++++++++ .../services/vendorlist/VendorListResponse.groovy | 6 +++--- .../functional/tests/privacy/GdprAmpSpec.groovy | 7 ++++--- .../tests/privacy/GdprAuctionSpec.groovy | 7 ++++--- .../functional/util/privacy/TcfConsent.groovy | 7 ++++--- 5 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 src/test/groovy/org/prebid/server/functional/model/mock/services/vendorlist/GvlSpecificationVersion.groovy diff --git a/src/test/groovy/org/prebid/server/functional/model/mock/services/vendorlist/GvlSpecificationVersion.groovy b/src/test/groovy/org/prebid/server/functional/model/mock/services/vendorlist/GvlSpecificationVersion.groovy new file mode 100644 index 00000000000..bc698d7bd52 --- /dev/null +++ b/src/test/groovy/org/prebid/server/functional/model/mock/services/vendorlist/GvlSpecificationVersion.groovy @@ -0,0 +1,15 @@ +package org.prebid.server.functional.model.mock.services.vendorlist + +import com.fasterxml.jackson.annotation.JsonValue + +enum GvlSpecificationVersion { + + V2(2), V3(3) + + @JsonValue + private final Integer value + + GvlSpecificationVersion(Integer value) { + this.value = value + } +} diff --git a/src/test/groovy/org/prebid/server/functional/model/mock/services/vendorlist/VendorListResponse.groovy b/src/test/groovy/org/prebid/server/functional/model/mock/services/vendorlist/VendorListResponse.groovy index 7d61d88ff41..d44755978e4 100644 --- a/src/test/groovy/org/prebid/server/functional/model/mock/services/vendorlist/VendorListResponse.groovy +++ b/src/test/groovy/org/prebid/server/functional/model/mock/services/vendorlist/VendorListResponse.groovy @@ -1,15 +1,15 @@ package org.prebid.server.functional.model.mock.services.vendorlist import org.prebid.server.functional.util.PBSUtils - import java.time.Clock import java.time.ZonedDateTime +import static org.prebid.server.functional.model.mock.services.vendorlist.GvlSpecificationVersion.V2 import static org.prebid.server.functional.util.privacy.TcfConsent.VENDOR_LIST_VERSION class VendorListResponse { - Integer gvlSpecificationVersion + GvlSpecificationVersion gvlSpecificationVersion Integer vendorListVersion Integer tcfPolicyVersion ZonedDateTime lastUpdated @@ -17,7 +17,7 @@ class VendorListResponse { static VendorListResponse getDefaultVendorListResponse() { new VendorListResponse().tap { - it.gvlSpecificationVersion = 2 + it.gvlSpecificationVersion = V2 it.vendorListVersion = VENDOR_LIST_VERSION it.lastUpdated = ZonedDateTime.now(Clock.systemUTC()).minusWeeks(2) } diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy index 150584ebc32..470029c9e02 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAmpSpec.groovy @@ -41,7 +41,8 @@ import static org.prebid.server.functional.util.privacy.TcfConsent.GENERIC_VENDO import static org.prebid.server.functional.util.privacy.TcfConsent.PurposeId.BASIC_ADS import static org.prebid.server.functional.util.privacy.TcfConsent.PurposeId.DEVICE_ACCESS import static org.prebid.server.functional.util.privacy.TcfConsent.TcfPolicyVersion.TCF_POLICY_V2 -import static org.prebid.server.functional.util.privacy.TcfConsent.TcfPolicyVersion.TCF_POLICY_V3 +import static org.prebid.server.functional.util.privacy.TcfConsent.TcfPolicyVersion.TCF_POLICY_V4 +import static org.prebid.server.functional.util.privacy.TcfConsent.TcfPolicyVersion.TCF_POLICY_V5 class GdprAmpSpec extends PrivacyBaseSpec { @@ -356,7 +357,7 @@ class GdprAmpSpec extends PrivacyBaseSpec { serverContainer.stop() where: - tcfPolicyVersion << [TCF_POLICY_V2, TCF_POLICY_V3] + tcfPolicyVersion << [TCF_POLICY_V2, TCF_POLICY_V4, TCF_POLICY_V5] } def "PBS amp with invalid consent.tcfPolicyVersion parameter should reject request and include proper warning"() { @@ -442,7 +443,7 @@ class GdprAmpSpec extends PrivacyBaseSpec { vendorListResponse.reset() where: - tcfPolicyVersion << [TCF_POLICY_V2, TCF_POLICY_V3] + tcfPolicyVersion << [TCF_POLICY_V2, TCF_POLICY_V4, TCF_POLICY_V5] } def "PBS amp should update activity controls fetch bids metrics when tcf requirement disallow request"() { diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy index 889d566cf4f..89a6899e8ac 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprAuctionSpec.groovy @@ -43,7 +43,8 @@ import static org.prebid.server.functional.util.privacy.TcfConsent.GENERIC_VENDO import static org.prebid.server.functional.util.privacy.TcfConsent.PurposeId.BASIC_ADS import static org.prebid.server.functional.util.privacy.TcfConsent.PurposeId.DEVICE_ACCESS import static org.prebid.server.functional.util.privacy.TcfConsent.TcfPolicyVersion.TCF_POLICY_V2 -import static org.prebid.server.functional.util.privacy.TcfConsent.TcfPolicyVersion.TCF_POLICY_V3 +import static org.prebid.server.functional.util.privacy.TcfConsent.TcfPolicyVersion.TCF_POLICY_V4 +import static org.prebid.server.functional.util.privacy.TcfConsent.TcfPolicyVersion.TCF_POLICY_V5 class GdprAuctionSpec extends PrivacyBaseSpec { @@ -310,7 +311,7 @@ class GdprAuctionSpec extends PrivacyBaseSpec { serverContainer.stop() where: - tcfPolicyVersion << [TCF_POLICY_V2, TCF_POLICY_V3] + tcfPolicyVersion << [TCF_POLICY_V2, TCF_POLICY_V4, TCF_POLICY_V5] } def "PBS auction should reject request with proper warning when incoming consent.tcfPolicyVersion have invalid parameter"() { @@ -385,7 +386,7 @@ class GdprAuctionSpec extends PrivacyBaseSpec { vendorListResponse.reset() where: - tcfPolicyVersion << [TCF_POLICY_V2, TCF_POLICY_V3] + tcfPolicyVersion << [TCF_POLICY_V2, TCF_POLICY_V4, TCF_POLICY_V5] } def "PBS should apply gdpr and emit metrics when host and device.geo.country contains same eea-country"() { diff --git a/src/test/groovy/org/prebid/server/functional/util/privacy/TcfConsent.groovy b/src/test/groovy/org/prebid/server/functional/util/privacy/TcfConsent.groovy index 6d02bb22e73..cdb6fce665b 100644 --- a/src/test/groovy/org/prebid/server/functional/util/privacy/TcfConsent.groovy +++ b/src/test/groovy/org/prebid/server/functional/util/privacy/TcfConsent.groovy @@ -142,7 +142,8 @@ class TcfConsent implements ConsentString { enum TcfPolicyVersion { TCF_POLICY_V2(2), - TCF_POLICY_V3(4) + TCF_POLICY_V4(4), + TCF_POLICY_V5(5), final int value @@ -151,11 +152,11 @@ class TcfConsent implements ConsentString { } int getVendorListVersion() { - (this == TCF_POLICY_V3) ? 3 : 2 + (this < TCF_POLICY_V4) ? 2 : 3 } int getReversedListVersion() { - (this == TCF_POLICY_V3) ? 2 : 3 + (this < TCF_POLICY_V4) ? 3 : 2 } }