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 3b88f3d86..7efd72515 100644 --- a/exchange/utils.go +++ b/exchange/utils.go @@ -190,6 +190,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 992099265..86c8ca158 100644 --- a/exchange/utils_test.go +++ b/exchange/utils_test.go @@ -2456,6 +2456,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", @@ -2463,6 +2464,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", @@ -2531,7 +2536,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 { @@ -5124,6 +5129,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", @@ -5143,6 +5149,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", @@ -5287,7 +5297,7 @@ func TestCleanOpenRTBRequestsActivities(t *testing.T) { } bidderRequests, _, errs := reqSplitter.cleanOpenRTBRequests(context.Background(), auctionReq, nil, map[string]float64{}) - assert.Empty(t, errs) + assert.Equal(t, test.expectedErrors, errs) assert.Len(t, bidderRequests, test.expectedReqNumber) if test.expectedReqNumber == 1 {