Skip to content

Commit

Permalink
Added unit tests and improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
vsolovei committed Mar 2, 2023
1 parent b65b5d7 commit b9cbc78
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 29 deletions.
7 changes: 4 additions & 3 deletions adservertargeting/adservertargeting.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,13 @@ type adServerTargetingData struct {

func ProcessAdServerTargeting(
reqWrapper *openrtb_ext.RequestWrapper,
resolvedRequest json.RawMessage,
response *openrtb2.BidResponse,
queryParams map[string]string,
bidResponseExt *openrtb_ext.ExtBidResponse,
truncateTargetAttribute *int) *openrtb2.BidResponse {

adServerTargeting, warnings := ExtractAdServerTargeting(reqWrapper, queryParams)
adServerTargeting, warnings := ExtractAdServerTargeting(reqWrapper, resolvedRequest, queryParams)
response, warnings = ResolveAdServerTargeting(adServerTargeting, response, warnings, truncateTargetAttribute)

if len(warnings) > 0 {
Expand All @@ -54,7 +55,7 @@ func ProcessAdServerTargeting(
}

func ExtractAdServerTargeting(
reqWrapper *openrtb_ext.RequestWrapper,
reqWrapper *openrtb_ext.RequestWrapper, resolvedRequest json.RawMessage,
ampData map[string]string) (*adServerTargetingData, []openrtb_ext.ExtBidderMessage) {
//this func should receive a finalized request wrapper

Expand All @@ -78,7 +79,7 @@ func ExtractAdServerTargeting(
requestTargetingData := make(map[string]RequestTargetingData, 0)
responseTargetingData := make([]ResponseTargetingData, 0)

dataHolder := reqImpCache{reqWrapper: reqWrapper}
dataHolder := reqImpCache{resolverReq: resolvedRequest}

for _, targetingObj := range adServerTargeting {
source := strings.ToLower(targetingObj.Source)
Expand Down
13 changes: 10 additions & 3 deletions adservertargeting/adservertargeting_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ func TestExtractAdServerTargeting(t *testing.T) {
p := "https://www.test-url.com?ampkey=testAmpKey&data-override-height=400"
u, _ := url.Parse(p)
params := httputil.ConvertUrlParamsToMap(u)
res, warnings := ExtractAdServerTargeting(rw, params)
reqBytes, err := json.Marshal(r)
assert.NoError(t, err, "unexpected req marshal error")

res, warnings := ExtractAdServerTargeting(rw, reqBytes, params)
assert.Empty(t, warnings, "unexpected warnings")

assert.Len(t, res.RequestTargetingData, 7, "incorrect request targeting data length")
Expand Down Expand Up @@ -240,7 +243,9 @@ func TestProcessAdServerTargetingFull(t *testing.T) {

bidResponseExt := &openrtb_ext.ExtBidResponse{Warnings: make(map[openrtb_ext.BidderName][]openrtb_ext.ExtBidderMessage)}

resResp := ProcessAdServerTargeting(rw, resp, params, bidResponseExt, nil)
reqBytes, err := json.Marshal(r)
assert.NoError(t, err, "unexpected req marshal error")
resResp := ProcessAdServerTargeting(rw, reqBytes, resp, params, bidResponseExt, nil)
assert.Len(t, resResp.SeatBid, 2, "Incorrect response: seat bid number")
assert.Len(t, bidResponseExt.Warnings, 0, "Incorrect response: no warnings expected")

Expand Down Expand Up @@ -318,7 +323,9 @@ func TestProcessAdServerTargetingWarnings(t *testing.T) {

bidResponseExt := &openrtb_ext.ExtBidResponse{Warnings: make(map[openrtb_ext.BidderName][]openrtb_ext.ExtBidderMessage)}

resResp := ProcessAdServerTargeting(rw, resp, params, bidResponseExt, nil)
reqBytes, err := json.Marshal(r)
assert.NoError(t, err, "unexpected req marshal error")
resResp := ProcessAdServerTargeting(rw, reqBytes, resp, params, bidResponseExt, nil)
assert.Len(t, resResp.SeatBid, 2, "Incorrect response: seat bid number")

apnBids := resResp.SeatBid[0].Bid
Expand Down
23 changes: 5 additions & 18 deletions adservertargeting/reqcache.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,20 @@ import (
"encoding/json"
"github.com/buger/jsonparser"
"github.com/prebid/openrtb/v17/openrtb2"
"github.com/prebid/prebid-server/openrtb_ext"
)

type reqImpCache struct {
reqWrapper *openrtb_ext.RequestWrapper
reqJson []byte
impsData []json.RawMessage
resolverReq json.RawMessage
impsData []json.RawMessage
}

func (dh *reqImpCache) GetReqJson() ([]byte, error) {
if len(dh.reqJson) == 0 {
res, err := json.Marshal(dh.reqWrapper.BidRequest)
if err != nil {
return nil, err
}
dh.reqJson = res
}
return dh.reqJson, nil
func (dh *reqImpCache) GetReqJson() []byte {
return dh.resolverReq
}

func (dh *reqImpCache) GetImpsData() ([]json.RawMessage, error) {
if len(dh.impsData) == 0 {
reqJson, err := dh.GetReqJson()
if err != nil {
return nil, err
}
imps, _, _, err := jsonparser.Get(reqJson, "imp")
imps, _, _, err := jsonparser.Get(dh.resolverReq, "imp")
if err != nil {
return nil, err
}
Expand Down
5 changes: 1 addition & 4 deletions adservertargeting/reqdataprocessor.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,7 @@ func getValueFromImp(path string, dataHolder *reqImpCache) (map[string][]byte, e

func getDataFromRequest(path string, dataHolder *reqImpCache) (json.RawMessage, error) {
keySplit := strings.Split(path, pathDelimiter)
reqJson, err := dataHolder.GetReqJson()
if err != nil {
return nil, err
}
reqJson := dataHolder.GetReqJson()
value, _, _, err := jsonparser.Get(reqJson, keySplit...)
if err != nil {
return nil, errors.Errorf("value not found for path: %s", path)
Expand Down
2 changes: 1 addition & 1 deletion exchange/exchange.go
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ func (e *exchange) HoldAuction(ctx context.Context, r AuctionRequest, debugLog *
// Build the response
bidResponse, err := e.buildBidResponse(ctx, liveAdapters, adapterBids, r.BidRequestWrapper.BidRequest, adapterExtra, auc, bidResponseExt, cacheInstructions.returnCreative, r.ImpExtInfoMap, r.PubID, errs)

bidResponse = adservertargeting.ProcessAdServerTargeting(r.BidRequestWrapper, bidResponse, r.QueryParams, bidResponseExt, r.Account.TruncateTargetAttribute)
bidResponse = adservertargeting.ProcessAdServerTargeting(r.BidRequestWrapper, r.ResolvedBidRequest, bidResponse, r.QueryParams, bidResponseExt, r.Account.TruncateTargetAttribute)

bidResponse.Ext, err = encodeBidResponseExt(bidResponseExt)

Expand Down

0 comments on commit b9cbc78

Please sign in to comment.