Skip to content

Commit

Permalink
remove json parser calls for request aliases
Browse files Browse the repository at this point in the history
  • Loading branch information
SyntaxNode committed Apr 9, 2024
1 parent 1b05fae commit 28d1888
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 68 deletions.
9 changes: 5 additions & 4 deletions exchange/exchange_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2106,10 +2106,11 @@ func loadFile(filename string) (*exchangeSpec, error) {
}

func runSpec(t *testing.T, filename string, spec *exchangeSpec) {
aliases, errs := getRequestAliases(&spec.IncomingRequest.OrtbRequest)
if len(errs) != 0 {
t.Fatalf("%s: Failed to parse aliases", filename)
}
// aliases, errs := getRequestAliases(&spec.IncomingRequest.OrtbRequest)
// if len(errs) != 0 {
// t.Fatalf("%s: Failed to parse aliases", filename)
// }
aliases := map[string]string{}

var s struct{}
eeac := make(map[string]struct{})
Expand Down
37 changes: 11 additions & 26 deletions exchange/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import (

"github.com/prebid/prebid-server/v2/ortb"

"github.com/buger/jsonparser"
"github.com/prebid/go-gdpr/vendorconsent"
gpplib "github.com/prebid/go-gpp"
gppConstants "github.com/prebid/go-gpp/constants"
Expand All @@ -33,6 +32,8 @@ import (
"github.com/prebid/prebid-server/v2/util/ptrutil"
)

var errInvalidRequestExt = errors.New("request.ext is invalid")

var channelTypeMap = map[metrics.RequestType]config.ChannelType{
metrics.ReqTypeAMP: config.ChannelAMP,
metrics.ReqTypeORTB2App: config.ChannelApp,
Expand Down Expand Up @@ -64,7 +65,7 @@ func (rs *requestSplitter) cleanOpenRTBRequests(ctx context.Context,
) (allowedBidderRequests []BidderRequest, privacyLabels metrics.PrivacyLabels, errs []error) {
req := auctionReq.BidRequestWrapper

requestAliases, errs := getRequestAliases(req.BidRequest)
requestAliases, requestAliasesGVLIDs, errs := getRequestAliases(req)
if len(errs) > 0 {
return
}
Expand All @@ -79,11 +80,6 @@ func (rs *requestSplitter) cleanOpenRTBRequests(ctx context.Context,
return
}

requestAliasesGVLIDs, errs := getRequestAliasesGVLIDs(req.BidRequest)
if len(errs) > 0 {
return
}

gdprSignal, err := getGDPR(req)
if err != nil {
errs = append(errs, err)
Expand Down Expand Up @@ -806,28 +802,17 @@ func resolveBidder(bidder string, requestAliases map[string]string) (openrtb_ext
return normalisedBidderName, false
}

func getRequestAliases(orig *openrtb2.BidRequest) (map[string]string, []error) {
var aliases map[string]string
if value, dataType, _, err := jsonparser.Get(orig.Ext, openrtb_ext.PrebidExtKey, "aliases"); dataType == jsonparser.Object && err == nil {
if err := jsonutil.Unmarshal(value, &aliases); err != nil {
return nil, []error{err}
}
} else if dataType != jsonparser.NotExist && err != jsonparser.KeyPathNotFoundError {
return nil, []error{err}
func getRequestAliases(req *openrtb_ext.RequestWrapper) (map[string]string, map[string]uint16, []error) {
reqExt, err := req.GetRequestExt()
if err != nil {
return nil, nil, []error{errInvalidRequestExt}
}
return aliases, nil
}

func getRequestAliasesGVLIDs(orig *openrtb2.BidRequest) (map[string]uint16, []error) {
var aliasesGVLIDs map[string]uint16
if value, dataType, _, err := jsonparser.Get(orig.Ext, openrtb_ext.PrebidExtKey, "aliasgvlids"); dataType == jsonparser.Object && err == nil {
if err := jsonutil.Unmarshal(value, &aliasesGVLIDs); err != nil {
return nil, []error{err}
}
} else if dataType != jsonparser.NotExist && err != jsonparser.KeyPathNotFoundError {
return nil, []error{err}
if prebid := reqExt.GetPrebid(); prebid != nil {
return prebid.Aliases, prebid.AliasGVLIDs, nil
}
return aliasesGVLIDs, nil

return nil, nil, nil
}

func GetValidBidders(requestAliases map[string]string) map[string]struct{} {
Expand Down
94 changes: 56 additions & 38 deletions exchange/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/prebid/prebid-server/v2/util/ptrutil"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)

const deviceUA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36"
Expand Down Expand Up @@ -3387,63 +3388,80 @@ func TestApplyFPD(t *testing.T) {
}
}

func TestGetRequestAliasesGVLIDs(t *testing.T) {
type args struct {
orig *openrtb2.BidRequest
}
func TestGetRequestAliases(t *testing.T) {
tests := []struct {
name string
args args
want map[string]uint16
wantError bool
name string
givenRequest openrtb_ext.RequestWrapper
wantAliases map[string]string
wantGVLIDs map[string]uint16
wantError string
}{
{
"AliasGVLID Parsed Correctly",
args{
orig: &openrtb2.BidRequest{
Ext: json.RawMessage(`{"prebid":{"aliases":{"somealiascode":"appnexus"}, "aliasgvlids":{"somealiascode":1}}}`),
name: "nil",
givenRequest: openrtb_ext.RequestWrapper{
BidRequest: &openrtb2.BidRequest{},
},
wantAliases: nil,
wantGVLIDs: nil,
wantError: "",
},
{
name: "empty",
givenRequest: openrtb_ext.RequestWrapper{
BidRequest: &openrtb2.BidRequest{
Ext: json.RawMessage(`{}`),
},
},
map[string]uint16{"somealiascode": 1},
false,
wantAliases: nil,
wantGVLIDs: nil,
wantError: "",
},
{
"AliasGVLID parsing error",
args{
orig: &openrtb2.BidRequest{
Ext: json.RawMessage(`{"prebid":{"aliases":{"somealiascode":"appnexus"}, "aliasgvlids": {"somealiascode":"abc"}`),
name: "empty-prebid",
givenRequest: openrtb_ext.RequestWrapper{
BidRequest: &openrtb2.BidRequest{
Ext: json.RawMessage(`{"prebid":{}}`),
},
},
nil,
true,
wantAliases: nil,
wantGVLIDs: nil,
wantError: "",
},
{
"Invalid AliasGVLID",
args{
orig: &openrtb2.BidRequest{
Ext: json.RawMessage(`{"prebid":{"aliases":{"somealiascode":"appnexus"}, "aliasgvlids":"abc"}`),
name: "aliases-and-gvlids",
givenRequest: openrtb_ext.RequestWrapper{
BidRequest: &openrtb2.BidRequest{
Ext: json.RawMessage(`{"prebid":{"aliases":{"alias1":"bidder1"}, "aliasgvlids":{"alias1":1}}}`),
},
},
nil,
true,
wantAliases: map[string]string{"alias1": "bidder1"},
wantGVLIDs: map[string]uint16{"alias1": 1},
wantError: "",
},
{
"Missing AliasGVLID",
args{
orig: &openrtb2.BidRequest{
Ext: json.RawMessage(`{"prebid":{"aliases":{"somealiascode":"appnexus"}}`),
name: "malformed",
givenRequest: openrtb_ext.RequestWrapper{
BidRequest: &openrtb2.BidRequest{
Ext: json.RawMessage(`malformed`),
},
},
nil,
false,
wantAliases: nil,
wantGVLIDs: nil,
wantError: "request.ext is invalid",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := getRequestAliasesGVLIDs(tt.args.orig)
assert.Equal(t, tt.want, got, "parseAliasesGVLIDs() got = %v, want %v", got, tt.want)
if !tt.wantError && err != nil {
t.Errorf("parseAliasesGVLIDs() expected error got nil")
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
gotAliases, gotGVLIDs, err := getRequestAliases(&test.givenRequest)

assert.Equal(t, test.wantAliases, gotAliases, "aliases")
assert.Equal(t, test.wantGVLIDs, gotGVLIDs, "gvlids")

if len(test.wantError) > 0 {
require.Len(t, err, 1, "error-len")
assert.EqualError(t, err[0], test.wantError, "error")
} else {
assert.Empty(t, err, "error")
}
})
}
Expand Down

0 comments on commit 28d1888

Please sign in to comment.