github.com/prebid/prebid-server@v0.275.0/macros/string_index_based_replacer_test.go (about) 1 package macros 2 3 import ( 4 "testing" 5 6 "github.com/prebid/openrtb/v19/openrtb2" 7 "github.com/prebid/prebid-server/exchange/entities" 8 "github.com/prebid/prebid-server/openrtb_ext" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestStringIndexBasedReplace(t *testing.T) { 13 14 type args struct { 15 url string 16 getMacroProvider func() *macroProvider 17 } 18 tests := []struct { 19 name string 20 args args 21 want string 22 wantErr bool 23 }{ 24 { 25 name: "success", 26 args: args{ 27 url: "http://tracker.com?macro1=##PBS-BIDID##¯o2=##PBS-APPBUNDLE##¯o3=##PBS-DOMAIN##¯o4=##PBS-PUBDOMAIN##¯o5=##PBS-PAGEURL##¯o6=##PBS-ACCOUNTID##¯o7=##PBS-LIMITADTRACKING##¯o8=##PBS-GDPRCONSENT##¯o9=##PBS-MACRO-CUSTOMMACR1##¯o10=##PBS-BIDDER##¯o11=##PBS-INTEGRATION##¯o12=##PBS-VASTCRTID##¯o15=##PBS-AUCTIONID##¯o16=##PBS-CHANNEL##¯o17=##PBS-EVENTTYPE##¯o18=##PBS-VASTEVENT##", 28 getMacroProvider: func() *macroProvider { 29 macroProvider := NewProvider(req) 30 macroProvider.PopulateBidMacros(&entities.PbsOrtbBid{Bid: bid}, "test") 31 macroProvider.PopulateEventMacros("123", "vast", "firstQuartile") 32 return macroProvider 33 }, 34 }, 35 want: "http://tracker.com?macro1=bidId123¯o2=testbundle¯o3=testdomain¯o4=publishertestdomain¯o5=pageurltest¯o6=testpublisherID¯o7=10¯o8=yes¯o9=value1¯o10=test¯o11=¯o12=123¯o15=123¯o16=test1¯o17=vast¯o18=firstQuartile", 36 wantErr: false, 37 }, 38 { 39 name: "url does not have macro", 40 args: args{ 41 url: "http://tracker.com", 42 getMacroProvider: func() *macroProvider { 43 macroProvider := NewProvider(req) 44 macroProvider.PopulateBidMacros(&entities.PbsOrtbBid{Bid: bid}, "test") 45 macroProvider.PopulateEventMacros("123", "vast", "firstQuartile") 46 return macroProvider 47 }, 48 }, 49 want: "http://tracker.com", 50 wantErr: false, 51 }, 52 { 53 name: "macro not found", 54 args: args{ 55 url: "http://tracker.com?macro1=##PBS-test1##", 56 getMacroProvider: func() *macroProvider { 57 macroProvider := NewProvider(&openrtb_ext.RequestWrapper{BidRequest: &openrtb2.BidRequest{}}) 58 macroProvider.PopulateBidMacros(&entities.PbsOrtbBid{Bid: bid}, "test") 59 macroProvider.PopulateEventMacros("123", "vast", "firstQuartile") 60 return macroProvider 61 }, 62 }, 63 want: "http://tracker.com?macro1=", 64 wantErr: false, 65 }, 66 { 67 name: "tracker url is empty", 68 args: args{ 69 url: "", 70 getMacroProvider: func() *macroProvider { 71 macroProvider := NewProvider(&openrtb_ext.RequestWrapper{BidRequest: &openrtb2.BidRequest{}}) 72 macroProvider.PopulateBidMacros(&entities.PbsOrtbBid{Bid: bid}, "test") 73 macroProvider.PopulateEventMacros("123", "vast", "firstQuartile") 74 return macroProvider 75 }, 76 }, 77 want: "", 78 wantErr: false, 79 }, 80 } 81 for _, tt := range tests { 82 t.Run(tt.name, func(t *testing.T) { 83 replacer := NewStringIndexBasedReplacer() 84 got, err := replacer.Replace(tt.args.url, tt.args.getMacroProvider()) 85 if tt.wantErr { 86 assert.Error(t, err, tt.name) 87 } else { 88 assert.NoError(t, err, tt.name) 89 assert.Equal(t, tt.want, got, tt.name) 90 } 91 }) 92 } 93 } 94 95 var lmt int8 = 10 96 var benchmarkURL = []string{ 97 "http://tracker1.com?macro1=##PBS-BIDID##¯o2=##PBS-APPBUNDLE##¯o3=##PBS-APPBUNDLE##¯o4=##PBS-PUBDOMAIN##¯o5=##PBS-PAGEURL##¯o6=##PBS-ACCOUNTID##¯o6=##PBS-LIMITADTRACKING##¯o7=##PBS-GDPRCONSENT##¯o8=##PBS-GDPRCONSENT##¯o9=##PBS-MACRO-CUSTOMMACR1CUST1##¯o10=##PBS-MACRO-CUSTOMMACR1CUST2##", 98 "http://google.com?macro1=##PBS-BIDID##¯o2=##PBS-APPBUNDLE##¯o3=##PBS-APPBUNDLE##¯o4=##PBS-PUBDOMAIN##¯o5=##PBS-PAGEURL##¯o6=##PBS-ACCOUNTID##¯o6=##PBS-LIMITADTRACKING##¯o7=##PBS-GDPRCONSENT##¯o8=##PBS-GDPRCONSENT##¯o9=##PBS-MACRO-CUSTOMMACR1CUST1##¯o10=##PBS-MACRO-CUSTOMMACR1CUST2##", 99 "http://pubmatic.com?macro1=##PBS-BIDID##¯o2=##PBS-APPBUNDLE##¯o3=##PBS-APPBUNDLE##¯o4=##PBS-PUBDOMAIN##¯o5=##PBS-PAGEURL##¯o6=##PBS-ACCOUNTID##¯o6=##PBS-LIMITADTRACKING##¯o7=##PBS-GDPRCONSENT##¯o8=##PBS-GDPRCONSENT##¯o9=##PBS-MACRO-CUSTOMMACR1CUST1##¯o10=##PBS-MACRO-CUSTOMMACR1CUST2##", 100 "http://testbidder.com?macro1=##PBS-BIDID##¯o2=##PBS-APPBUNDLE##¯o3=##PBS-APPBUNDLE##¯o4=##PBS-PUBDOMAIN##¯o5=##PBS-PAGEURL##¯o6=##PBS-ACCOUNTID##¯o6=##PBS-LIMITADTRACKING##¯o7=##PBS-GDPRCONSENT##¯o8=##PBS-GDPRCONSENT##¯o9=##PBS-MACRO-CUSTOMMACR1CUST1##¯o10=##PBS-MACRO-CUSTOMMACR1CUST2##", 101 "http://dummybidder.com?macro1=##PBS-BIDID##¯o2=##PBS-APPBUNDLE##¯o3=##PBS-APPBUNDLE##¯o4=##PBS-PUBDOMAIN##¯o5=##PBS-PAGEURL##¯o6=##PBS-ACCOUNTID##¯o6=##PBS-LIMITADTRACKING##¯o7=##PBS-GDPRCONSENT##¯o8=##PBS-GDPRCONSENT##¯o9=##PBS-MACRO-CUSTOMMACR1CUST1##¯o10=##PBS-MACRO-CUSTOMMACR1CUST2##", 102 } 103 104 var req *openrtb_ext.RequestWrapper = &openrtb_ext.RequestWrapper{ 105 BidRequest: &openrtb2.BidRequest{ 106 ID: "123", 107 Site: &openrtb2.Site{ 108 Domain: "testdomain", 109 Publisher: &openrtb2.Publisher{ 110 Domain: "publishertestdomain", 111 ID: "testpublisherID", 112 }, 113 Page: "pageurltest", 114 }, 115 App: &openrtb2.App{ 116 Domain: "testdomain", 117 Bundle: "testbundle", 118 Publisher: &openrtb2.Publisher{ 119 Domain: "publishertestdomain", 120 ID: "testpublisherID", 121 }, 122 }, 123 Device: &openrtb2.Device{ 124 Lmt: &lmt, 125 }, 126 User: &openrtb2.User{Ext: []byte(`{"consent":"yes" }`)}, 127 Ext: []byte(`{"prebid":{"channel": {"name":"test1"},"macros":{"CUSTOMMACR1":"value1","CUSTOMMACR2":"value2","CUSTOMMACR3":"value3"}}}`), 128 }, 129 } 130 131 var bid *openrtb2.Bid = &openrtb2.Bid{ID: "bidId123", CID: "campaign_1", CrID: "creative_1"} 132 133 func BenchmarkStringIndexBasedReplacer(b *testing.B) { 134 replacer := NewStringIndexBasedReplacer() 135 for n := 0; n < b.N; n++ { 136 for _, url := range benchmarkURL { 137 macroProvider := NewProvider(req) 138 macroProvider.PopulateBidMacros(&entities.PbsOrtbBid{Bid: bid}, "test") 139 macroProvider.PopulateEventMacros("123", "vast", "firstQuartile") 140 _, err := replacer.Replace(url, macroProvider) 141 if err != nil { 142 b.Errorf("Fail to replace macro in tracker") 143 } 144 } 145 } 146 }