From 27a696d650e1e3fb99e6f60e143723494345a6a5 Mon Sep 17 00:00:00 2001 From: linux019 Date: Tue, 9 Dec 2025 04:57:26 +0200 Subject: [PATCH] Warn in auction response for bidders blocked by privacy settings (#4537) Co-authored-by: oleksandr --- errortypes/code.go | 1 + exchange/utils.go | 4 ++++ exchange/utils_test.go | 16 +++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/errortypes/code.go b/errortypes/code.go index 2e20f8ff9..07b472772 100644 --- a/errortypes/code.go +++ b/errortypes/code.go @@ -40,6 +40,7 @@ const ( InvalidUserUIDsWarningCode TooLongTargetingPrefixWarningCode TooShortTargetingPrefixWarningCode + BidderBlockedByPrivacySettings ) // Coder provides an error or warning code with severity. diff --git a/exchange/utils.go b/exchange/utils.go index 08ea0186d..37521b3ec 100644 --- a/exchange/utils.go +++ b/exchange/utils.go @@ -195,6 +195,10 @@ func (rs *requestSplitter) cleanOpenRTBRequests(ctx context.Context, // privacy blocking if rs.isBidderBlockedByPrivacy(reqWrapperCopy, auctionReq.Activities, auctionPermissions, coreBidder, openrtb_ext.BidderName(bidder)) { + errs = append(errs, &errortypes.Warning{ + Message: fmt.Sprintf("bidder %q blocked by privacy settings", coreBidder), + WarningCode: errortypes.BidderBlockedByPrivacySettings, + }) continue } diff --git a/exchange/utils_test.go b/exchange/utils_test.go index 1b08ee1a3..cde4566c0 100644 --- a/exchange/utils_test.go +++ b/exchange/utils_test.go @@ -2454,6 +2454,7 @@ func TestCleanOpenRTBRequestsGDPRBlockBidRequest(t *testing.T) { gdprAllowedBidders []openrtb_ext.BidderName expectedBidders []openrtb_ext.BidderName expectedBlockedBidders []openrtb_ext.BidderName + expectedErrors []error }{ { description: "gdpr enforced, one request allowed and one request blocked", @@ -2461,6 +2462,10 @@ func TestCleanOpenRTBRequestsGDPRBlockBidRequest(t *testing.T) { gdprAllowedBidders: []openrtb_ext.BidderName{openrtb_ext.BidderAppnexus}, expectedBidders: []openrtb_ext.BidderName{openrtb_ext.BidderAppnexus}, expectedBlockedBidders: []openrtb_ext.BidderName{openrtb_ext.BidderRubicon}, + expectedErrors: []error{&errortypes.Warning{ + Message: `bidder "rubicon" blocked by privacy settings`, + WarningCode: errortypes.BidderBlockedByPrivacySettings, + }}, }, { description: "gdpr enforced, two requests allowed and no requests blocked", @@ -2528,7 +2533,7 @@ func TestCleanOpenRTBRequestsGDPRBlockBidRequest(t *testing.T) { bidders = append(bidders, req.BidderName) } - assert.Empty(t, errs, test.description) + assert.Equal(t, test.expectedErrors, errs, test.description) assert.ElementsMatch(t, bidders, test.expectedBidders, test.description) for _, blockedBidder := range test.expectedBlockedBidders { @@ -5121,6 +5126,7 @@ func TestCleanOpenRTBRequestsActivities(t *testing.T) { expectedDevice openrtb2.Device expectedSource openrtb2.Source expectedImpExt json.RawMessage + expectedErrors []error }{ { name: "fetch_bids_request_with_one_bidder_allowed", @@ -5140,6 +5146,10 @@ func TestCleanOpenRTBRequestsActivities(t *testing.T) { expectedUser: expectedUserDefault, expectedDevice: expectedDeviceDefault, expectedSource: expectedSourceDefault, + expectedErrors: []error{&errortypes.Warning{ + Message: `bidder "appnexus" blocked by privacy settings`, + WarningCode: errortypes.BidderBlockedByPrivacySettings, + }}, }, { name: "transmit_ufpd_allowed", @@ -5283,8 +5293,8 @@ func TestCleanOpenRTBRequestsActivities(t *testing.T) { bidderInfo: config.BidderInfos{"appnexus": config.BidderInfo{OpenRTB: &config.OpenRTBInfo{Version: test.ortbVersion}}}, } - bidderRequests, _, errs := reqSplitter.cleanOpenRTBRequests(context.Background(), auctionReq, nil, gdpr.SignalNo, false, map[string]float64{}) - assert.Empty(t, errs) + bidderRequests, _, errs := reqSplitter.cleanOpenRTBRequests(context.Background(), auctionReq, nil, map[string]float64{}) + assert.Equal(t, test.expectedErrors, errs) assert.Len(t, bidderRequests, test.expectedReqNumber) if test.expectedReqNumber == 1 {