Skip to content

Commit

Permalink
Generate Bid ID Test Hardening (#3491)
Browse files Browse the repository at this point in the history
  • Loading branch information
SyntaxNode committed Mar 5, 2024
1 parent 0b5d04e commit 05a1293
Show file tree
Hide file tree
Showing 9 changed files with 529 additions and 429 deletions.
13 changes: 7 additions & 6 deletions exchange/exchange.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ type bidResponseWrapper struct {
}

type BidIDGenerator interface {
New() (string, error)
New(bidder string) (string, error)
Enabled() bool
}

Expand All @@ -117,7 +117,7 @@ func (big *bidIDGenerator) Enabled() bool {
return big.enabled
}

func (big *bidIDGenerator) New() (string, error) {
func (big *bidIDGenerator) New(bidder string) (string, error) {
rawUuid, err := uuid.NewV4()
return rawUuid.String(), err
}
Expand Down Expand Up @@ -416,10 +416,11 @@ func (e *exchange) HoldAuction(ctx context.Context, r *AuctionRequest, debugLog
}

if e.bidIDGenerator.Enabled() {
for _, seatBid := range adapterBids {
for _, pbsBid := range seatBid.Bids {
pbsBid.GeneratedBidID, err = e.bidIDGenerator.New()
if err != nil {
for bidder, seatBid := range adapterBids {
for i := range seatBid.Bids {
if bidID, err := e.bidIDGenerator.New(bidder.String()); err == nil {
seatBid.Bids[i].GeneratedBidID = bidID
} else {
errs = append(errs, errors.New("Error generating bid.ext.prebid.bidid"))
}
}
Expand Down
52 changes: 28 additions & 24 deletions exchange/exchange_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -663,7 +663,7 @@ func TestOverrideWithCustomCurrency(t *testing.T) {
}.Builder
e.currencyConverter = mockCurrencyConverter
e.categoriesFetcher = categoriesFetcher
e.bidIDGenerator = &mockBidIDGenerator{false, false}
e.bidIDGenerator = &fakeBidIDGenerator{GenerateBidID: false, ReturnError: false}
e.requestSplitter = requestSplitter{
me: e.me,
gdprPermsBuilder: e.gdprPermsBuilder,
Expand Down Expand Up @@ -768,7 +768,7 @@ func TestAdapterCurrency(t *testing.T) {
}.Builder,
currencyConverter: currencyConverter,
categoriesFetcher: nilCategoryFetcher{},
bidIDGenerator: &mockBidIDGenerator{false, false},
bidIDGenerator: &fakeBidIDGenerator{GenerateBidID: false, ReturnError: false},
adapterMap: map[openrtb_ext.BidderName]AdaptedBidder{
openrtb_ext.BidderName("appnexus"): AdaptBidder(mockBidder, nil, &config.Configuration{}, &metricsConfig.NilMetricsEngine{}, openrtb_ext.BidderName("appnexus"), nil, ""),
},
Expand Down Expand Up @@ -846,7 +846,7 @@ func TestFloorsSignalling(t *testing.T) {
}.Builder,
currencyConverter: currencyConverter,
categoriesFetcher: nilCategoryFetcher{},
bidIDGenerator: &mockBidIDGenerator{false, false},
bidIDGenerator: &fakeBidIDGenerator{GenerateBidID: false, ReturnError: false},
priceFloorEnabled: true,
priceFloorFetcher: &mockPriceFloorFetcher{},
}
Expand Down Expand Up @@ -1129,7 +1129,7 @@ func TestReturnCreativeEndToEnd(t *testing.T) {
}.Builder
e.currencyConverter = currency.NewRateConverter(&http.Client{}, "", time.Duration(0))
e.categoriesFetcher = categoriesFetcher
e.bidIDGenerator = &mockBidIDGenerator{false, false}
e.bidIDGenerator = &fakeBidIDGenerator{GenerateBidID: false, ReturnError: false}
e.requestSplitter = requestSplitter{
me: e.me,
gdprPermsBuilder: e.gdprPermsBuilder,
Expand Down Expand Up @@ -2139,9 +2139,9 @@ func runSpec(t *testing.T, filename string, spec *exchangeSpec) {
},
},
}
bidIdGenerator := &mockBidIDGenerator{}
bidIdGenerator := &fakeBidIDGenerator{}
if spec.BidIDGenerator != nil {
*bidIdGenerator = *spec.BidIDGenerator
bidIdGenerator = spec.BidIDGenerator
}
ex := newExchangeForTests(t, filename, spec.OutgoingRequests, aliases, privacyConfig, bidIdGenerator, spec.HostSChainFlag, spec.FloorsEnabled, spec.HostConfigBidValidation, spec.Server)
biddersInAuction := findBiddersInAuction(t, filename, &spec.IncomingRequest.OrtbRequest)
Expand Down Expand Up @@ -2457,31 +2457,35 @@ func newExchangeForTests(t *testing.T, filename string, expectations map[string]
}
}

type mockBidIDGenerator struct {
type fakeBidIDGenerator struct {
GenerateBidID bool `json:"generateBidID"`
ReturnError bool `json:"returnError"`
bidCount map[string]int
}

func (big *mockBidIDGenerator) Enabled() bool {
return big.GenerateBidID
func (f *fakeBidIDGenerator) Enabled() bool {
return f.GenerateBidID
}

func (big *mockBidIDGenerator) New() (string, error) {
func (f *fakeBidIDGenerator) New(bidder string) (string, error) {
if f.ReturnError {
return "", errors.New("Test error generating bid.ext.prebid.bidid")
}

if big.ReturnError {
err := errors.New("Test error generating bid.ext.prebid.bidid")
return "", err
if f.bidCount == nil {
f.bidCount = make(map[string]int)
}
return "mock_uuid", nil

f.bidCount[bidder] += 1
return fmt.Sprintf("bid-%v-%v", bidder, f.bidCount[bidder]), nil
}

type fakeRandomDeduplicateBidBooleanGenerator struct {
returnValue bool
type fakeBooleanGenerator struct {
value bool
}

func (m *fakeRandomDeduplicateBidBooleanGenerator) Generate() bool {
return m.returnValue
func (f *fakeBooleanGenerator) Generate() bool {
return f.value
}

func newExtRequest() openrtb_ext.ExtRequest {
Expand Down Expand Up @@ -2849,7 +2853,7 @@ func TestCategoryDedupe(t *testing.T) {
Currency: "USD",
},
}
deduplicateGenerator := fakeRandomDeduplicateBidBooleanGenerator{returnValue: tt.dedupeGeneratorValue}
deduplicateGenerator := fakeBooleanGenerator{value: tt.dedupeGeneratorValue}
bidCategory, adapterBids, rejections, err := applyCategoryMapping(nil, *requestExt.Prebid.Targeting, adapterBids, categoriesFetcher, targData, &deduplicateGenerator, &nonBids{})

assert.Nil(t, err)
Expand Down Expand Up @@ -3286,7 +3290,7 @@ func TestCategoryMappingTwoBiddersManyBidsEachNoCategorySamePrice(t *testing.T)
adapterBids[bidderNameApn1] = &seatBidApn1
adapterBids[bidderNameApn2] = &seatBidApn2

_, adapterBids, rejections, err := applyCategoryMapping(nil, *requestExt.Prebid.Targeting, adapterBids, categoriesFetcher, targData, &fakeRandomDeduplicateBidBooleanGenerator{true}, &nonBids{})
_, adapterBids, rejections, err := applyCategoryMapping(nil, *requestExt.Prebid.Targeting, adapterBids, categoriesFetcher, targData, &fakeBooleanGenerator{value: true}, &nonBids{})

assert.NoError(t, err, "Category mapping error should be empty")

Expand Down Expand Up @@ -4110,7 +4114,7 @@ func TestStoredAuctionResponses(t *testing.T) {
e.cache = &wellBehavedCache{}
e.me = &metricsConf.NilMetricsEngine{}
e.categoriesFetcher = categoriesFetcher
e.bidIDGenerator = &mockBidIDGenerator{false, false}
e.bidIDGenerator = &fakeBidIDGenerator{GenerateBidID: false, ReturnError: false}
e.currencyConverter = currency.NewRateConverter(&http.Client{}, "", time.Duration(0))
e.gdprPermsBuilder = fakePermissionsBuilder{
permissions: &permissionsMock{
Expand Down Expand Up @@ -4476,7 +4480,7 @@ func TestAuctionDebugEnabled(t *testing.T) {
e.cache = &wellBehavedCache{}
e.me = &metricsConf.NilMetricsEngine{}
e.categoriesFetcher = categoriesFetcher
e.bidIDGenerator = &mockBidIDGenerator{false, false}
e.bidIDGenerator = &fakeBidIDGenerator{GenerateBidID: false, ReturnError: false}
e.currencyConverter = currency.NewRateConverter(&http.Client{}, "", time.Duration(0))
e.gdprPermsBuilder = fakePermissionsBuilder{
permissions: &permissionsMock{
Expand Down Expand Up @@ -5077,7 +5081,7 @@ func TestOverrideConfigAlternateBidderCodesWithRequestValues(t *testing.T) {
}.Builder
e.currencyConverter = currency.NewRateConverter(&http.Client{}, "", time.Duration(0))
e.categoriesFetcher = categoriesFetcher
e.bidIDGenerator = &mockBidIDGenerator{false, false}
e.bidIDGenerator = &fakeBidIDGenerator{GenerateBidID: false, ReturnError: false}
e.requestSplitter = requestSplitter{
me: e.me,
gdprPermsBuilder: e.gdprPermsBuilder,
Expand Down Expand Up @@ -5474,7 +5478,7 @@ type exchangeSpec struct {
DebugLog *DebugLog `json:"debuglog,omitempty"`
EventsEnabled bool `json:"events_enabled,omitempty"`
StartTime int64 `json:"start_time_ms,omitempty"`
BidIDGenerator *mockBidIDGenerator `json:"bidIDGenerator,omitempty"`
BidIDGenerator *fakeBidIDGenerator `json:"bidIDGenerator,omitempty"`
RequestType *metrics.RequestType `json:"requestType,omitempty"`
PassthroughFlag bool `json:"passthrough_flag,omitempty"`
HostSChainFlag bool `json:"host_schain_flag,omitempty"`
Expand Down
200 changes: 0 additions & 200 deletions exchange/exchangetest/bid-id-invalid.json

This file was deleted.

Loading

0 comments on commit 05a1293

Please sign in to comment.