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##&macro2=##PBS-APPBUNDLE##&macro3=##PBS-DOMAIN##&macro4=##PBS-PUBDOMAIN##&macro5=##PBS-PAGEURL##&macro6=##PBS-ACCOUNTID##&macro7=##PBS-LIMITADTRACKING##&macro8=##PBS-GDPRCONSENT##&macro9=##PBS-MACRO-CUSTOMMACR1##&macro10=##PBS-BIDDER##&macro11=##PBS-INTEGRATION##&macro12=##PBS-VASTCRTID##&macro15=##PBS-AUCTIONID##&macro16=##PBS-CHANNEL##&macro17=##PBS-EVENTTYPE##&macro18=##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&macro2=testbundle&macro3=testdomain&macro4=publishertestdomain&macro5=pageurltest&macro6=testpublisherID&macro7=10&macro8=yes&macro9=value1&macro10=test&macro11=&macro12=123&macro15=123&macro16=test1&macro17=vast&macro18=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##&macro2=##PBS-APPBUNDLE##&macro3=##PBS-APPBUNDLE##&macro4=##PBS-PUBDOMAIN##&macro5=##PBS-PAGEURL##&macro6=##PBS-ACCOUNTID##&macro6=##PBS-LIMITADTRACKING##&macro7=##PBS-GDPRCONSENT##&macro8=##PBS-GDPRCONSENT##&macro9=##PBS-MACRO-CUSTOMMACR1CUST1##&macro10=##PBS-MACRO-CUSTOMMACR1CUST2##",
    98  	"http://google.com?macro1=##PBS-BIDID##&macro2=##PBS-APPBUNDLE##&macro3=##PBS-APPBUNDLE##&macro4=##PBS-PUBDOMAIN##&macro5=##PBS-PAGEURL##&macro6=##PBS-ACCOUNTID##&macro6=##PBS-LIMITADTRACKING##&macro7=##PBS-GDPRCONSENT##&macro8=##PBS-GDPRCONSENT##&macro9=##PBS-MACRO-CUSTOMMACR1CUST1##&macro10=##PBS-MACRO-CUSTOMMACR1CUST2##",
    99  	"http://pubmatic.com?macro1=##PBS-BIDID##&macro2=##PBS-APPBUNDLE##&macro3=##PBS-APPBUNDLE##&macro4=##PBS-PUBDOMAIN##&macro5=##PBS-PAGEURL##&macro6=##PBS-ACCOUNTID##&macro6=##PBS-LIMITADTRACKING##&macro7=##PBS-GDPRCONSENT##&macro8=##PBS-GDPRCONSENT##&macro9=##PBS-MACRO-CUSTOMMACR1CUST1##&macro10=##PBS-MACRO-CUSTOMMACR1CUST2##",
   100  	"http://testbidder.com?macro1=##PBS-BIDID##&macro2=##PBS-APPBUNDLE##&macro3=##PBS-APPBUNDLE##&macro4=##PBS-PUBDOMAIN##&macro5=##PBS-PAGEURL##&macro6=##PBS-ACCOUNTID##&macro6=##PBS-LIMITADTRACKING##&macro7=##PBS-GDPRCONSENT##&macro8=##PBS-GDPRCONSENT##&macro9=##PBS-MACRO-CUSTOMMACR1CUST1##&macro10=##PBS-MACRO-CUSTOMMACR1CUST2##",
   101  	"http://dummybidder.com?macro1=##PBS-BIDID##&macro2=##PBS-APPBUNDLE##&macro3=##PBS-APPBUNDLE##&macro4=##PBS-PUBDOMAIN##&macro5=##PBS-PAGEURL##&macro6=##PBS-ACCOUNTID##&macro6=##PBS-LIMITADTRACKING##&macro7=##PBS-GDPRCONSENT##&macro8=##PBS-GDPRCONSENT##&macro9=##PBS-MACRO-CUSTOMMACR1CUST1##&macro10=##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  }