From 6e6b2dee24178dda169bf9ec5ddeb9a164b3cc2a Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 13:48:11 +0300 Subject: [PATCH 01/27] initial --- adapters/colossus/colossus.go | 138 ++++++++++++++++++ adapters/colossus/colossus_test.go | 12 ++ .../colossustest/exemplary/simple-banner.json | 134 +++++++++++++++++ .../colossustest/exemplary/simple-video.json | 119 +++++++++++++++ .../exemplary/simple-web-banner.json | 133 +++++++++++++++++ .../colossus/colossustest/params/banner.json | 3 + .../colossustest/params/race/banner.json | 3 + .../colossustest/params/race/video.json | 3 + .../colossus/colossustest/params/video.json | 3 + .../supplemental/bad-imp-ext.json | 42 ++++++ .../supplemental/bad_response.json | 85 +++++++++++ .../supplemental/no-imp-ext-1.json | 39 +++++ .../supplemental/no-imp-ext-2.json | 39 +++++ .../colossustest/supplemental/status-204.json | 79 ++++++++++ .../colossustest/supplemental/status-404.json | 85 +++++++++++ adapters/colossus/params_test.go | 46 ++++++ adapters/colossus/usersync.go | 13 ++ adapters/colossus/usersync_test.go | 35 +++++ 18 files changed, 1011 insertions(+) create mode 100644 adapters/colossus/colossus.go create mode 100644 adapters/colossus/colossus_test.go create mode 100644 adapters/colossus/colossustest/exemplary/simple-banner.json create mode 100644 adapters/colossus/colossustest/exemplary/simple-video.json create mode 100644 adapters/colossus/colossustest/exemplary/simple-web-banner.json create mode 100644 adapters/colossus/colossustest/params/banner.json create mode 100644 adapters/colossus/colossustest/params/race/banner.json create mode 100644 adapters/colossus/colossustest/params/race/video.json create mode 100644 adapters/colossus/colossustest/params/video.json create mode 100644 adapters/colossus/colossustest/supplemental/bad-imp-ext.json create mode 100644 adapters/colossus/colossustest/supplemental/bad_response.json create mode 100644 adapters/colossus/colossustest/supplemental/no-imp-ext-1.json create mode 100644 adapters/colossus/colossustest/supplemental/no-imp-ext-2.json create mode 100644 adapters/colossus/colossustest/supplemental/status-204.json create mode 100644 adapters/colossus/colossustest/supplemental/status-404.json create mode 100644 adapters/colossus/params_test.go create mode 100644 adapters/colossus/usersync.go create mode 100644 adapters/colossus/usersync_test.go diff --git a/adapters/colossus/colossus.go b/adapters/colossus/colossus.go new file mode 100644 index 00000000000..2576bd240ec --- /dev/null +++ b/adapters/colossus/colossus.go @@ -0,0 +1,138 @@ +package colossus + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/buger/jsonparser" + "github.com/mxmCherry/openrtb" + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/errortypes" + "github.com/prebid/prebid-server/openrtb_ext" +) + +// ColossusAdapter struct +type ColossusAdapter struct { + URI string +} + +// NewColossusBidder Initializes the Bidder +func NewColossusBidder(endpoint string) *ColossusAdapter { + return &ColossusAdapter{ + URI: endpoint, + } +} + +// MakeRequests create bid request for colossus demand +func (a *ColossusAdapter) MakeRequests(request *openrtb.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { + var errs []error + var err error + var tagID string + + var adapterRequests []*adapters.RequestData + + reqCopy := *request + for _, imp := range request.Imp { + reqCopy.Imp = []openrtb.Imp{imp} + + tagID, err = jsonparser.GetString(reqCopy.Imp[0].Ext, "bidder", "TagID") + if err != nil { + errs = append(errs, err) + continue + } + + reqCopy.Imp[0].TagID = tagID + + adapterReq, errors := a.makeRequest(&reqCopy) + if adapterReq != nil { + adapterRequests = append(adapterRequests, adapterReq) + } + errs = append(errs, errors...) + } + return adapterRequests, errs +} + +func (a *ColossusAdapter) makeRequest(request *openrtb.BidRequest) (*adapters.RequestData, []error) { + + var errs []error + + reqJSON, err := json.Marshal(request) + + if err != nil { + errs = append(errs, err) + return nil, errs + } + + headers := http.Header{} + headers.Add("Content-Type", "application/json;charset=utf-8") + headers.Add("Accept", "application/json") + return &adapters.RequestData{ + Method: "POST", + Uri: a.URI, + Body: reqJSON, + Headers: headers, + }, errs +} + +// MakeBids makes the bids +func (a *ColossusAdapter) MakeBids(internalRequest *openrtb.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) { + var errs []error + + if response.StatusCode == http.StatusNoContent { + return nil, nil + } + + if response.StatusCode == http.StatusNotFound { + return nil, []error{&errortypes.BadServerResponse{ + Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode), + }} + } + + if response.StatusCode != http.StatusOK { + return nil, []error{&errortypes.BadServerResponse{ + Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode), + }} + } + + var bidResp openrtb.BidResponse + + if err := json.Unmarshal(response.Body, &bidResp); err != nil { + return nil, []error{err} + } + + bidResponse := adapters.NewBidderResponseWithBidsCapacity(1) + + for _, sb := range bidResp.SeatBid { + for i := range sb.Bid { + bidType, err := getMediaTypeForImp(sb.Bid[i].ImpID, internalRequest.Imp) + if err != nil { + errs = append(errs, err) + } else { + b := &adapters.TypedBid{ + Bid: &sb.Bid[i], + BidType: bidType, + } + bidResponse.Bids = append(bidResponse.Bids, b) + } + } + } + return bidResponse, errs +} + +func getMediaTypeForImp(impID string, imps []openrtb.Imp) (openrtb_ext.BidType, error) { + mediaType := openrtb_ext.BidTypeBanner + for _, imp := range imps { + if imp.ID == impID { + if imp.Banner == nil && imp.Video != nil { + mediaType = openrtb_ext.BidTypeVideo + } + return mediaType, nil + } + } + + // This shouldnt happen. Lets handle it just incase by returning an error. + return "", &errortypes.BadInput{ + Message: fmt.Sprintf("Failed to find impression \"%s\" ", impID), + } +} diff --git a/adapters/colossus/colossus_test.go b/adapters/colossus/colossus_test.go new file mode 100644 index 00000000000..027fc06af1f --- /dev/null +++ b/adapters/colossus/colossus_test.go @@ -0,0 +1,12 @@ +package colossus + +import ( + "testing" + + "github.com/prebid/prebid-server/adapters/adapterstest" +) + +func TestJsonSamples(t *testing.T) { + colossusAdapter := NewColossusBidder("http://colossusssp.com/?c=o&m=rtb") + adapterstest.RunJSONBidderTest(t, "colossustest", colossusAdapter) +} diff --git a/adapters/colossus/colossustest/exemplary/simple-banner.json b/adapters/colossus/colossustest/exemplary/simple-banner.json new file mode 100644 index 00000000000..d239bf177b0 --- /dev/null +++ b/adapters/colossus/colossustest/exemplary/simple-banner.json @@ -0,0 +1,134 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": { + "bidder": { + "TagID": "61317" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } +}, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": { + "bidder": { + "TagID": "61317" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } + } + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "seatbid": [ + { + "bid": [ + { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "w": 300, + "h": 250, + "ext": { + "prebid": { + "type": "banner" + } + } + } + ], + "seat": "colossus" + } + ], + "cur": "USD" + } + } + } + ], + + "expectedBidResponses": [ + { + "bids":[ + { + "bid": { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "w": 300, + "h": 250, + "ext": { + "prebid": { + "type": "banner" + } + } + }, + "type": "banner" + } + ] + } + ] +} diff --git a/adapters/colossus/colossustest/exemplary/simple-video.json b/adapters/colossus/colossustest/exemplary/simple-video.json new file mode 100644 index 00000000000..503567571e7 --- /dev/null +++ b/adapters/colossus/colossustest/exemplary/simple-video.json @@ -0,0 +1,119 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + }, + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "imp": [ + { + "id": "test-imp-id", + "video": { + "mimes": ["video/mp4"], + "protocols": [2, 5], + "w": 1024, + "h": 576 + }, + "ext": { + "bidder": { + "TagID": "61318" + } + } + } + ] + }, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + }, + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "imp": [ + { + "id": "test-imp-id", + "video": { + "mimes": ["video/mp4"], + "protocols": [2, 5], + "w": 1024, + "h": 576 + }, + "tagid": "61318", + "ext": { + "bidder": { + "TagID": "61318" + } + } + } + ] + } + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "seatbid": [ + { + "bid": [ + { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "00:01:00", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "ext": { + "prebid": { + "type": "video" + } + } + } + ], + "seat": "colossus" + } + ], + "cur": "USD" + } + } + } + ], + + + "expectedBidResponses": [ + { + "currency": "USD", + "bids": [ + { + "bid": { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "00:01:00", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "ext": { + "prebid": { + "type": "video" + } + } + }, + "type": "video" + } + ] + } + ] +} diff --git a/adapters/colossus/colossustest/exemplary/simple-web-banner.json b/adapters/colossus/colossustest/exemplary/simple-web-banner.json new file mode 100644 index 00000000000..818b24885b2 --- /dev/null +++ b/adapters/colossus/colossustest/exemplary/simple-web-banner.json @@ -0,0 +1,133 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "1", + "ext": { + "bidder": { + "TagID": "1" + } + } + } + ], + "site": { + "id": "1", + "domain": "test.com" + }, + "device": { + "ip": "123.123.123.123" + } + }, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "1", + "ext": { + "bidder": { + "TagID": "1" + } + } + } + ], + "site": { + "id": "1", + "domain": "test.com" + }, + "device": { + "ip": "123.123.123.123" + } + } + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "seatbid": [ + { + "bid": [ + { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "w": 468, + "h": 60, + "ext": { + "prebid": { + "type": "banner" + } + } + } + ], + "seat": "colossus" + } + ], + "cur": "USD" + } + } + } + ], + + "expectedBidResponses": [ + { + "bids":[ + { + "bid": { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "w": 468, + "h": 60, + "ext": { + "prebid": { + "type": "banner" + } + } + }, + "type": "banner" + } + ] + } + ] + } + \ No newline at end of file diff --git a/adapters/colossus/colossustest/params/banner.json b/adapters/colossus/colossustest/params/banner.json new file mode 100644 index 00000000000..1cd30e98ef8 --- /dev/null +++ b/adapters/colossus/colossustest/params/banner.json @@ -0,0 +1,3 @@ +{ + "TagID": "61317" +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/params/race/banner.json b/adapters/colossus/colossustest/params/race/banner.json new file mode 100644 index 00000000000..1cd30e98ef8 --- /dev/null +++ b/adapters/colossus/colossustest/params/race/banner.json @@ -0,0 +1,3 @@ +{ + "TagID": "61317" +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/params/race/video.json b/adapters/colossus/colossustest/params/race/video.json new file mode 100644 index 00000000000..a334715e00e --- /dev/null +++ b/adapters/colossus/colossustest/params/race/video.json @@ -0,0 +1,3 @@ +{ + "TagID": "61318" +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/params/video.json b/adapters/colossus/colossustest/params/video.json new file mode 100644 index 00000000000..a334715e00e --- /dev/null +++ b/adapters/colossus/colossustest/params/video.json @@ -0,0 +1,3 @@ +{ + "TagID": "61318" +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/supplemental/bad-imp-ext.json b/adapters/colossus/colossustest/supplemental/bad-imp-ext.json new file mode 100644 index 00000000000..1ddce56b477 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/bad-imp-ext.json @@ -0,0 +1,42 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": { + "colossus": { + "TagID": "61317" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } +}, +"expectedMakeRequestsErrors": [ + { + "value": "unexpected end of JSON input", + "comparison": "literal" + } +] +} diff --git a/adapters/colossus/colossustest/supplemental/bad_response.json b/adapters/colossus/colossustest/supplemental/bad_response.json new file mode 100644 index 00000000000..42a6d04942a --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/bad_response.json @@ -0,0 +1,85 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "17", + "ext": { + "bidder": { + "TagID": "17" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + }, + "httpCalls": [{ + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "17", + "ext": { + "bidder": { + "TagID": "17" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + } + }, + "mockResponse": { + "status": 200, + "body": "" + } + }], + "expectedMakeBidsErrors": [ + { + "value": "json: cannot unmarshal string into Go value of type openrtb.BidResponse", + "comparison": "literal" + } + ] +} diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json b/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json new file mode 100644 index 00000000000..3ee4209c919 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json @@ -0,0 +1,39 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": "" + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } + }, + "expectedMakeRequestsErrors": [ + { + "value": "json: cannot unmarshal string into Go value of type adapters.ExtImpBidder", + "comparison": "literal" + } + ] + } + \ No newline at end of file diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json b/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json new file mode 100644 index 00000000000..3c5d010c9f2 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json @@ -0,0 +1,39 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": {} + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } + }, + "expectedMakeRequestsErrors": [ + { + "value": "unexpected end of JSON input", + "comparison": "literal" + } + ] + } + \ No newline at end of file diff --git a/adapters/colossus/colossustest/supplemental/status-204.json b/adapters/colossus/colossustest/supplemental/status-204.json new file mode 100644 index 00000000000..fd9e6b382e2 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/status-204.json @@ -0,0 +1,79 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "17", + "ext": { + "bidder": { + "TagID": "17" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + }, + "httpCalls": [{ + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "17", + "ext": { + "bidder": { + "TagID": "17" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + } + }, + "mockResponse": { + "status": 204, + "body": {} + } + }] +} diff --git a/adapters/colossus/colossustest/supplemental/status-404.json b/adapters/colossus/colossustest/supplemental/status-404.json new file mode 100644 index 00000000000..938b6d78248 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/status-404.json @@ -0,0 +1,85 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "100000000", + "ext": { + "bidder": { + "TagID": "100000000" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + }, + "httpCalls": [{ + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "100000000", + "ext": { + "bidder": { + "TagID": "100000000" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + } + }, + "mockResponse": { + "status": 404, + "body": {} + } + }], + "expectedMakeBidsErrors": [ + { + "value": "Unexpected status code: 404. Run with request.debug = 1 for more info", + "comparison": "literal" + } + ] +} diff --git a/adapters/colossus/params_test.go b/adapters/colossus/params_test.go new file mode 100644 index 00000000000..2883de2f53e --- /dev/null +++ b/adapters/colossus/params_test.go @@ -0,0 +1,46 @@ +package colossus + +import ( + "encoding/json" + "testing" + + "github.com/prebid/prebid-server/openrtb_ext" +) + +// TestValidParams makes sure that the colossus schema accepts all imp.ext fields which we intend to support. +func TestValidParams(t *testing.T) { + validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params") + if err != nil { + t.Fatalf("Failed to fetch the json-schemas. %v", err) + } + + for _, validParam := range validParams { + if err := validator.Validate(openrtb_ext.BidderColossus, json.RawMessage(validParam)); err != nil { + t.Errorf("Schema rejected colossus params: %s", validParam) + } + } +} + +// TestInvalidParams makes sure that the colossus schema rejects all the imp.ext fields we don't support. +func TestInvalidParams(t *testing.T) { + validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params") + if err != nil { + t.Fatalf("Failed to fetch the json-schemas. %v", err) + } + + for _, invalidParam := range invalidParams { + if err := validator.Validate(openrtb_ext.BidderColossus, json.RawMessage(invalidParam)); err == nil { + t.Errorf("Schema allowed unexpected params: %s", invalidParam) + } + } +} + +var validParams = []string{ + `{"TagID": "61317"}`, +} + +var invalidParams = []string{ + `{"id": "123"}`, + `{"tagid": "123"}`, + `{"TagID": 16}`, +} diff --git a/adapters/colossus/usersync.go b/adapters/colossus/usersync.go new file mode 100644 index 00000000000..a4e82ee3bde --- /dev/null +++ b/adapters/colossus/usersync.go @@ -0,0 +1,13 @@ +package colossus + +import ( + "text/template" + + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/usersync" +) + +// NewColossusSyncer returns colossus syncer +func NewColossusSyncer(temp *template.Template) usersync.Usersyncer { + return adapters.NewSyncer("colossus", 0, temp, adapters.SyncTypeRedirect) +} diff --git a/adapters/colossus/usersync_test.go b/adapters/colossus/usersync_test.go new file mode 100644 index 00000000000..c4703fdd4ac --- /dev/null +++ b/adapters/colossus/usersync_test.go @@ -0,0 +1,35 @@ +package colossus + +import ( + "testing" + "text/template" + + "github.com/prebid/prebid-server/privacy" + "github.com/prebid/prebid-server/privacy/ccpa" + "github.com/prebid/prebid-server/privacy/gdpr" + "github.com/stretchr/testify/assert" +) + +func TestColossusSyncer(t *testing.T) { + syncURL := "https://sync.colossusssp.com/pbs.gif?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D" + syncURLTemplate := template.Must( + template.New("sync-template").Parse(syncURL), + ) + + syncer := NewColossusSyncer(syncURLTemplate) + syncInfo, err := syncer.GetUsersyncInfo(privacy.Policies{ + GDPR: gdpr.Policy{ + Signal: "0", + Consent: "ANDFJDS", + }, + CCPA: ccpa.Policy{ + Value: "1-YY", + }, + }) + + assert.NoError(t, err) + assert.Equal(t, "https://sync.example.com/pbs.gif?gdpr=0&gdpr_consent=ANDFJDS&us_privacy=1-YY&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D", syncInfo.URL) + assert.Equal(t, "redirect", syncInfo.Type) + assert.EqualValues(t, 0, syncer.GDPRVendorID()) + assert.Equal(t, false, syncInfo.SupportCORS) +} From 9107bd9b848c8f78f29f0dfb0f5dac9e8e4b32c8 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 14:48:19 +0300 Subject: [PATCH 02/27] initial --- config/config.go | 2 ++ exchange/adapter_map.go | 2 ++ openrtb_ext/bidders.go | 2 ++ openrtb_ext/imp_colossus.go | 6 ++++++ static/bidder-info/colossus.yaml | 11 +++++++++++ static/bidder-params/colossus.json | 15 +++++++++++++++ usersync/usersyncers/syncer.go | 2 ++ 7 files changed, 40 insertions(+) create mode 100644 openrtb_ext/imp_colossus.go create mode 100644 static/bidder-info/colossus.yaml create mode 100644 static/bidder-params/colossus.json diff --git a/config/config.go b/config/config.go index 23cc35719db..bd2623e7771 100755 --- a/config/config.go +++ b/config/config.go @@ -662,6 +662,7 @@ func (cfg *Configuration) setDerivedDefaults() { setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBeachfront, "https://sync.bfmio.com/sync_s2s?gdpr={{.GDPR}}&us_privacy={{.USPrivacy}}&url="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbeachfront%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%5Bio_cid%5D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBeintoo, "https://ib.beintoo.com/um?ssp=pbs&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbeintoo%26uid%3D%24UID") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBrightroll, "https://pr-bh.ybp.yahoo.com/sync/appnexusprebidserver/?gdpr={{.GDPR}}&euconsent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&url="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbrightroll%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") + setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderColossus, "https://sync.colossusssp.com/pbs.gif?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dadman%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%5BUID%5D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderConsumable, "https://e.serverbid.com/udb/9969/match?gdpr={{.GDPR}}&euconsent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dconsumable%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderConversant, "https://prebid-match.dotomi.com/match/bounce/current?version=1&networkId=72582&rurl="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dconversant%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderCpmstar, "https://server.cpmstar.com/usersync.aspx?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dcpmstar%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") @@ -876,6 +877,7 @@ func SetupViper(v *viper.Viper, filename string) { v.SetDefault("adapters.beachfront.extra_info", "{\"video_endpoint\":\"https://reachms.bfmio.com/bid.json?exchange_id\"}") v.SetDefault("adapters.beintoo.endpoint", "https://ib.beintoo.com/um") v.SetDefault("adapters.brightroll.endpoint", "http://east-bid.ybp.yahoo.com/bid/appnexuspbs") + v.SetDefault("adapters.colossus.endpoint", "http://colossusssp.com/?c=o&m=rtb") v.SetDefault("adapters.consumable.endpoint", "https://e.serverbid.com/api/v2") v.SetDefault("adapters.conversant.endpoint", "http://api.hb.ad.cpe.dotomi.com/cvx/server/hb/ortb/25") v.SetDefault("adapters.cpmstar.endpoint", "https://server.cpmstar.com/openrtbbidrq.aspx") diff --git a/exchange/adapter_map.go b/exchange/adapter_map.go index d056de664b7..f3e3621859a 100755 --- a/exchange/adapter_map.go +++ b/exchange/adapter_map.go @@ -31,6 +31,7 @@ import ( "github.com/prebid/prebid-server/adapters/beachfront" "github.com/prebid/prebid-server/adapters/beintoo" "github.com/prebid/prebid-server/adapters/brightroll" + "github.com/prebid/prebid-server/adapters/colossus" "github.com/prebid/prebid-server/adapters/consumable" "github.com/prebid/prebid-server/adapters/conversant" "github.com/prebid/prebid-server/adapters/cpmstar" @@ -118,6 +119,7 @@ func newAdapterMap(client *http.Client, cfg *config.Configuration, infos adapter openrtb_ext.BidderBeachfront: beachfront.NewBeachfrontBidder(cfg.Adapters[string(openrtb_ext.BidderBeachfront)].Endpoint, cfg.Adapters[string(openrtb_ext.BidderBeachfront)].ExtraAdapterInfo), openrtb_ext.BidderBeintoo: beintoo.NewBeintooBidder(cfg.Adapters[string(openrtb_ext.BidderBeintoo)].Endpoint), openrtb_ext.BidderBrightroll: brightroll.NewBrightrollBidder(cfg.Adapters[string(openrtb_ext.BidderBrightroll)].Endpoint), + openrtb_ext.BidderColossus: colossus.NewColossusBidder(cfg.Adapters[string(openrtb_ext.BidderColossus)].Endpoint), openrtb_ext.BidderConsumable: consumable.NewConsumableBidder(cfg.Adapters[string(openrtb_ext.BidderConsumable)].Endpoint), openrtb_ext.BidderCpmstar: cpmstar.NewCpmstarBidder(cfg.Adapters[string(openrtb_ext.BidderCpmstar)].Endpoint), openrtb_ext.BidderDatablocks: datablocks.NewDatablocksBidder(cfg.Adapters[string(openrtb_ext.BidderDatablocks)].Endpoint), diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go index 761f53d441e..185823b87f7 100755 --- a/openrtb_ext/bidders.go +++ b/openrtb_ext/bidders.go @@ -46,6 +46,7 @@ const ( BidderBeachfront BidderName = "beachfront" BidderBeintoo BidderName = "beintoo" BidderBrightroll BidderName = "brightroll" + BIdderColossus BidderName = "colossus" BidderConsumable BidderName = "consumable" BidderConversant BidderName = "conversant" BidderCpmstar BidderName = "cpmstar" @@ -130,6 +131,7 @@ var BidderMap = map[string]BidderName{ "beachfront": BidderBeachfront, "beintoo": BidderBeintoo, "brightroll": BidderBrightroll, + "colossus": BIdderColossus, "consumable": BidderConsumable, "conversant": BidderConversant, "cpmstar": BidderCpmstar, diff --git a/openrtb_ext/imp_colossus.go b/openrtb_ext/imp_colossus.go new file mode 100644 index 00000000000..8969000558d --- /dev/null +++ b/openrtb_ext/imp_colossus.go @@ -0,0 +1,6 @@ +package openrtb_ext + +// ExtImpColossus defines colossus specifiec param +type ExtImpColossus struct { + TagID string `json:"TagID"` +} diff --git a/static/bidder-info/colossus.yaml b/static/bidder-info/colossus.yaml new file mode 100644 index 00000000000..de71d0779f8 --- /dev/null +++ b/static/bidder-info/colossus.yaml @@ -0,0 +1,11 @@ +maintainer: + email: "aigolkin1991@gmail.com" +capabilities: + app: + mediaTypes: + - banner + - video + site: + mediaTypes: + - banner + - video \ No newline at end of file diff --git a/static/bidder-params/colossus.json b/static/bidder-params/colossus.json new file mode 100644 index 00000000000..10e7a9e3b38 --- /dev/null +++ b/static/bidder-params/colossus.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Colossus Adapter Params", + "description": "A schema which validates params accepted by the Colossus adapter", + + "type": "object", + "properties": { + "TagID": { + "type": "string", + "description": "An ID which identifies the colossus ad tag" + } + }, + "required" : [ "TagID" ] + } + \ No newline at end of file diff --git a/usersync/usersyncers/syncer.go b/usersync/usersyncers/syncer.go index 89540ea205b..c6ae984efc9 100755 --- a/usersync/usersyncers/syncer.go +++ b/usersync/usersyncers/syncer.go @@ -23,6 +23,7 @@ import ( "github.com/prebid/prebid-server/adapters/beachfront" "github.com/prebid/prebid-server/adapters/beintoo" "github.com/prebid/prebid-server/adapters/brightroll" + "github.com/prebid/prebid-server/adapters/colossus" "github.com/prebid/prebid-server/adapters/consumable" "github.com/prebid/prebid-server/adapters/conversant" "github.com/prebid/prebid-server/adapters/cpmstar" @@ -99,6 +100,7 @@ func NewSyncerMap(cfg *config.Configuration) map[openrtb_ext.BidderName]usersync insertIntoMap(cfg, syncers, openrtb_ext.BidderBeachfront, beachfront.NewBeachfrontSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderBeintoo, beintoo.NewBeintooSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderBrightroll, brightroll.NewBrightrollSyncer) + insertIntoMap(cfg, syncers, openrtb_ext.BidderColossus, colossus.NewColossusSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderConsumable, consumable.NewConsumableSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderConversant, conversant.NewConversantSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderCpmstar, cpmstar.NewCpmstarSyncer) From 1618e5d61be6ea1843227d8c4a150a3edb4d1440 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 14:50:29 +0300 Subject: [PATCH 03/27] initial --- openrtb_ext/bidders.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go index 185823b87f7..2e339732a8a 100755 --- a/openrtb_ext/bidders.go +++ b/openrtb_ext/bidders.go @@ -46,7 +46,7 @@ const ( BidderBeachfront BidderName = "beachfront" BidderBeintoo BidderName = "beintoo" BidderBrightroll BidderName = "brightroll" - BIdderColossus BidderName = "colossus" + BidderColossus BidderName = "colossus" BidderConsumable BidderName = "consumable" BidderConversant BidderName = "conversant" BidderCpmstar BidderName = "cpmstar" From 66400b25966474c0a14c0e99b1c29b1dfe553450 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 14:51:02 +0300 Subject: [PATCH 04/27] initial --- openrtb_ext/bidders.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go index 2e339732a8a..ad9e1b3511a 100755 --- a/openrtb_ext/bidders.go +++ b/openrtb_ext/bidders.go @@ -131,7 +131,7 @@ var BidderMap = map[string]BidderName{ "beachfront": BidderBeachfront, "beintoo": BidderBeintoo, "brightroll": BidderBrightroll, - "colossus": BIdderColossus, + "colossus": BidderColossus, "consumable": BidderConsumable, "conversant": BidderConversant, "cpmstar": BidderCpmstar, From 8e0ff873bde41c774a4c3cf02941d4660846af26 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 14:59:18 +0300 Subject: [PATCH 05/27] initial --- adapters/colossus/colossustest/supplemental/bad-imp-ext.json | 2 +- adapters/colossus/colossustest/supplemental/no-imp-ext-1.json | 2 +- adapters/colossus/colossustest/supplemental/no-imp-ext-2.json | 2 +- adapters/colossus/usersync_test.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/adapters/colossus/colossustest/supplemental/bad-imp-ext.json b/adapters/colossus/colossustest/supplemental/bad-imp-ext.json index 1ddce56b477..13656337e5e 100644 --- a/adapters/colossus/colossustest/supplemental/bad-imp-ext.json +++ b/adapters/colossus/colossustest/supplemental/bad-imp-ext.json @@ -35,7 +35,7 @@ }, "expectedMakeRequestsErrors": [ { - "value": "unexpected end of JSON input", + "value": "Key path not found", "comparison": "literal" } ] diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json b/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json index 3ee4209c919..362a8fa4df8 100644 --- a/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json +++ b/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json @@ -31,7 +31,7 @@ }, "expectedMakeRequestsErrors": [ { - "value": "json: cannot unmarshal string into Go value of type adapters.ExtImpBidder", + "value": "Key path not found", "comparison": "literal" } ] diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json b/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json index 3c5d010c9f2..e9c1f257aba 100644 --- a/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json +++ b/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json @@ -31,7 +31,7 @@ }, "expectedMakeRequestsErrors": [ { - "value": "unexpected end of JSON input", + "value": "Key path not found", "comparison": "literal" } ] diff --git a/adapters/colossus/usersync_test.go b/adapters/colossus/usersync_test.go index c4703fdd4ac..e34b7e5de3c 100644 --- a/adapters/colossus/usersync_test.go +++ b/adapters/colossus/usersync_test.go @@ -28,7 +28,7 @@ func TestColossusSyncer(t *testing.T) { }) assert.NoError(t, err) - assert.Equal(t, "https://sync.example.com/pbs.gif?gdpr=0&gdpr_consent=ANDFJDS&us_privacy=1-YY&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D", syncInfo.URL) + assert.Equal(t, "https://sync.colossusssp.com/pbs.gif?gdpr=0&gdpr_consent=ANDFJDS&us_privacy=1-YY&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D", syncInfo.URL) assert.Equal(t, "redirect", syncInfo.Type) assert.EqualValues(t, 0, syncer.GDPRVendorID()) assert.Equal(t, false, syncInfo.SupportCORS) From c6a7e6959f750256a3b0a40acd322d73c6338d61 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 15:41:04 +0300 Subject: [PATCH 06/27] initial --- usersync/usersyncers/syncer_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/usersync/usersyncers/syncer_test.go b/usersync/usersyncers/syncer_test.go index 9197ed9507d..2cf0b2513c5 100755 --- a/usersync/usersyncers/syncer_test.go +++ b/usersync/usersyncers/syncer_test.go @@ -31,6 +31,7 @@ func TestNewSyncerMap(t *testing.T) { string(openrtb_ext.BidderBeachfront): syncConfig, string(openrtb_ext.BidderBeintoo): syncConfig, string(openrtb_ext.BidderBrightroll): syncConfig, + string(openrtb_ext.BidderColossus): syncConfig, string(openrtb_ext.BidderConsumable): syncConfig, string(openrtb_ext.BidderConversant): syncConfig, string(openrtb_ext.BidderCpmstar): syncConfig, From 4a2af7659552e1e21703d32f602699d899a878b7 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 16:26:55 +0300 Subject: [PATCH 07/27] initial --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index bd2623e7771..97997e11143 100755 --- a/config/config.go +++ b/config/config.go @@ -662,7 +662,7 @@ func (cfg *Configuration) setDerivedDefaults() { setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBeachfront, "https://sync.bfmio.com/sync_s2s?gdpr={{.GDPR}}&us_privacy={{.USPrivacy}}&url="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbeachfront%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%5Bio_cid%5D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBeintoo, "https://ib.beintoo.com/um?ssp=pbs&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbeintoo%26uid%3D%24UID") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBrightroll, "https://pr-bh.ybp.yahoo.com/sync/appnexusprebidserver/?gdpr={{.GDPR}}&euconsent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&url="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbrightroll%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") - setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderColossus, "https://sync.colossusssp.com/pbs.gif?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dadman%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%5BUID%5D") + setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderColossus, "https://sync.colossusssp.com/pbs.gif?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dcolossus%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%5BUID%5D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderConsumable, "https://e.serverbid.com/udb/9969/match?gdpr={{.GDPR}}&euconsent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dconsumable%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderConversant, "https://prebid-match.dotomi.com/match/bounce/current?version=1&networkId=72582&rurl="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dconversant%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderCpmstar, "https://server.cpmstar.com/usersync.aspx?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dcpmstar%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") From 82525ebdddc189d2c8dafb3118a8020c12c1cadc Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Mon, 7 Sep 2020 12:13:29 +0300 Subject: [PATCH 08/27] minor fixes --- adapters/colossus/colossus.go | 1 - adapters/colossus/colossus_test.go | 2 +- .../colossustest/exemplary/simple-banner.json | 2 +- .../colossustest/exemplary/simple-video.json | 2 +- .../exemplary/simple-web-banner.json | 2 +- .../supplemental/bad_response.json | 2 +- .../supplemental/bad_status_code.json | 23 +++++++++++++++++++ .../{no-imp-ext-2.json => empty_imp_ext.json} | 0 .../colossustest/supplemental/status-204.json | 2 +- .../colossustest/supplemental/status-404.json | 2 +- ...{no-imp-ext-1.json => string_imp_ext.json} | 0 adapters/colossus/usersync_test.go | 4 ++-- static/bidder-info/colossus.yaml | 2 +- 13 files changed, 33 insertions(+), 11 deletions(-) create mode 100644 adapters/colossus/colossustest/supplemental/bad_status_code.json rename adapters/colossus/colossustest/supplemental/{no-imp-ext-2.json => empty_imp_ext.json} (100%) rename adapters/colossus/colossustest/supplemental/{no-imp-ext-1.json => string_imp_ext.json} (100%) diff --git a/adapters/colossus/colossus.go b/adapters/colossus/colossus.go index 2576bd240ec..89cd49d2881 100644 --- a/adapters/colossus/colossus.go +++ b/adapters/colossus/colossus.go @@ -12,7 +12,6 @@ import ( "github.com/prebid/prebid-server/openrtb_ext" ) -// ColossusAdapter struct type ColossusAdapter struct { URI string } diff --git a/adapters/colossus/colossus_test.go b/adapters/colossus/colossus_test.go index 027fc06af1f..f4fd12f3fab 100644 --- a/adapters/colossus/colossus_test.go +++ b/adapters/colossus/colossus_test.go @@ -7,6 +7,6 @@ import ( ) func TestJsonSamples(t *testing.T) { - colossusAdapter := NewColossusBidder("http://colossusssp.com/?c=o&m=rtb") + colossusAdapter := NewColossusBidder("http://example.com/?c=o&m=rtb") adapterstest.RunJSONBidderTest(t, "colossustest", colossusAdapter) } diff --git a/adapters/colossus/colossustest/exemplary/simple-banner.json b/adapters/colossus/colossustest/exemplary/simple-banner.json index d239bf177b0..85e978c8438 100644 --- a/adapters/colossus/colossustest/exemplary/simple-banner.json +++ b/adapters/colossus/colossustest/exemplary/simple-banner.json @@ -37,7 +37,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://colossusssp.com/?c=o&m=rtb", + "uri": "http://example.com/?c=o&m=rtb", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/exemplary/simple-video.json b/adapters/colossus/colossustest/exemplary/simple-video.json index 503567571e7..78516fcef31 100644 --- a/adapters/colossus/colossustest/exemplary/simple-video.json +++ b/adapters/colossus/colossustest/exemplary/simple-video.json @@ -30,7 +30,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://colossusssp.com/?c=o&m=rtb", + "uri": "http://example.com/?c=o&m=rtb", "body": { "id": "test-request-id", "device": { diff --git a/adapters/colossus/colossustest/exemplary/simple-web-banner.json b/adapters/colossus/colossustest/exemplary/simple-web-banner.json index 818b24885b2..37baf3d97dd 100644 --- a/adapters/colossus/colossustest/exemplary/simple-web-banner.json +++ b/adapters/colossus/colossustest/exemplary/simple-web-banner.json @@ -36,7 +36,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://colossusssp.com/?c=o&m=rtb", + "uri": "http://example.com/?c=o&m=rtb", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/supplemental/bad_response.json b/adapters/colossus/colossustest/supplemental/bad_response.json index 42a6d04942a..c69b00c8e6e 100644 --- a/adapters/colossus/colossustest/supplemental/bad_response.json +++ b/adapters/colossus/colossustest/supplemental/bad_response.json @@ -35,7 +35,7 @@ }, "httpCalls": [{ "expectedRequest": { - "uri": "http://colossusssp.com/?c=o&m=rtb", + "uri": "http://example.com/?c=o&m=rtb", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/supplemental/bad_status_code.json b/adapters/colossus/colossustest/supplemental/bad_status_code.json new file mode 100644 index 00000000000..7d74c5f163c --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/bad_status_code.json @@ -0,0 +1,23 @@ +{ + "mockBidRequest": { + "id": "test-request-id" + }, + "httpCalls": [{ + "expectedRequest": { + "uri": "http://example.com/?c=o&m=rtb", + "body": { + "id": "test-request-id" + } + }, + "mockResponse": { + "status": 400, + "body": {} + } + }], + "expectedMakeBidsErrors": [ + { + "value": "Unexpected status code: 400. Run with request.debug = 1 for more info", + "comparison": "literal" + } + ] +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json b/adapters/colossus/colossustest/supplemental/empty_imp_ext.json similarity index 100% rename from adapters/colossus/colossustest/supplemental/no-imp-ext-2.json rename to adapters/colossus/colossustest/supplemental/empty_imp_ext.json diff --git a/adapters/colossus/colossustest/supplemental/status-204.json b/adapters/colossus/colossustest/supplemental/status-204.json index fd9e6b382e2..70438bff733 100644 --- a/adapters/colossus/colossustest/supplemental/status-204.json +++ b/adapters/colossus/colossustest/supplemental/status-204.json @@ -35,7 +35,7 @@ }, "httpCalls": [{ "expectedRequest": { - "uri": "http://colossusssp.com/?c=o&m=rtb", + "uri": "http://example.com/?c=o&m=rtb", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/supplemental/status-404.json b/adapters/colossus/colossustest/supplemental/status-404.json index 938b6d78248..e3571f0c7b3 100644 --- a/adapters/colossus/colossustest/supplemental/status-404.json +++ b/adapters/colossus/colossustest/supplemental/status-404.json @@ -35,7 +35,7 @@ }, "httpCalls": [{ "expectedRequest": { - "uri": "http://colossusssp.com/?c=o&m=rtb", + "uri": "http://example.com/?c=o&m=rtb", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json b/adapters/colossus/colossustest/supplemental/string_imp_ext.json similarity index 100% rename from adapters/colossus/colossustest/supplemental/no-imp-ext-1.json rename to adapters/colossus/colossustest/supplemental/string_imp_ext.json diff --git a/adapters/colossus/usersync_test.go b/adapters/colossus/usersync_test.go index e34b7e5de3c..79d5483d528 100644 --- a/adapters/colossus/usersync_test.go +++ b/adapters/colossus/usersync_test.go @@ -20,7 +20,7 @@ func TestColossusSyncer(t *testing.T) { syncInfo, err := syncer.GetUsersyncInfo(privacy.Policies{ GDPR: gdpr.Policy{ Signal: "0", - Consent: "ANDFJDS", + Consent: "A", }, CCPA: ccpa.Policy{ Value: "1-YY", @@ -28,7 +28,7 @@ func TestColossusSyncer(t *testing.T) { }) assert.NoError(t, err) - assert.Equal(t, "https://sync.colossusssp.com/pbs.gif?gdpr=0&gdpr_consent=ANDFJDS&us_privacy=1-YY&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D", syncInfo.URL) + assert.Equal(t, "https://sync.colossusssp.com/pbs.gif?gdpr=0&gdpr_consent=A&us_privacy=1-YY&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D", syncInfo.URL) assert.Equal(t, "redirect", syncInfo.Type) assert.EqualValues(t, 0, syncer.GDPRVendorID()) assert.Equal(t, false, syncInfo.SupportCORS) diff --git a/static/bidder-info/colossus.yaml b/static/bidder-info/colossus.yaml index de71d0779f8..76b61c951c5 100644 --- a/static/bidder-info/colossus.yaml +++ b/static/bidder-info/colossus.yaml @@ -1,5 +1,5 @@ maintainer: - email: "aigolkin1991@gmail.com" + email: "huddled.masses1650@gmail.com" capabilities: app: mediaTypes: From 5a3bfcb5c197b914c1e6b7ff0b6c80047774578a Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Mon, 7 Sep 2020 12:16:37 +0300 Subject: [PATCH 09/27] minor fixes --- .../supplemental/bad_status_code.json | 60 ++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/adapters/colossus/colossustest/supplemental/bad_status_code.json b/adapters/colossus/colossustest/supplemental/bad_status_code.json index 7d74c5f163c..28461f56040 100644 --- a/adapters/colossus/colossustest/supplemental/bad_status_code.json +++ b/adapters/colossus/colossustest/supplemental/bad_status_code.json @@ -1,12 +1,68 @@ { "mockBidRequest": { - "id": "test-request-id" + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "100000000", + "ext": { + "bidder": { + "TagID": "100000000" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": {} }, "httpCalls": [{ "expectedRequest": { "uri": "http://example.com/?c=o&m=rtb", "body": { - "id": "test-request-id" + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "100000000", + "ext": { + "bidder": { + "TagID": "100000000" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": {} } }, "mockResponse": { From 3341399db47f9bd4d7c5af8bc6fc751681206895 Mon Sep 17 00:00:00 2001 From: Bill Newman Date: Tue, 8 Sep 2020 10:33:31 +0300 Subject: [PATCH 10/27] Add new line --- .../colossus/colossustest/supplemental/bad_status_code.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapters/colossus/colossustest/supplemental/bad_status_code.json b/adapters/colossus/colossustest/supplemental/bad_status_code.json index 28461f56040..f5b6a5748af 100644 --- a/adapters/colossus/colossustest/supplemental/bad_status_code.json +++ b/adapters/colossus/colossustest/supplemental/bad_status_code.json @@ -76,4 +76,4 @@ "comparison": "literal" } ] -} \ No newline at end of file +} From 833b500ff6f7f47442876b327dc9e79e6f0d86ac Mon Sep 17 00:00:00 2001 From: Bill Newman Date: Tue, 8 Sep 2020 10:34:39 +0300 Subject: [PATCH 11/27] new line --- adapters/colossus/colossustest/params/video.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapters/colossus/colossustest/params/video.json b/adapters/colossus/colossustest/params/video.json index a334715e00e..56f865c71d9 100644 --- a/adapters/colossus/colossustest/params/video.json +++ b/adapters/colossus/colossustest/params/video.json @@ -1,3 +1,3 @@ { "TagID": "61318" -} \ No newline at end of file +} From b2dd81950a4752c707478ba608ddad01b3ad8540 Mon Sep 17 00:00:00 2001 From: Bill Newman Date: Tue, 8 Sep 2020 10:34:47 +0300 Subject: [PATCH 12/27] new line --- adapters/colossus/colossustest/params/race/video.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapters/colossus/colossustest/params/race/video.json b/adapters/colossus/colossustest/params/race/video.json index a334715e00e..56f865c71d9 100644 --- a/adapters/colossus/colossustest/params/race/video.json +++ b/adapters/colossus/colossustest/params/race/video.json @@ -1,3 +1,3 @@ { "TagID": "61318" -} \ No newline at end of file +} From 6e5011270bbf3db31b9934d9d5d79b2382911597 Mon Sep 17 00:00:00 2001 From: Bill Newman Date: Tue, 8 Sep 2020 10:34:55 +0300 Subject: [PATCH 13/27] new line --- adapters/colossus/colossustest/params/race/banner.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapters/colossus/colossustest/params/race/banner.json b/adapters/colossus/colossustest/params/race/banner.json index 1cd30e98ef8..7c2643d4901 100644 --- a/adapters/colossus/colossustest/params/race/banner.json +++ b/adapters/colossus/colossustest/params/race/banner.json @@ -1,3 +1,3 @@ { "TagID": "61317" -} \ No newline at end of file +} From 3733b9ffc1440fbbcdedb896f9e89af0b999035c Mon Sep 17 00:00:00 2001 From: Bill Newman Date: Tue, 8 Sep 2020 10:35:04 +0300 Subject: [PATCH 14/27] new line --- adapters/colossus/colossustest/params/banner.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adapters/colossus/colossustest/params/banner.json b/adapters/colossus/colossustest/params/banner.json index 1cd30e98ef8..7c2643d4901 100644 --- a/adapters/colossus/colossustest/params/banner.json +++ b/adapters/colossus/colossustest/params/banner.json @@ -1,3 +1,3 @@ { "TagID": "61317" -} \ No newline at end of file +} From 5688b6e03a3d8b343675591f625eac1cbf1def3e Mon Sep 17 00:00:00 2001 From: Bill Newman Date: Tue, 8 Sep 2020 10:35:47 +0300 Subject: [PATCH 15/27] new line --- static/bidder-info/colossus.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/static/bidder-info/colossus.yaml b/static/bidder-info/colossus.yaml index 76b61c951c5..404dc856908 100644 --- a/static/bidder-info/colossus.yaml +++ b/static/bidder-info/colossus.yaml @@ -8,4 +8,5 @@ capabilities: site: mediaTypes: - banner - - video \ No newline at end of file + - video + From 0d427624a890343a3da42fd24912335ac1850e0f Mon Sep 17 00:00:00 2001 From: Bill Newman Date: Thu, 10 Sep 2020 11:52:26 +0300 Subject: [PATCH 16/27] Add support@huddledmasses.com emaail --- static/bidder-info/colossus.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/bidder-info/colossus.yaml b/static/bidder-info/colossus.yaml index 404dc856908..4d80661f887 100644 --- a/static/bidder-info/colossus.yaml +++ b/static/bidder-info/colossus.yaml @@ -1,5 +1,5 @@ maintainer: - email: "huddled.masses1650@gmail.com" + email: "support@huddledmasses.com" capabilities: app: mediaTypes: From 66370f67698a4dc103f57a2275e78b2c2e9d59cb Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 10 Sep 2020 17:31:27 +0300 Subject: [PATCH 17/27] bid response currency check --- adapters/colossus/colossustest/exemplary/simple-banner.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/adapters/colossus/colossustest/exemplary/simple-banner.json b/adapters/colossus/colossustest/exemplary/simple-banner.json index 85e978c8438..1adc7010ed8 100644 --- a/adapters/colossus/colossustest/exemplary/simple-banner.json +++ b/adapters/colossus/colossustest/exemplary/simple-banner.json @@ -96,11 +96,9 @@ } } } - ], - "seat": "colossus" + ] } - ], - "cur": "USD" + ] } } } From 908477b1de1e44a5067dcd75f6bd7c133d3531b8 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 10 Sep 2020 17:41:14 +0300 Subject: [PATCH 18/27] indent --- .../colossus/colossustest/supplemental/empty_imp_ext.json | 3 +-- .../colossus/colossustest/supplemental/status-204.json | 6 +++--- .../colossus/colossustest/supplemental/status-404.json | 8 ++++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/adapters/colossus/colossustest/supplemental/empty_imp_ext.json b/adapters/colossus/colossustest/supplemental/empty_imp_ext.json index e9c1f257aba..00e1cf60fb7 100644 --- a/adapters/colossus/colossustest/supplemental/empty_imp_ext.json +++ b/adapters/colossus/colossustest/supplemental/empty_imp_ext.json @@ -35,5 +35,4 @@ "comparison": "literal" } ] - } - \ No newline at end of file +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/supplemental/status-204.json b/adapters/colossus/colossustest/supplemental/status-204.json index 70438bff733..73f8bc71f23 100644 --- a/adapters/colossus/colossustest/supplemental/status-204.json +++ b/adapters/colossus/colossustest/supplemental/status-204.json @@ -33,9 +33,9 @@ "ifa": "sdjfksdf-dfsds-dsdg-dsgg" } }, - "httpCalls": [{ - "expectedRequest": { - "uri": "http://example.com/?c=o&m=rtb", + "httpCalls": [{ + "expectedRequest": { + "uri": "http://example.com/?c=o&m=rtb", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/supplemental/status-404.json b/adapters/colossus/colossustest/supplemental/status-404.json index e3571f0c7b3..676eb8bb2f4 100644 --- a/adapters/colossus/colossustest/supplemental/status-404.json +++ b/adapters/colossus/colossustest/supplemental/status-404.json @@ -33,10 +33,10 @@ "ifa": "sdjfksdf-dfsds-dsdg-dsgg" } }, - "httpCalls": [{ - "expectedRequest": { - "uri": "http://example.com/?c=o&m=rtb", - "body": { + "httpCalls": [{ + "expectedRequest": { + "uri": "http://example.com/?c=o&m=rtb", + "body": { "id": "test-request-id", "imp": [ { From 0eeee03ef0bfce7c6dee1b083305b44ec4cdea14 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Fri, 11 Sep 2020 12:26:34 +0300 Subject: [PATCH 19/27] revert britroll --- adapters/brightroll/brightroll.go | 81 ++++--------------- adapters/brightroll/brightroll_test.go | 28 +------ .../exemplary/banner-native-audio.json | 23 ++---- .../exemplary/banner-video-native.json | 28 ++----- .../exemplary/banner-video.json | 24 ++---- .../exemplary/simple-banner.json | 15 +--- .../exemplary/simple-video.json | 15 +--- .../exemplary/valid-extension.json | 15 +--- .../exemplary/video-and-audio.json | 19 ++--- .../brightrolltest/params/race/banner.json | 2 +- .../brightrolltest/params/race/video.json | 2 +- .../supplemental/invalid-imp.json | 2 +- .../supplemental/invalid-publisher.json | 34 -------- 13 files changed, 53 insertions(+), 235 deletions(-) delete mode 100644 adapters/brightroll/brightrolltest/supplemental/invalid-publisher.json diff --git a/adapters/brightroll/brightroll.go b/adapters/brightroll/brightroll.go index 83b253a0996..0ae95dd303a 100644 --- a/adapters/brightroll/brightroll.go +++ b/adapters/brightroll/brightroll.go @@ -6,7 +6,6 @@ import ( "net/http" "strconv" - "github.com/golang/glog" "github.com/mxmCherry/openrtb" "github.com/prebid/prebid-server/adapters" "github.com/prebid/prebid-server/errortypes" @@ -14,20 +13,7 @@ import ( ) type BrightrollAdapter struct { - URI string - extraInfo ExtraInfo -} - -type ExtraInfo struct { - Accounts []Account `json:"accounts"` -} - -type Account struct { - ID string `json:"id"` - Badv []string `json:"badv"` - Bcat []string `json:"bcat"` - Battr []int8 `json:"battr"` - BidFloor float64 `json:"bidfloor"` + URI string } func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { @@ -69,23 +55,6 @@ func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo errors = append(errors, err) return nil, errors } - - var account *Account - for _, a := range a.extraInfo.Accounts { - if a.ID == brightrollExt.Publisher { - account = &a - break - } - } - - if account == nil { - err = &errortypes.BadInput{ - Message: "Invalid publisher", - } - errors = append(errors, err) - return nil, errors - } - validImpExists := false for i := 0; i < len(request.Imp); i++ { //Brightroll supports only banner and video impressions as of now @@ -96,9 +65,9 @@ func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo bannerCopy.W = &(firstFormat.W) bannerCopy.H = &(firstFormat.H) } + if brightrollExt.Publisher == "adthrive" { + bannerCopy.BAttr = getBlockedCreativetypesForAdThrive() - if len(account.Battr) > 0 { - bannerCopy.BAttr = getBlockedCreativetypes(account.Battr) } request.Imp[i].Banner = &bannerCopy validImpExists = true @@ -106,15 +75,10 @@ func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo validImpExists = true if brightrollExt.Publisher == "adthrive" { videoCopy := *request.Imp[i].Video - if len(account.Battr) > 0 { - videoCopy.BAttr = getBlockedCreativetypes(account.Battr) - } + videoCopy.BAttr = getBlockedCreativetypesForAdThrive() request.Imp[i].Video = &videoCopy } } - if validImpExists && request.Imp[i].BidFloor == 0 && account.BidFloor > 0 { - request.Imp[i].BidFloor = account.BidFloor - } } if !validImpExists { err := &errortypes.BadInput{ @@ -126,12 +90,8 @@ func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo request.AT = 1 //Defaulting to first price auction for all prebid requests - if len(account.Bcat) > 0 { - request.BCat = account.Bcat - } - - if len(account.Badv) > 0 { - request.BAdv = account.Badv + if brightrollExt.Publisher == "adthrive" { + request.BCat = getBlockedCategoriesForAdthrive() } reqJSON, err := json.Marshal(request) if err != nil { @@ -199,12 +159,13 @@ func (a *BrightrollAdapter) MakeBids(internalRequest *openrtb.BidRequest, extern return bidResponse, nil } -func getBlockedCreativetypes(attr []int8) []openrtb.CreativeAttribute { - var creativeAttr []openrtb.CreativeAttribute - for i := 0; i < len(attr); i++ { - creativeAttr = append(creativeAttr, openrtb.CreativeAttribute(attr[i])) - } - return creativeAttr +//customized request, need following blocked categories +func getBlockedCategoriesForAdthrive() []string { + return []string{"IAB8-5", "IAB8-18", "IAB15-1", "IAB7-30", "IAB14-1", "IAB22-1", "IAB3-7", "IAB7-3", "IAB14-3", "IAB11", "IAB11-1", "IAB11-2", "IAB11-3", "IAB11-4", "IAB11-5", "IAB23", "IAB23-1", "IAB23-2", "IAB23-3", "IAB23-4", "IAB23-5", "IAB23-6", "IAB23-7", "IAB23-8", "IAB23-9", "IAB23-10", "IAB7-39", "IAB9-30", "IAB7-44", "IAB25", "IAB25-1", "IAB25-2", "IAB25-3", "IAB25-4", "IAB25-5", "IAB25-6", "IAB25-7", "IAB26", "IAB26-1", "IAB26-2", "IAB26-3", "IAB26-4"} +} + +func getBlockedCreativetypesForAdThrive() []openrtb.CreativeAttribute { + return []openrtb.CreativeAttribute{openrtb.CreativeAttribute(1), openrtb.CreativeAttribute(2), openrtb.CreativeAttribute(3), openrtb.CreativeAttribute(6), openrtb.CreativeAttribute(9), openrtb.CreativeAttribute(10)} } //Adding header fields to request header @@ -228,18 +189,8 @@ func getMediaTypeForImp(impId string, imps []openrtb.Imp) openrtb_ext.BidType { return mediaType } -func NewBrightrollBidder(endpoint string, extraAdapterInfo string) *BrightrollAdapter { - - var extraInfo ExtraInfo - - if len(extraAdapterInfo) == 0 { - extraAdapterInfo = "{\"accounts\":[]}" - } - err := json.Unmarshal([]byte(extraAdapterInfo), &extraInfo) - - if err != nil { - glog.Fatalf("Invalid Brightroll extra adapter info: " + err.Error()) - return nil +func NewBrightrollBidder(endpoint string) *BrightrollAdapter { + return &BrightrollAdapter{ + URI: endpoint, } - return &BrightrollAdapter{URI: endpoint, extraInfo: extraInfo} } diff --git a/adapters/brightroll/brightroll_test.go b/adapters/brightroll/brightroll_test.go index 5f1c64fd16f..0a6c2c44567 100644 --- a/adapters/brightroll/brightroll_test.go +++ b/adapters/brightroll/brightroll_test.go @@ -1,37 +1,11 @@ package brightroll import ( - "github.com/stretchr/testify/assert" "testing" "github.com/prebid/prebid-server/adapters/adapterstest" ) -func TestEmptyConfig(t *testing.T) { - output := NewBrightrollBidder("http://test-bid.ybp.yahoo.com/bid/appnexuspbs", "") - ex := ExtraInfo{ - Accounts: []Account{}, - } - expected := &BrightrollAdapter{ - URI: "http://test-bid.ybp.yahoo.com/bid/appnexuspbs", - extraInfo: ex, - } - assert.Equal(t, expected, output, "") -} - -func TestNonEmptyConfig(t *testing.T) { - output := NewBrightrollBidder("http://test-bid.ybp.yahoo.com/bid/appnexuspbs", "{\"accounts\": [{\"id\": \"test\",\"bidfloor\":0.1}]}") - ex := ExtraInfo{ - Accounts: []Account{{ID: "test", BidFloor: 0.1}}, - } - - expected := &BrightrollAdapter{ - URI: "http://test-bid.ybp.yahoo.com/bid/appnexuspbs", - extraInfo: ex, - } - assert.Equal(t, expected, output, "") -} - func TestJsonSamples(t *testing.T) { - adapterstest.RunJSONBidderTest(t, "brightrolltest", NewBrightrollBidder("http://test-bid.ybp.yahoo.com/bid/appnexuspbs", "{\"accounts\": [{\"id\": \"adthrive\",\"badv\": [], \"bcat\": [\"IAB8-5\",\"IAB8-18\"],\"battr\": [1,2,3], \"bidfloor\":0.0}]}")) + adapterstest.RunJSONBidderTest(t, "brightrolltest", NewBrightrollBidder("http://test-bid.ybp.yahoo.com/bid/appnexuspbs")) } diff --git a/adapters/brightroll/brightrolltest/exemplary/banner-native-audio.json b/adapters/brightroll/brightrolltest/exemplary/banner-native-audio.json index e67a1485e54..e8ef5b688f6 100644 --- a/adapters/brightroll/brightrolltest/exemplary/banner-native-audio.json +++ b/adapters/brightroll/brightrolltest/exemplary/banner-native-audio.json @@ -18,7 +18,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -30,7 +30,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -43,7 +43,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } @@ -52,23 +52,14 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", "body": { "id": "test-request-id", "at":1, - "bcat": [ - "IAB8-5", - "IAB8-18" - ], "imp": [ { "id": "test-imp-id", "banner": { - "battr": [ - 1, - 2, - 3 - ], "format": [ { "w": 300, @@ -84,7 +75,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -96,7 +87,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -109,7 +100,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/banner-video-native.json b/adapters/brightroll/brightrolltest/exemplary/banner-video-native.json index 0fffbd2fac5..4df7ab5df10 100644 --- a/adapters/brightroll/brightrolltest/exemplary/banner-video-native.json +++ b/adapters/brightroll/brightrolltest/exemplary/banner-video-native.json @@ -18,7 +18,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -30,7 +30,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -44,7 +44,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } @@ -53,23 +53,14 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", "body": { "id": "test-request-id", "at":1, - "bcat": [ - "IAB8-5", - "IAB8-18" - ], "imp": [ { "id": "test-imp-id", "banner": { - "battr": [ - 1, - 2, - 3 - ], "format": [ { "w": 300, @@ -85,7 +76,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -97,18 +88,13 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, { "id": "test-imp-video-id", "video": { - "battr": [ - 1, - 2, - 3 - ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -116,7 +102,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/banner-video.json b/adapters/brightroll/brightrolltest/exemplary/banner-video.json index f58dd9b1395..50053102d08 100644 --- a/adapters/brightroll/brightrolltest/exemplary/banner-video.json +++ b/adapters/brightroll/brightrolltest/exemplary/banner-video.json @@ -18,7 +18,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -32,7 +32,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } @@ -41,23 +41,14 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", "body": { "id": "test-request-id", "at":1, - "bcat": [ - "IAB8-5", - "IAB8-18" - ], "imp": [ { "id": "test-imp-id", "banner": { - "battr": [ - 1, - 2, - 3 - ], "format": [ { "w": 300, @@ -73,18 +64,13 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, { "id": "test-imp-video-id", "video": { - "battr": [ - 1, - 2, - 3 - ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -92,7 +78,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/simple-banner.json b/adapters/brightroll/brightrolltest/exemplary/simple-banner.json index 66bc06cf696..96fa0cbc9f3 100644 --- a/adapters/brightroll/brightrolltest/exemplary/simple-banner.json +++ b/adapters/brightroll/brightrolltest/exemplary/simple-banner.json @@ -18,7 +18,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } @@ -28,23 +28,14 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", "body": { "id": "test-request-id", "at":1, - "bcat": [ - "IAB8-5", - "IAB8-18" - ], "imp": [ { "id": "test-imp-id", "banner": { - "battr": [ - 1, - 2, - 3 - ], "format": [ { "w": 300, @@ -60,7 +51,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/simple-video.json b/adapters/brightroll/brightrolltest/exemplary/simple-video.json index 3f9b809182d..f2466b2fd95 100644 --- a/adapters/brightroll/brightrolltest/exemplary/simple-video.json +++ b/adapters/brightroll/brightrolltest/exemplary/simple-video.json @@ -12,7 +12,7 @@ }, "ext":{ "bidder":{ - "publisher": "adthrive" + "publisher": "cafemom" } } } @@ -22,23 +22,14 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", "body": { "id": "test-request-id", "at":1, - "bcat": [ - "IAB8-5", - "IAB8-18" - ], "imp": [ { "id": "test-imp-id", "video": { - "battr": [ - 1, - 2, - 3 - ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -46,7 +37,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/valid-extension.json b/adapters/brightroll/brightrolltest/exemplary/valid-extension.json index da38c62be58..970b4ade63a 100644 --- a/adapters/brightroll/brightrolltest/exemplary/valid-extension.json +++ b/adapters/brightroll/brightrolltest/exemplary/valid-extension.json @@ -12,7 +12,7 @@ }, "ext":{ "bidder":{ - "publisher": "adthrive" + "publisher": "cafemom" } } } @@ -22,23 +22,14 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", "body": { "id": "test-request-id", "at":1, - "bcat": [ - "IAB8-5", - "IAB8-18" - ], "imp": [ { "id": "test-imp-id", "video": { - "battr": [ - 1, - 2, - 3 - ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -46,7 +37,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/video-and-audio.json b/adapters/brightroll/brightrolltest/exemplary/video-and-audio.json index d3295e5bffd..9f24a471b31 100644 --- a/adapters/brightroll/brightrolltest/exemplary/video-and-audio.json +++ b/adapters/brightroll/brightrolltest/exemplary/video-and-audio.json @@ -12,7 +12,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -25,7 +25,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } @@ -34,23 +34,14 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", "body": { "id": "test-request-id", "at":1, - "bcat": [ - "IAB8-5", - "IAB8-18" - ], "imp": [ { "id": "test-imp-video-id", "video": { - "battr": [ - 1, - 2, - 3 - ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -58,7 +49,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, @@ -71,7 +62,7 @@ }, "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } } diff --git a/adapters/brightroll/brightrolltest/params/race/banner.json b/adapters/brightroll/brightrolltest/params/race/banner.json index 6eb4ec6a337..91517e36fd8 100644 --- a/adapters/brightroll/brightrolltest/params/race/banner.json +++ b/adapters/brightroll/brightrolltest/params/race/banner.json @@ -1,3 +1,3 @@ { - "publisher": "adthrive" + "publisher": "cafemom" } diff --git a/adapters/brightroll/brightrolltest/params/race/video.json b/adapters/brightroll/brightrolltest/params/race/video.json index 6eb4ec6a337..91517e36fd8 100644 --- a/adapters/brightroll/brightrolltest/params/race/video.json +++ b/adapters/brightroll/brightrolltest/params/race/video.json @@ -1,3 +1,3 @@ { - "publisher": "adthrive" + "publisher": "cafemom" } diff --git a/adapters/brightroll/brightrolltest/supplemental/invalid-imp.json b/adapters/brightroll/brightrolltest/supplemental/invalid-imp.json index 01beec712c7..a6362c40adb 100644 --- a/adapters/brightroll/brightrolltest/supplemental/invalid-imp.json +++ b/adapters/brightroll/brightrolltest/supplemental/invalid-imp.json @@ -3,7 +3,7 @@ "id": "test-request-id", "ext": { "bidder": { - "publisher": "adthrive" + "publisher": "cafemom" } } }, diff --git a/adapters/brightroll/brightrolltest/supplemental/invalid-publisher.json b/adapters/brightroll/brightrolltest/supplemental/invalid-publisher.json deleted file mode 100644 index da48108af0b..00000000000 --- a/adapters/brightroll/brightrolltest/supplemental/invalid-publisher.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "mockBidRequest": { - "id": "test-request-id", - "imp": [ - { - "id": "test-missing-req-param-id", - "banner": { - "format": [ - { - "w": 300, - "h": 250 - }, - { - "w": 300, - "h": 600 - } - ] - }, - "ext": { - "bidder": { - "publisher":"test" - } - } - - } - ] - }, - "expectedMakeRequestsErrors": [ - { - "value": "Invalid publisher", - "comparison": "literal" - } - ] -} \ No newline at end of file From 65c6c3608d0cca20168a69c8cf14d043a0d39a45 Mon Sep 17 00:00:00 2001 From: Laurentiu Badea Date: Mon, 14 Sep 2020 07:19:40 -0700 Subject: [PATCH 20/27] Refactor: move getAccount to accounts package (from openrtb2) (#1483) --- account/account.go | 69 +++++++++++++++++++++ account/account_test.go | 94 +++++++++++++++++++++++++++++ endpoints/openrtb2/amp_auction.go | 3 +- endpoints/openrtb2/auction.go | 56 +---------------- endpoints/openrtb2/auction_test.go | 70 +-------------------- endpoints/openrtb2/video_auction.go | 3 +- 6 files changed, 170 insertions(+), 125 deletions(-) create mode 100644 account/account.go create mode 100644 account/account_test.go diff --git a/account/account.go b/account/account.go new file mode 100644 index 00000000000..2f27b61efab --- /dev/null +++ b/account/account.go @@ -0,0 +1,69 @@ +package account + +import ( + "context" + "encoding/json" + "fmt" + + jsonpatch "github.com/evanphx/json-patch" + "github.com/prebid/prebid-server/config" + "github.com/prebid/prebid-server/errortypes" + "github.com/prebid/prebid-server/pbsmetrics" + "github.com/prebid/prebid-server/stored_requests" +) + +// GetAccount looks up the config.Account object referenced by the given accountID, with access rules applied +func GetAccount(ctx context.Context, cfg *config.Configuration, fetcher stored_requests.AccountFetcher, accountID string) (account *config.Account, errs []error) { + // Check BlacklistedAcctMap until we have deprecated it + if _, found := cfg.BlacklistedAcctMap[accountID]; found { + return nil, []error{&errortypes.BlacklistedAcct{ + Message: fmt.Sprintf("Prebid-server has disabled Account ID: %s, please reach out to the prebid server host.", accountID), + }} + } + if cfg.AccountRequired && accountID == pbsmetrics.PublisherUnknown { + return nil, []error{&errortypes.AcctRequired{ + Message: fmt.Sprintf("Prebid-server has been configured to discard requests without a valid Account ID. Please reach out to the prebid server host."), + }} + } + if accountJSON, accErrs := fetcher.FetchAccount(ctx, accountID); len(accErrs) > 0 || accountJSON == nil { + // accountID does not reference a valid account + for _, e := range accErrs { + if _, ok := e.(stored_requests.NotFoundError); !ok { + errs = append(errs, e) + } + } + if cfg.AccountRequired && cfg.AccountDefaults.Disabled { + errs = append(errs, &errortypes.AcctRequired{ + Message: fmt.Sprintf("Prebid-server could not verify the Account ID. Please reach out to the prebid server host."), + }) + return nil, errs + } + // Make a copy of AccountDefaults instead of taking a reference, + // to preserve original accountID in case is needed to check NonStandardPublisherMap + pubAccount := cfg.AccountDefaults + pubAccount.ID = accountID + account = &pubAccount + } else { + // accountID resolved to a valid account, merge with AccountDefaults for a complete config + account = &config.Account{} + completeJSON, err := jsonpatch.MergePatch(cfg.AccountDefaultsJSON(), accountJSON) + if err == nil { + err = json.Unmarshal(completeJSON, account) + } + if err != nil { + errs = append(errs, err) + return nil, errs + } + // Fill in ID if needed, so it can be left out of account definition + if len(account.ID) == 0 { + account.ID = accountID + } + } + if account.Disabled { + errs = append(errs, &errortypes.BlacklistedAcct{ + Message: fmt.Sprintf("Prebid-server has disabled Account ID: %s, please reach out to the prebid server host.", accountID), + }) + return nil, errs + } + return account, nil +} diff --git a/account/account_test.go b/account/account_test.go new file mode 100644 index 00000000000..0d192f18510 --- /dev/null +++ b/account/account_test.go @@ -0,0 +1,94 @@ +package account + +import ( + "context" + "encoding/json" + "fmt" + "testing" + + "github.com/prebid/prebid-server/config" + "github.com/prebid/prebid-server/errortypes" + "github.com/prebid/prebid-server/pbsmetrics" + "github.com/prebid/prebid-server/stored_requests" + "github.com/stretchr/testify/assert" +) + +var mockAccountData = map[string]json.RawMessage{ + "valid_acct": json.RawMessage(`{"disabled":false}`), + "disabled_acct": json.RawMessage(`{"disabled":true}`), +} + +type mockAccountFetcher struct { +} + +func (af mockAccountFetcher) FetchAccount(ctx context.Context, accountID string) (json.RawMessage, []error) { + if account, ok := mockAccountData[accountID]; ok { + return account, nil + } + return nil, []error{stored_requests.NotFoundError{accountID, "Account"}} +} + +func TestGetAccount(t *testing.T) { + unknown := pbsmetrics.PublisherUnknown + testCases := []struct { + accountID string + // account_required + required bool + // account_defaults.disabled + disabled bool + // expected error, or nil if account should be found + err error + }{ + // Blacklisted account is always rejected even in permissive setup + {accountID: "bad_acct", required: false, disabled: false, err: &errortypes.BlacklistedAcct{}}, + + // empty pubID + {accountID: unknown, required: false, disabled: false, err: nil}, + {accountID: unknown, required: true, disabled: false, err: &errortypes.AcctRequired{}}, + {accountID: unknown, required: false, disabled: true, err: &errortypes.BlacklistedAcct{}}, + {accountID: unknown, required: true, disabled: true, err: &errortypes.AcctRequired{}}, + + // pubID given but is not a valid host account (does not exist) + {accountID: "doesnt_exist_acct", required: false, disabled: false, err: nil}, + {accountID: "doesnt_exist_acct", required: true, disabled: false, err: nil}, + {accountID: "doesnt_exist_acct", required: false, disabled: true, err: &errortypes.BlacklistedAcct{}}, + {accountID: "doesnt_exist_acct", required: true, disabled: true, err: &errortypes.AcctRequired{}}, + + // pubID given and matches a valid host account with Disabled: false + {accountID: "valid_acct", required: false, disabled: false, err: nil}, + {accountID: "valid_acct", required: true, disabled: false, err: nil}, + {accountID: "valid_acct", required: false, disabled: true, err: nil}, + {accountID: "valid_acct", required: true, disabled: true, err: nil}, + + // pubID given and matches a host account explicitly disabled (Disabled: true on account json) + {accountID: "disabled_acct", required: false, disabled: false, err: &errortypes.BlacklistedAcct{}}, + {accountID: "disabled_acct", required: true, disabled: false, err: &errortypes.BlacklistedAcct{}}, + {accountID: "disabled_acct", required: false, disabled: true, err: &errortypes.BlacklistedAcct{}}, + {accountID: "disabled_acct", required: true, disabled: true, err: &errortypes.BlacklistedAcct{}}, + } + + for _, test := range testCases { + description := fmt.Sprintf(`ID=%s/required=%t/disabled=%t`, test.accountID, test.required, test.disabled) + t.Run(description, func(t *testing.T) { + cfg := &config.Configuration{ + BlacklistedAcctMap: map[string]bool{"bad_acct": true}, + AccountRequired: test.required, + AccountDefaults: config.Account{Disabled: test.disabled}, + } + fetcher := &mockAccountFetcher{} + assert.NoError(t, cfg.MarshalAccountDefaults()) + + account, errors := GetAccount(context.Background(), cfg, fetcher, test.accountID) + + if test.err == nil { + assert.Empty(t, errors) + assert.Equal(t, test.accountID, account.ID, "account.ID must match requested ID") + assert.Equal(t, false, account.Disabled, "returned account must not be disabled") + } else { + assert.NotEmpty(t, errors, "expected errors but got success") + assert.Nil(t, account, "return account must be nil on error") + assert.IsType(t, test.err, errors[0], "error is of unexpected type") + } + }) + } +} diff --git a/endpoints/openrtb2/amp_auction.go b/endpoints/openrtb2/amp_auction.go index 54f4706902d..1e92569e260 100644 --- a/endpoints/openrtb2/amp_auction.go +++ b/endpoints/openrtb2/amp_auction.go @@ -16,6 +16,7 @@ import ( "github.com/golang/glog" "github.com/julienschmidt/httprouter" "github.com/mxmCherry/openrtb" + accountService "github.com/prebid/prebid-server/account" "github.com/prebid/prebid-server/analytics" "github.com/prebid/prebid-server/config" "github.com/prebid/prebid-server/errortypes" @@ -158,7 +159,7 @@ func (deps *endpointDeps) AmpAuction(w http.ResponseWriter, r *http.Request, _ h } labels.PubID = getAccountID(req.Site.Publisher) // Look up account now that we have resolved the pubID value - account, acctIDErrs := deps.getAccount(ctx, labels.PubID) + account, acctIDErrs := accountService.GetAccount(ctx, deps.cfg, deps.accounts, labels.PubID) if len(acctIDErrs) > 0 { errL = append(errL, acctIDErrs...) httpStatus := http.StatusBadRequest diff --git a/endpoints/openrtb2/auction.go b/endpoints/openrtb2/auction.go index 41c1c1677a5..d6cbc2285fb 100644 --- a/endpoints/openrtb2/auction.go +++ b/endpoints/openrtb2/auction.go @@ -22,6 +22,7 @@ import ( "github.com/mxmCherry/openrtb" "github.com/mxmCherry/openrtb/native" nativeRequests "github.com/mxmCherry/openrtb/native/request" + accountService "github.com/prebid/prebid-server/account" "github.com/prebid/prebid-server/analytics" "github.com/prebid/prebid-server/config" "github.com/prebid/prebid-server/errortypes" @@ -156,7 +157,7 @@ func (deps *endpointDeps) Auction(w http.ResponseWriter, r *http.Request, _ http } // Look up account now that we have resolved the pubID value - account, acctIDErrs := deps.getAccount(ctx, labels.PubID) + account, acctIDErrs := accountService.GetAccount(ctx, deps.cfg, deps.accounts, labels.PubID) if len(acctIDErrs) > 0 { errL = append(errL, acctIDErrs...) writeError(errL, w, &labels) @@ -1317,56 +1318,3 @@ func getAccountID(pub *openrtb.Publisher) string { } return pbsmetrics.PublisherUnknown } - -func (deps *endpointDeps) getAccount(ctx context.Context, pubID string) (account *config.Account, errs []error) { - // Check BlacklistedAcctMap until we have deprecated it - if _, found := deps.cfg.BlacklistedAcctMap[pubID]; found { - return nil, []error{&errortypes.BlacklistedAcct{ - Message: fmt.Sprintf("Prebid-server has disabled Account ID: %s, please reach out to the prebid server host.", pubID), - }} - } - if deps.cfg.AccountRequired && pubID == pbsmetrics.PublisherUnknown { - return nil, []error{&errortypes.AcctRequired{ - Message: fmt.Sprintf("Prebid-server has been configured to discard requests without a valid Account ID. Please reach out to the prebid server host."), - }} - } - if accountJSON, accErrs := deps.accounts.FetchAccount(ctx, pubID); len(accErrs) > 0 || accountJSON == nil { - // pubID does not reference a valid account - if len(accErrs) > 0 { - errs = append(errs, errs...) - } - if deps.cfg.AccountRequired && deps.cfg.AccountDefaults.Disabled { - errs = append(errs, &errortypes.AcctRequired{ - Message: fmt.Sprintf("Prebid-server has been configured to discard requests without a valid Account ID. Please reach out to the prebid server host."), - }) - return nil, errs - } - // Make a copy of AccountDefaults instead of taking a reference, - // to preserve original pubID in case is needed to check NonStandardPublisherMap - pubAccount := deps.cfg.AccountDefaults - pubAccount.ID = pubID - account = &pubAccount - } else { - // pubID resolved to a valid account, merge with AccountDefaults for a complete config - account = &config.Account{} - completeJSON, err := jsonpatch.MergePatch(deps.cfg.AccountDefaultsJSON(), accountJSON) - if err == nil { - err = json.Unmarshal(completeJSON, account) - } - if err != nil { - errs = append(errs, err) - return nil, errs - } - // Fill in ID if needed, so it can be left out of account definition - if len(account.ID) == 0 { - account.ID = pubID - } - } - if account.Disabled { - errs = append(errs, &errortypes.BlacklistedAcct{ - Message: fmt.Sprintf("Prebid-server has disabled Account ID: %s, please reach out to the prebid server host.", pubID), - }) - return nil, errs - } - return -} diff --git a/endpoints/openrtb2/auction_test.go b/endpoints/openrtb2/auction_test.go index 7dc244a28c3..925cffcebeb 100644 --- a/endpoints/openrtb2/auction_test.go +++ b/endpoints/openrtb2/auction_test.go @@ -1984,8 +1984,7 @@ func (cf mockStoredReqFetcher) FetchRequests(ctx context.Context, requestIDs []s } var mockAccountData = map[string]json.RawMessage{ - "valid_acct": json.RawMessage(`{"disabled":false}`), - "disabled_acct": json.RawMessage(`{"disabled":true}`), + "valid_acct": json.RawMessage(`{"disabled":false}`), } type mockAccountFetcher struct { @@ -2058,70 +2057,3 @@ type hardcodedResponseIPValidator struct { func (v hardcodedResponseIPValidator) IsValid(net.IP, iputil.IPVersion) bool { return v.response } - -func TestGetAccount(t *testing.T) { - unknown := pbsmetrics.PublisherUnknown - testCases := []struct { - accountID string - // account_required - required bool - // account_defaults.disabled - disabled bool - // expected error, or nil if account should be found - err error - }{ - // Blacklisted account is always rejected even in permissive setup - {accountID: "bad_acct", required: false, disabled: false, err: &errortypes.BlacklistedAcct{}}, - - // empty pubID - {accountID: unknown, required: false, disabled: false, err: nil}, - {accountID: unknown, required: true, disabled: false, err: &errortypes.AcctRequired{}}, - {accountID: unknown, required: false, disabled: true, err: &errortypes.BlacklistedAcct{}}, - {accountID: unknown, required: true, disabled: true, err: &errortypes.AcctRequired{}}, - - // pubID given but is not a valid host account (does not exist) - {accountID: "doesnt_exist_acct", required: false, disabled: false, err: nil}, - {accountID: "doesnt_exist_acct", required: true, disabled: false, err: nil}, - {accountID: "doesnt_exist_acct", required: false, disabled: true, err: &errortypes.BlacklistedAcct{}}, - {accountID: "doesnt_exist_acct", required: true, disabled: true, err: &errortypes.AcctRequired{}}, - - // pubID given and matches a valid host account with Disabled: false - {accountID: "valid_acct", required: false, disabled: false, err: nil}, - {accountID: "valid_acct", required: true, disabled: false, err: nil}, - {accountID: "valid_acct", required: false, disabled: true, err: nil}, - {accountID: "valid_acct", required: true, disabled: true, err: nil}, - - // pubID given and matches a host account explicitly disabled (Disabled: true on account json) - {accountID: "disabled_acct", required: false, disabled: false, err: &errortypes.BlacklistedAcct{}}, - {accountID: "disabled_acct", required: true, disabled: false, err: &errortypes.BlacklistedAcct{}}, - {accountID: "disabled_acct", required: false, disabled: true, err: &errortypes.BlacklistedAcct{}}, - {accountID: "disabled_acct", required: true, disabled: true, err: &errortypes.BlacklistedAcct{}}, - } - - for _, test := range testCases { - description := fmt.Sprintf(`ID=%s/required=%t/disabled=%t`, test.accountID, test.required, test.disabled) - t.Run(description, func(t *testing.T) { - deps := &endpointDeps{ - cfg: &config.Configuration{ - BlacklistedAcctMap: map[string]bool{"bad_acct": true}, - AccountRequired: test.required, - AccountDefaults: config.Account{Disabled: test.disabled}, - }, - accounts: &mockAccountFetcher{}, - } - assert.NoError(t, deps.cfg.MarshalAccountDefaults()) - - account, errors := deps.getAccount(context.Background(), test.accountID) - - if test.err == nil { - assert.Empty(t, errors) - assert.Equal(t, test.accountID, account.ID, "account.ID must match requested ID") - assert.Equal(t, false, account.Disabled, "returned account must not be disabled") - } else { - assert.NotEmpty(t, errors, "expected errors but got success") - assert.Nil(t, account, "return account must be nil on error") - assert.IsType(t, test.err, errors[0], "error is of unexpected type") - } - }) - } -} diff --git a/endpoints/openrtb2/video_auction.go b/endpoints/openrtb2/video_auction.go index f5494751cc2..ab5634c7853 100644 --- a/endpoints/openrtb2/video_auction.go +++ b/endpoints/openrtb2/video_auction.go @@ -23,6 +23,7 @@ import ( "github.com/golang/glog" "github.com/julienschmidt/httprouter" "github.com/mxmCherry/openrtb" + accountService "github.com/prebid/prebid-server/account" "github.com/prebid/prebid-server/analytics" "github.com/prebid/prebid-server/config" "github.com/prebid/prebid-server/exchange" @@ -255,7 +256,7 @@ func (deps *endpointDeps) VideoAuctionEndpoint(w http.ResponseWriter, r *http.Re } // Look up account now that we have resolved the pubID value - account, acctIDErrs := deps.getAccount(ctx, labels.PubID) + account, acctIDErrs := accountService.GetAccount(ctx, deps.cfg, deps.accounts, labels.PubID) if len(acctIDErrs) > 0 { handleError(&labels, w, acctIDErrs, &vo, &debugLog) return From 2096b911cba2d5fb0ad977efbfb6f0abd487919a Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Mon, 14 Sep 2020 20:29:19 +0300 Subject: [PATCH 21/27] Revert "revert britroll" This reverts commit 0eeee03ef0bfce7c6dee1b083305b44ec4cdea14. --- adapters/brightroll/brightroll.go | 81 +++++++++++++++---- adapters/brightroll/brightroll_test.go | 28 ++++++- .../exemplary/banner-native-audio.json | 23 ++++-- .../exemplary/banner-video-native.json | 28 +++++-- .../exemplary/banner-video.json | 24 ++++-- .../exemplary/simple-banner.json | 15 +++- .../exemplary/simple-video.json | 15 +++- .../exemplary/valid-extension.json | 15 +++- .../exemplary/video-and-audio.json | 19 +++-- .../brightrolltest/params/race/banner.json | 2 +- .../brightrolltest/params/race/video.json | 2 +- .../supplemental/invalid-imp.json | 2 +- .../supplemental/invalid-publisher.json | 34 ++++++++ 13 files changed, 235 insertions(+), 53 deletions(-) create mode 100644 adapters/brightroll/brightrolltest/supplemental/invalid-publisher.json diff --git a/adapters/brightroll/brightroll.go b/adapters/brightroll/brightroll.go index 0ae95dd303a..83b253a0996 100644 --- a/adapters/brightroll/brightroll.go +++ b/adapters/brightroll/brightroll.go @@ -6,6 +6,7 @@ import ( "net/http" "strconv" + "github.com/golang/glog" "github.com/mxmCherry/openrtb" "github.com/prebid/prebid-server/adapters" "github.com/prebid/prebid-server/errortypes" @@ -13,7 +14,20 @@ import ( ) type BrightrollAdapter struct { - URI string + URI string + extraInfo ExtraInfo +} + +type ExtraInfo struct { + Accounts []Account `json:"accounts"` +} + +type Account struct { + ID string `json:"id"` + Badv []string `json:"badv"` + Bcat []string `json:"bcat"` + Battr []int8 `json:"battr"` + BidFloor float64 `json:"bidfloor"` } func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { @@ -55,6 +69,23 @@ func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo errors = append(errors, err) return nil, errors } + + var account *Account + for _, a := range a.extraInfo.Accounts { + if a.ID == brightrollExt.Publisher { + account = &a + break + } + } + + if account == nil { + err = &errortypes.BadInput{ + Message: "Invalid publisher", + } + errors = append(errors, err) + return nil, errors + } + validImpExists := false for i := 0; i < len(request.Imp); i++ { //Brightroll supports only banner and video impressions as of now @@ -65,9 +96,9 @@ func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo bannerCopy.W = &(firstFormat.W) bannerCopy.H = &(firstFormat.H) } - if brightrollExt.Publisher == "adthrive" { - bannerCopy.BAttr = getBlockedCreativetypesForAdThrive() + if len(account.Battr) > 0 { + bannerCopy.BAttr = getBlockedCreativetypes(account.Battr) } request.Imp[i].Banner = &bannerCopy validImpExists = true @@ -75,10 +106,15 @@ func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo validImpExists = true if brightrollExt.Publisher == "adthrive" { videoCopy := *request.Imp[i].Video - videoCopy.BAttr = getBlockedCreativetypesForAdThrive() + if len(account.Battr) > 0 { + videoCopy.BAttr = getBlockedCreativetypes(account.Battr) + } request.Imp[i].Video = &videoCopy } } + if validImpExists && request.Imp[i].BidFloor == 0 && account.BidFloor > 0 { + request.Imp[i].BidFloor = account.BidFloor + } } if !validImpExists { err := &errortypes.BadInput{ @@ -90,8 +126,12 @@ func (a *BrightrollAdapter) MakeRequests(requestIn *openrtb.BidRequest, reqInfo request.AT = 1 //Defaulting to first price auction for all prebid requests - if brightrollExt.Publisher == "adthrive" { - request.BCat = getBlockedCategoriesForAdthrive() + if len(account.Bcat) > 0 { + request.BCat = account.Bcat + } + + if len(account.Badv) > 0 { + request.BAdv = account.Badv } reqJSON, err := json.Marshal(request) if err != nil { @@ -159,13 +199,12 @@ func (a *BrightrollAdapter) MakeBids(internalRequest *openrtb.BidRequest, extern return bidResponse, nil } -//customized request, need following blocked categories -func getBlockedCategoriesForAdthrive() []string { - return []string{"IAB8-5", "IAB8-18", "IAB15-1", "IAB7-30", "IAB14-1", "IAB22-1", "IAB3-7", "IAB7-3", "IAB14-3", "IAB11", "IAB11-1", "IAB11-2", "IAB11-3", "IAB11-4", "IAB11-5", "IAB23", "IAB23-1", "IAB23-2", "IAB23-3", "IAB23-4", "IAB23-5", "IAB23-6", "IAB23-7", "IAB23-8", "IAB23-9", "IAB23-10", "IAB7-39", "IAB9-30", "IAB7-44", "IAB25", "IAB25-1", "IAB25-2", "IAB25-3", "IAB25-4", "IAB25-5", "IAB25-6", "IAB25-7", "IAB26", "IAB26-1", "IAB26-2", "IAB26-3", "IAB26-4"} -} - -func getBlockedCreativetypesForAdThrive() []openrtb.CreativeAttribute { - return []openrtb.CreativeAttribute{openrtb.CreativeAttribute(1), openrtb.CreativeAttribute(2), openrtb.CreativeAttribute(3), openrtb.CreativeAttribute(6), openrtb.CreativeAttribute(9), openrtb.CreativeAttribute(10)} +func getBlockedCreativetypes(attr []int8) []openrtb.CreativeAttribute { + var creativeAttr []openrtb.CreativeAttribute + for i := 0; i < len(attr); i++ { + creativeAttr = append(creativeAttr, openrtb.CreativeAttribute(attr[i])) + } + return creativeAttr } //Adding header fields to request header @@ -189,8 +228,18 @@ func getMediaTypeForImp(impId string, imps []openrtb.Imp) openrtb_ext.BidType { return mediaType } -func NewBrightrollBidder(endpoint string) *BrightrollAdapter { - return &BrightrollAdapter{ - URI: endpoint, +func NewBrightrollBidder(endpoint string, extraAdapterInfo string) *BrightrollAdapter { + + var extraInfo ExtraInfo + + if len(extraAdapterInfo) == 0 { + extraAdapterInfo = "{\"accounts\":[]}" + } + err := json.Unmarshal([]byte(extraAdapterInfo), &extraInfo) + + if err != nil { + glog.Fatalf("Invalid Brightroll extra adapter info: " + err.Error()) + return nil } + return &BrightrollAdapter{URI: endpoint, extraInfo: extraInfo} } diff --git a/adapters/brightroll/brightroll_test.go b/adapters/brightroll/brightroll_test.go index 0a6c2c44567..5f1c64fd16f 100644 --- a/adapters/brightroll/brightroll_test.go +++ b/adapters/brightroll/brightroll_test.go @@ -1,11 +1,37 @@ package brightroll import ( + "github.com/stretchr/testify/assert" "testing" "github.com/prebid/prebid-server/adapters/adapterstest" ) +func TestEmptyConfig(t *testing.T) { + output := NewBrightrollBidder("http://test-bid.ybp.yahoo.com/bid/appnexuspbs", "") + ex := ExtraInfo{ + Accounts: []Account{}, + } + expected := &BrightrollAdapter{ + URI: "http://test-bid.ybp.yahoo.com/bid/appnexuspbs", + extraInfo: ex, + } + assert.Equal(t, expected, output, "") +} + +func TestNonEmptyConfig(t *testing.T) { + output := NewBrightrollBidder("http://test-bid.ybp.yahoo.com/bid/appnexuspbs", "{\"accounts\": [{\"id\": \"test\",\"bidfloor\":0.1}]}") + ex := ExtraInfo{ + Accounts: []Account{{ID: "test", BidFloor: 0.1}}, + } + + expected := &BrightrollAdapter{ + URI: "http://test-bid.ybp.yahoo.com/bid/appnexuspbs", + extraInfo: ex, + } + assert.Equal(t, expected, output, "") +} + func TestJsonSamples(t *testing.T) { - adapterstest.RunJSONBidderTest(t, "brightrolltest", NewBrightrollBidder("http://test-bid.ybp.yahoo.com/bid/appnexuspbs")) + adapterstest.RunJSONBidderTest(t, "brightrolltest", NewBrightrollBidder("http://test-bid.ybp.yahoo.com/bid/appnexuspbs", "{\"accounts\": [{\"id\": \"adthrive\",\"badv\": [], \"bcat\": [\"IAB8-5\",\"IAB8-18\"],\"battr\": [1,2,3], \"bidfloor\":0.0}]}")) } diff --git a/adapters/brightroll/brightrolltest/exemplary/banner-native-audio.json b/adapters/brightroll/brightrolltest/exemplary/banner-native-audio.json index e8ef5b688f6..e67a1485e54 100644 --- a/adapters/brightroll/brightrolltest/exemplary/banner-native-audio.json +++ b/adapters/brightroll/brightrolltest/exemplary/banner-native-audio.json @@ -18,7 +18,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -30,7 +30,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -43,7 +43,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } @@ -52,14 +52,23 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", "body": { "id": "test-request-id", "at":1, + "bcat": [ + "IAB8-5", + "IAB8-18" + ], "imp": [ { "id": "test-imp-id", "banner": { + "battr": [ + 1, + 2, + 3 + ], "format": [ { "w": 300, @@ -75,7 +84,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -87,7 +96,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -100,7 +109,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/banner-video-native.json b/adapters/brightroll/brightrolltest/exemplary/banner-video-native.json index 4df7ab5df10..0fffbd2fac5 100644 --- a/adapters/brightroll/brightrolltest/exemplary/banner-video-native.json +++ b/adapters/brightroll/brightrolltest/exemplary/banner-video-native.json @@ -18,7 +18,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -30,7 +30,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -44,7 +44,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } @@ -53,14 +53,23 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", "body": { "id": "test-request-id", "at":1, + "bcat": [ + "IAB8-5", + "IAB8-18" + ], "imp": [ { "id": "test-imp-id", "banner": { + "battr": [ + 1, + 2, + 3 + ], "format": [ { "w": 300, @@ -76,7 +85,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -88,13 +97,18 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, { "id": "test-imp-video-id", "video": { + "battr": [ + 1, + 2, + 3 + ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -102,7 +116,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/banner-video.json b/adapters/brightroll/brightrolltest/exemplary/banner-video.json index 50053102d08..f58dd9b1395 100644 --- a/adapters/brightroll/brightrolltest/exemplary/banner-video.json +++ b/adapters/brightroll/brightrolltest/exemplary/banner-video.json @@ -18,7 +18,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -32,7 +32,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } @@ -41,14 +41,23 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", "body": { "id": "test-request-id", "at":1, + "bcat": [ + "IAB8-5", + "IAB8-18" + ], "imp": [ { "id": "test-imp-id", "banner": { + "battr": [ + 1, + 2, + 3 + ], "format": [ { "w": 300, @@ -64,13 +73,18 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, { "id": "test-imp-video-id", "video": { + "battr": [ + 1, + 2, + 3 + ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -78,7 +92,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/simple-banner.json b/adapters/brightroll/brightrolltest/exemplary/simple-banner.json index 96fa0cbc9f3..66bc06cf696 100644 --- a/adapters/brightroll/brightrolltest/exemplary/simple-banner.json +++ b/adapters/brightroll/brightrolltest/exemplary/simple-banner.json @@ -18,7 +18,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } @@ -28,14 +28,23 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", "body": { "id": "test-request-id", "at":1, + "bcat": [ + "IAB8-5", + "IAB8-18" + ], "imp": [ { "id": "test-imp-id", "banner": { + "battr": [ + 1, + 2, + 3 + ], "format": [ { "w": 300, @@ -51,7 +60,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/simple-video.json b/adapters/brightroll/brightrolltest/exemplary/simple-video.json index f2466b2fd95..3f9b809182d 100644 --- a/adapters/brightroll/brightrolltest/exemplary/simple-video.json +++ b/adapters/brightroll/brightrolltest/exemplary/simple-video.json @@ -12,7 +12,7 @@ }, "ext":{ "bidder":{ - "publisher": "cafemom" + "publisher": "adthrive" } } } @@ -22,14 +22,23 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", "body": { "id": "test-request-id", "at":1, + "bcat": [ + "IAB8-5", + "IAB8-18" + ], "imp": [ { "id": "test-imp-id", "video": { + "battr": [ + 1, + 2, + 3 + ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -37,7 +46,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/valid-extension.json b/adapters/brightroll/brightrolltest/exemplary/valid-extension.json index 970b4ade63a..da38c62be58 100644 --- a/adapters/brightroll/brightrolltest/exemplary/valid-extension.json +++ b/adapters/brightroll/brightrolltest/exemplary/valid-extension.json @@ -12,7 +12,7 @@ }, "ext":{ "bidder":{ - "publisher": "cafemom" + "publisher": "adthrive" } } } @@ -22,14 +22,23 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", "body": { "id": "test-request-id", "at":1, + "bcat": [ + "IAB8-5", + "IAB8-18" + ], "imp": [ { "id": "test-imp-id", "video": { + "battr": [ + 1, + 2, + 3 + ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -37,7 +46,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } diff --git a/adapters/brightroll/brightrolltest/exemplary/video-and-audio.json b/adapters/brightroll/brightrolltest/exemplary/video-and-audio.json index 9f24a471b31..d3295e5bffd 100644 --- a/adapters/brightroll/brightrolltest/exemplary/video-and-audio.json +++ b/adapters/brightroll/brightrolltest/exemplary/video-and-audio.json @@ -12,7 +12,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -25,7 +25,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } @@ -34,14 +34,23 @@ "httpCalls": [ { "expectedRequest": { - "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=cafemom", + "uri": "http://test-bid.ybp.yahoo.com/bid/appnexuspbs?publisher=adthrive", "body": { "id": "test-request-id", "at":1, + "bcat": [ + "IAB8-5", + "IAB8-18" + ], "imp": [ { "id": "test-imp-video-id", "video": { + "battr": [ + 1, + 2, + 3 + ], "mimes": ["video/mp4"], "protocols": [2, 5], "w": 1024, @@ -49,7 +58,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, @@ -62,7 +71,7 @@ }, "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } } diff --git a/adapters/brightroll/brightrolltest/params/race/banner.json b/adapters/brightroll/brightrolltest/params/race/banner.json index 91517e36fd8..6eb4ec6a337 100644 --- a/adapters/brightroll/brightrolltest/params/race/banner.json +++ b/adapters/brightroll/brightrolltest/params/race/banner.json @@ -1,3 +1,3 @@ { - "publisher": "cafemom" + "publisher": "adthrive" } diff --git a/adapters/brightroll/brightrolltest/params/race/video.json b/adapters/brightroll/brightrolltest/params/race/video.json index 91517e36fd8..6eb4ec6a337 100644 --- a/adapters/brightroll/brightrolltest/params/race/video.json +++ b/adapters/brightroll/brightrolltest/params/race/video.json @@ -1,3 +1,3 @@ { - "publisher": "cafemom" + "publisher": "adthrive" } diff --git a/adapters/brightroll/brightrolltest/supplemental/invalid-imp.json b/adapters/brightroll/brightrolltest/supplemental/invalid-imp.json index a6362c40adb..01beec712c7 100644 --- a/adapters/brightroll/brightrolltest/supplemental/invalid-imp.json +++ b/adapters/brightroll/brightrolltest/supplemental/invalid-imp.json @@ -3,7 +3,7 @@ "id": "test-request-id", "ext": { "bidder": { - "publisher": "cafemom" + "publisher": "adthrive" } } }, diff --git a/adapters/brightroll/brightrolltest/supplemental/invalid-publisher.json b/adapters/brightroll/brightrolltest/supplemental/invalid-publisher.json new file mode 100644 index 00000000000..da48108af0b --- /dev/null +++ b/adapters/brightroll/brightrolltest/supplemental/invalid-publisher.json @@ -0,0 +1,34 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-missing-req-param-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "ext": { + "bidder": { + "publisher":"test" + } + } + + } + ] + }, + "expectedMakeRequestsErrors": [ + { + "value": "Invalid publisher", + "comparison": "literal" + } + ] +} \ No newline at end of file From 017bfa0bed0343845ab935d682d2ae8a63a8b7d0 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 13:48:11 +0300 Subject: [PATCH 22/27] initial --- adapters/colossus/colossus.go | 138 ++++++++++++++++++ adapters/colossus/colossus_test.go | 12 ++ .../colossustest/exemplary/simple-banner.json | 134 +++++++++++++++++ .../colossustest/exemplary/simple-video.json | 119 +++++++++++++++ .../exemplary/simple-web-banner.json | 133 +++++++++++++++++ .../colossus/colossustest/params/banner.json | 3 + .../colossustest/params/race/banner.json | 3 + .../colossustest/params/race/video.json | 3 + .../colossus/colossustest/params/video.json | 3 + .../supplemental/bad-imp-ext.json | 42 ++++++ .../supplemental/bad_response.json | 85 +++++++++++ .../supplemental/no-imp-ext-1.json | 39 +++++ .../supplemental/no-imp-ext-2.json | 39 +++++ .../colossustest/supplemental/status-204.json | 79 ++++++++++ .../colossustest/supplemental/status-404.json | 85 +++++++++++ adapters/colossus/params_test.go | 46 ++++++ adapters/colossus/usersync.go | 13 ++ adapters/colossus/usersync_test.go | 35 +++++ 18 files changed, 1011 insertions(+) create mode 100644 adapters/colossus/colossus.go create mode 100644 adapters/colossus/colossus_test.go create mode 100644 adapters/colossus/colossustest/exemplary/simple-banner.json create mode 100644 adapters/colossus/colossustest/exemplary/simple-video.json create mode 100644 adapters/colossus/colossustest/exemplary/simple-web-banner.json create mode 100644 adapters/colossus/colossustest/params/banner.json create mode 100644 adapters/colossus/colossustest/params/race/banner.json create mode 100644 adapters/colossus/colossustest/params/race/video.json create mode 100644 adapters/colossus/colossustest/params/video.json create mode 100644 adapters/colossus/colossustest/supplemental/bad-imp-ext.json create mode 100644 adapters/colossus/colossustest/supplemental/bad_response.json create mode 100644 adapters/colossus/colossustest/supplemental/no-imp-ext-1.json create mode 100644 adapters/colossus/colossustest/supplemental/no-imp-ext-2.json create mode 100644 adapters/colossus/colossustest/supplemental/status-204.json create mode 100644 adapters/colossus/colossustest/supplemental/status-404.json create mode 100644 adapters/colossus/params_test.go create mode 100644 adapters/colossus/usersync.go create mode 100644 adapters/colossus/usersync_test.go diff --git a/adapters/colossus/colossus.go b/adapters/colossus/colossus.go new file mode 100644 index 00000000000..2576bd240ec --- /dev/null +++ b/adapters/colossus/colossus.go @@ -0,0 +1,138 @@ +package colossus + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/buger/jsonparser" + "github.com/mxmCherry/openrtb" + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/errortypes" + "github.com/prebid/prebid-server/openrtb_ext" +) + +// ColossusAdapter struct +type ColossusAdapter struct { + URI string +} + +// NewColossusBidder Initializes the Bidder +func NewColossusBidder(endpoint string) *ColossusAdapter { + return &ColossusAdapter{ + URI: endpoint, + } +} + +// MakeRequests create bid request for colossus demand +func (a *ColossusAdapter) MakeRequests(request *openrtb.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { + var errs []error + var err error + var tagID string + + var adapterRequests []*adapters.RequestData + + reqCopy := *request + for _, imp := range request.Imp { + reqCopy.Imp = []openrtb.Imp{imp} + + tagID, err = jsonparser.GetString(reqCopy.Imp[0].Ext, "bidder", "TagID") + if err != nil { + errs = append(errs, err) + continue + } + + reqCopy.Imp[0].TagID = tagID + + adapterReq, errors := a.makeRequest(&reqCopy) + if adapterReq != nil { + adapterRequests = append(adapterRequests, adapterReq) + } + errs = append(errs, errors...) + } + return adapterRequests, errs +} + +func (a *ColossusAdapter) makeRequest(request *openrtb.BidRequest) (*adapters.RequestData, []error) { + + var errs []error + + reqJSON, err := json.Marshal(request) + + if err != nil { + errs = append(errs, err) + return nil, errs + } + + headers := http.Header{} + headers.Add("Content-Type", "application/json;charset=utf-8") + headers.Add("Accept", "application/json") + return &adapters.RequestData{ + Method: "POST", + Uri: a.URI, + Body: reqJSON, + Headers: headers, + }, errs +} + +// MakeBids makes the bids +func (a *ColossusAdapter) MakeBids(internalRequest *openrtb.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) { + var errs []error + + if response.StatusCode == http.StatusNoContent { + return nil, nil + } + + if response.StatusCode == http.StatusNotFound { + return nil, []error{&errortypes.BadServerResponse{ + Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode), + }} + } + + if response.StatusCode != http.StatusOK { + return nil, []error{&errortypes.BadServerResponse{ + Message: fmt.Sprintf("Unexpected status code: %d. Run with request.debug = 1 for more info", response.StatusCode), + }} + } + + var bidResp openrtb.BidResponse + + if err := json.Unmarshal(response.Body, &bidResp); err != nil { + return nil, []error{err} + } + + bidResponse := adapters.NewBidderResponseWithBidsCapacity(1) + + for _, sb := range bidResp.SeatBid { + for i := range sb.Bid { + bidType, err := getMediaTypeForImp(sb.Bid[i].ImpID, internalRequest.Imp) + if err != nil { + errs = append(errs, err) + } else { + b := &adapters.TypedBid{ + Bid: &sb.Bid[i], + BidType: bidType, + } + bidResponse.Bids = append(bidResponse.Bids, b) + } + } + } + return bidResponse, errs +} + +func getMediaTypeForImp(impID string, imps []openrtb.Imp) (openrtb_ext.BidType, error) { + mediaType := openrtb_ext.BidTypeBanner + for _, imp := range imps { + if imp.ID == impID { + if imp.Banner == nil && imp.Video != nil { + mediaType = openrtb_ext.BidTypeVideo + } + return mediaType, nil + } + } + + // This shouldnt happen. Lets handle it just incase by returning an error. + return "", &errortypes.BadInput{ + Message: fmt.Sprintf("Failed to find impression \"%s\" ", impID), + } +} diff --git a/adapters/colossus/colossus_test.go b/adapters/colossus/colossus_test.go new file mode 100644 index 00000000000..027fc06af1f --- /dev/null +++ b/adapters/colossus/colossus_test.go @@ -0,0 +1,12 @@ +package colossus + +import ( + "testing" + + "github.com/prebid/prebid-server/adapters/adapterstest" +) + +func TestJsonSamples(t *testing.T) { + colossusAdapter := NewColossusBidder("http://colossusssp.com/?c=o&m=rtb") + adapterstest.RunJSONBidderTest(t, "colossustest", colossusAdapter) +} diff --git a/adapters/colossus/colossustest/exemplary/simple-banner.json b/adapters/colossus/colossustest/exemplary/simple-banner.json new file mode 100644 index 00000000000..d239bf177b0 --- /dev/null +++ b/adapters/colossus/colossustest/exemplary/simple-banner.json @@ -0,0 +1,134 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": { + "bidder": { + "TagID": "61317" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } +}, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": { + "bidder": { + "TagID": "61317" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } + } + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "seatbid": [ + { + "bid": [ + { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "w": 300, + "h": 250, + "ext": { + "prebid": { + "type": "banner" + } + } + } + ], + "seat": "colossus" + } + ], + "cur": "USD" + } + } + } + ], + + "expectedBidResponses": [ + { + "bids":[ + { + "bid": { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "w": 300, + "h": 250, + "ext": { + "prebid": { + "type": "banner" + } + } + }, + "type": "banner" + } + ] + } + ] +} diff --git a/adapters/colossus/colossustest/exemplary/simple-video.json b/adapters/colossus/colossustest/exemplary/simple-video.json new file mode 100644 index 00000000000..503567571e7 --- /dev/null +++ b/adapters/colossus/colossustest/exemplary/simple-video.json @@ -0,0 +1,119 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + }, + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "imp": [ + { + "id": "test-imp-id", + "video": { + "mimes": ["video/mp4"], + "protocols": [2, 5], + "w": 1024, + "h": 576 + }, + "ext": { + "bidder": { + "TagID": "61318" + } + } + } + ] + }, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + }, + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "imp": [ + { + "id": "test-imp-id", + "video": { + "mimes": ["video/mp4"], + "protocols": [2, 5], + "w": 1024, + "h": 576 + }, + "tagid": "61318", + "ext": { + "bidder": { + "TagID": "61318" + } + } + } + ] + } + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "seatbid": [ + { + "bid": [ + { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "00:01:00", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "ext": { + "prebid": { + "type": "video" + } + } + } + ], + "seat": "colossus" + } + ], + "cur": "USD" + } + } + } + ], + + + "expectedBidResponses": [ + { + "currency": "USD", + "bids": [ + { + "bid": { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "00:01:00", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "ext": { + "prebid": { + "type": "video" + } + } + }, + "type": "video" + } + ] + } + ] +} diff --git a/adapters/colossus/colossustest/exemplary/simple-web-banner.json b/adapters/colossus/colossustest/exemplary/simple-web-banner.json new file mode 100644 index 00000000000..818b24885b2 --- /dev/null +++ b/adapters/colossus/colossustest/exemplary/simple-web-banner.json @@ -0,0 +1,133 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "1", + "ext": { + "bidder": { + "TagID": "1" + } + } + } + ], + "site": { + "id": "1", + "domain": "test.com" + }, + "device": { + "ip": "123.123.123.123" + } + }, + + "httpCalls": [ + { + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "1", + "ext": { + "bidder": { + "TagID": "1" + } + } + } + ], + "site": { + "id": "1", + "domain": "test.com" + }, + "device": { + "ip": "123.123.123.123" + } + } + }, + "mockResponse": { + "status": 200, + "body": { + "id": "test-request-id", + "seatbid": [ + { + "bid": [ + { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "w": 468, + "h": 60, + "ext": { + "prebid": { + "type": "banner" + } + } + } + ], + "seat": "colossus" + } + ], + "cur": "USD" + } + } + } + ], + + "expectedBidResponses": [ + { + "bids":[ + { + "bid": { + "id": "test_bid_id", + "impid": "test-imp-id", + "price": 0.27543, + "adm": "", + "cid": "test_cid", + "crid": "test_crid", + "dealid": "test_dealid", + "w": 468, + "h": 60, + "ext": { + "prebid": { + "type": "banner" + } + } + }, + "type": "banner" + } + ] + } + ] + } + \ No newline at end of file diff --git a/adapters/colossus/colossustest/params/banner.json b/adapters/colossus/colossustest/params/banner.json new file mode 100644 index 00000000000..1cd30e98ef8 --- /dev/null +++ b/adapters/colossus/colossustest/params/banner.json @@ -0,0 +1,3 @@ +{ + "TagID": "61317" +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/params/race/banner.json b/adapters/colossus/colossustest/params/race/banner.json new file mode 100644 index 00000000000..1cd30e98ef8 --- /dev/null +++ b/adapters/colossus/colossustest/params/race/banner.json @@ -0,0 +1,3 @@ +{ + "TagID": "61317" +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/params/race/video.json b/adapters/colossus/colossustest/params/race/video.json new file mode 100644 index 00000000000..a334715e00e --- /dev/null +++ b/adapters/colossus/colossustest/params/race/video.json @@ -0,0 +1,3 @@ +{ + "TagID": "61318" +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/params/video.json b/adapters/colossus/colossustest/params/video.json new file mode 100644 index 00000000000..a334715e00e --- /dev/null +++ b/adapters/colossus/colossustest/params/video.json @@ -0,0 +1,3 @@ +{ + "TagID": "61318" +} \ No newline at end of file diff --git a/adapters/colossus/colossustest/supplemental/bad-imp-ext.json b/adapters/colossus/colossustest/supplemental/bad-imp-ext.json new file mode 100644 index 00000000000..1ddce56b477 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/bad-imp-ext.json @@ -0,0 +1,42 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": { + "colossus": { + "TagID": "61317" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } +}, +"expectedMakeRequestsErrors": [ + { + "value": "unexpected end of JSON input", + "comparison": "literal" + } +] +} diff --git a/adapters/colossus/colossustest/supplemental/bad_response.json b/adapters/colossus/colossustest/supplemental/bad_response.json new file mode 100644 index 00000000000..42a6d04942a --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/bad_response.json @@ -0,0 +1,85 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "17", + "ext": { + "bidder": { + "TagID": "17" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + }, + "httpCalls": [{ + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "17", + "ext": { + "bidder": { + "TagID": "17" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + } + }, + "mockResponse": { + "status": 200, + "body": "" + } + }], + "expectedMakeBidsErrors": [ + { + "value": "json: cannot unmarshal string into Go value of type openrtb.BidResponse", + "comparison": "literal" + } + ] +} diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json b/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json new file mode 100644 index 00000000000..3ee4209c919 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json @@ -0,0 +1,39 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": "" + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } + }, + "expectedMakeRequestsErrors": [ + { + "value": "json: cannot unmarshal string into Go value of type adapters.ExtImpBidder", + "comparison": "literal" + } + ] + } + \ No newline at end of file diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json b/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json new file mode 100644 index 00000000000..3c5d010c9f2 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json @@ -0,0 +1,39 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "61317", + "ext": {} + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "zxcjbzxmc-zxcbmz-zxbcz-zxczx" + } + }, + "expectedMakeRequestsErrors": [ + { + "value": "unexpected end of JSON input", + "comparison": "literal" + } + ] + } + \ No newline at end of file diff --git a/adapters/colossus/colossustest/supplemental/status-204.json b/adapters/colossus/colossustest/supplemental/status-204.json new file mode 100644 index 00000000000..fd9e6b382e2 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/status-204.json @@ -0,0 +1,79 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "17", + "ext": { + "bidder": { + "TagID": "17" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + }, + "httpCalls": [{ + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "17", + "ext": { + "bidder": { + "TagID": "17" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + } + }, + "mockResponse": { + "status": 204, + "body": {} + } + }] +} diff --git a/adapters/colossus/colossustest/supplemental/status-404.json b/adapters/colossus/colossustest/supplemental/status-404.json new file mode 100644 index 00000000000..938b6d78248 --- /dev/null +++ b/adapters/colossus/colossustest/supplemental/status-404.json @@ -0,0 +1,85 @@ +{ + "mockBidRequest": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "100000000", + "ext": { + "bidder": { + "TagID": "100000000" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + }, + "httpCalls": [{ + "expectedRequest": { + "uri": "http://colossusssp.com/?c=o&m=rtb", + "body": { + "id": "test-request-id", + "imp": [ + { + "id": "test-imp-id", + "banner": { + "format": [ + { + "w": 300, + "h": 250 + }, + { + "w": 300, + "h": 600 + } + ] + }, + "tagid": "100000000", + "ext": { + "bidder": { + "TagID": "100000000" + } + } + } + ], + "app": { + "id": "1", + "bundle": "com.wls.testwlsapplication" + }, + "device": { + "ip": "123.123.123.123", + "ifa": "sdjfksdf-dfsds-dsdg-dsgg" + } + } + }, + "mockResponse": { + "status": 404, + "body": {} + } + }], + "expectedMakeBidsErrors": [ + { + "value": "Unexpected status code: 404. Run with request.debug = 1 for more info", + "comparison": "literal" + } + ] +} diff --git a/adapters/colossus/params_test.go b/adapters/colossus/params_test.go new file mode 100644 index 00000000000..2883de2f53e --- /dev/null +++ b/adapters/colossus/params_test.go @@ -0,0 +1,46 @@ +package colossus + +import ( + "encoding/json" + "testing" + + "github.com/prebid/prebid-server/openrtb_ext" +) + +// TestValidParams makes sure that the colossus schema accepts all imp.ext fields which we intend to support. +func TestValidParams(t *testing.T) { + validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params") + if err != nil { + t.Fatalf("Failed to fetch the json-schemas. %v", err) + } + + for _, validParam := range validParams { + if err := validator.Validate(openrtb_ext.BidderColossus, json.RawMessage(validParam)); err != nil { + t.Errorf("Schema rejected colossus params: %s", validParam) + } + } +} + +// TestInvalidParams makes sure that the colossus schema rejects all the imp.ext fields we don't support. +func TestInvalidParams(t *testing.T) { + validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params") + if err != nil { + t.Fatalf("Failed to fetch the json-schemas. %v", err) + } + + for _, invalidParam := range invalidParams { + if err := validator.Validate(openrtb_ext.BidderColossus, json.RawMessage(invalidParam)); err == nil { + t.Errorf("Schema allowed unexpected params: %s", invalidParam) + } + } +} + +var validParams = []string{ + `{"TagID": "61317"}`, +} + +var invalidParams = []string{ + `{"id": "123"}`, + `{"tagid": "123"}`, + `{"TagID": 16}`, +} diff --git a/adapters/colossus/usersync.go b/adapters/colossus/usersync.go new file mode 100644 index 00000000000..a4e82ee3bde --- /dev/null +++ b/adapters/colossus/usersync.go @@ -0,0 +1,13 @@ +package colossus + +import ( + "text/template" + + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/usersync" +) + +// NewColossusSyncer returns colossus syncer +func NewColossusSyncer(temp *template.Template) usersync.Usersyncer { + return adapters.NewSyncer("colossus", 0, temp, adapters.SyncTypeRedirect) +} diff --git a/adapters/colossus/usersync_test.go b/adapters/colossus/usersync_test.go new file mode 100644 index 00000000000..c4703fdd4ac --- /dev/null +++ b/adapters/colossus/usersync_test.go @@ -0,0 +1,35 @@ +package colossus + +import ( + "testing" + "text/template" + + "github.com/prebid/prebid-server/privacy" + "github.com/prebid/prebid-server/privacy/ccpa" + "github.com/prebid/prebid-server/privacy/gdpr" + "github.com/stretchr/testify/assert" +) + +func TestColossusSyncer(t *testing.T) { + syncURL := "https://sync.colossusssp.com/pbs.gif?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D" + syncURLTemplate := template.Must( + template.New("sync-template").Parse(syncURL), + ) + + syncer := NewColossusSyncer(syncURLTemplate) + syncInfo, err := syncer.GetUsersyncInfo(privacy.Policies{ + GDPR: gdpr.Policy{ + Signal: "0", + Consent: "ANDFJDS", + }, + CCPA: ccpa.Policy{ + Value: "1-YY", + }, + }) + + assert.NoError(t, err) + assert.Equal(t, "https://sync.example.com/pbs.gif?gdpr=0&gdpr_consent=ANDFJDS&us_privacy=1-YY&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D", syncInfo.URL) + assert.Equal(t, "redirect", syncInfo.Type) + assert.EqualValues(t, 0, syncer.GDPRVendorID()) + assert.Equal(t, false, syncInfo.SupportCORS) +} From 1d4d64159f5f49fa0e45afc9b9cbdf2a224b07eb Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Thu, 3 Sep 2020 14:48:19 +0300 Subject: [PATCH 23/27] bypass bad commit --- config/config.go | 2 ++ exchange/adapter_map.go | 6 ++++++ openrtb_ext/bidders.go | 2 ++ openrtb_ext/imp_colossus.go | 6 ++++++ static/bidder-info/colossus.yaml | 11 +++++++++++ static/bidder-params/colossus.json | 15 +++++++++++++++ usersync/usersyncers/syncer.go | 2 ++ 7 files changed, 44 insertions(+) create mode 100644 openrtb_ext/imp_colossus.go create mode 100644 static/bidder-info/colossus.yaml create mode 100644 static/bidder-params/colossus.json diff --git a/config/config.go b/config/config.go index 59ba55ebe26..f785784311e 100755 --- a/config/config.go +++ b/config/config.go @@ -693,6 +693,7 @@ func (cfg *Configuration) setDerivedDefaults() { setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBeachfront, "https://sync.bfmio.com/sync_s2s?gdpr={{.GDPR}}&us_privacy={{.USPrivacy}}&url="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbeachfront%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%5Bio_cid%5D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBeintoo, "https://ib.beintoo.com/um?ssp=pbs&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbeintoo%26uid%3D%24UID") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderBrightroll, "https://pr-bh.ybp.yahoo.com/sync/appnexusprebidserver/?gdpr={{.GDPR}}&euconsent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&url="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dbrightroll%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") + setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderColossus, "https://sync.colossusssp.com/pbs.gif?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dadman%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%5BUID%5D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderConsumable, "https://e.serverbid.com/udb/9969/match?gdpr={{.GDPR}}&euconsent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dconsumable%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderConversant, "https://prebid-match.dotomi.com/match/bounce/current?version=1&networkId=72582&rurl="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dconversant%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderCpmstar, "https://server.cpmstar.com/usersync.aspx?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dcpmstar%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") @@ -911,6 +912,7 @@ func SetupViper(v *viper.Viper, filename string) { v.SetDefault("adapters.beachfront.extra_info", "{\"video_endpoint\":\"https://reachms.bfmio.com/bid.json?exchange_id\"}") v.SetDefault("adapters.beintoo.endpoint", "https://ib.beintoo.com/um") v.SetDefault("adapters.brightroll.endpoint", "http://east-bid.ybp.yahoo.com/bid/appnexuspbs") + v.SetDefault("adapters.colossus.endpoint", "http://colossusssp.com/?c=o&m=rtb") v.SetDefault("adapters.consumable.endpoint", "https://e.serverbid.com/api/v2") v.SetDefault("adapters.conversant.endpoint", "http://api.hb.ad.cpe.dotomi.com/cvx/server/hb/ortb/25") v.SetDefault("adapters.cpmstar.endpoint", "https://server.cpmstar.com/openrtbbidrq.aspx") diff --git a/exchange/adapter_map.go b/exchange/adapter_map.go index a160e87aad7..826822cc752 100755 --- a/exchange/adapter_map.go +++ b/exchange/adapter_map.go @@ -31,6 +31,7 @@ import ( "github.com/prebid/prebid-server/adapters/beachfront" "github.com/prebid/prebid-server/adapters/beintoo" "github.com/prebid/prebid-server/adapters/brightroll" + "github.com/prebid/prebid-server/adapters/colossus" "github.com/prebid/prebid-server/adapters/consumable" "github.com/prebid/prebid-server/adapters/conversant" "github.com/prebid/prebid-server/adapters/cpmstar" @@ -117,7 +118,12 @@ func newAdapterMap(client *http.Client, cfg *config.Configuration, infos adapter openrtb_ext.BidderAvocet: avocet.NewAvocetAdapter(cfg.Adapters[string(openrtb_ext.BidderAvocet)].Endpoint), openrtb_ext.BidderBeachfront: beachfront.NewBeachfrontBidder(cfg.Adapters[string(openrtb_ext.BidderBeachfront)].Endpoint, cfg.Adapters[string(openrtb_ext.BidderBeachfront)].ExtraAdapterInfo), openrtb_ext.BidderBeintoo: beintoo.NewBeintooBidder(cfg.Adapters[string(openrtb_ext.BidderBeintoo)].Endpoint), +<<<<<<< HEAD openrtb_ext.BidderBrightroll: brightroll.NewBrightrollBidder(cfg.Adapters[string(openrtb_ext.BidderBrightroll)].Endpoint, cfg.Adapters[string(openrtb_ext.BidderBrightroll)].ExtraAdapterInfo), +======= + openrtb_ext.BidderBrightroll: brightroll.NewBrightrollBidder(cfg.Adapters[string(openrtb_ext.BidderBrightroll)].Endpoint), + openrtb_ext.BidderColossus: colossus.NewColossusBidder(cfg.Adapters[string(openrtb_ext.BidderColossus)].Endpoint), +>>>>>>> 9107bd9... initial openrtb_ext.BidderConsumable: consumable.NewConsumableBidder(cfg.Adapters[string(openrtb_ext.BidderConsumable)].Endpoint), openrtb_ext.BidderCpmstar: cpmstar.NewCpmstarBidder(cfg.Adapters[string(openrtb_ext.BidderCpmstar)].Endpoint), openrtb_ext.BidderDatablocks: datablocks.NewDatablocksBidder(cfg.Adapters[string(openrtb_ext.BidderDatablocks)].Endpoint), diff --git a/openrtb_ext/bidders.go b/openrtb_ext/bidders.go index 876eeab86bd..0fed638aaf2 100755 --- a/openrtb_ext/bidders.go +++ b/openrtb_ext/bidders.go @@ -49,6 +49,7 @@ const ( BidderBeachfront BidderName = "beachfront" BidderBeintoo BidderName = "beintoo" BidderBrightroll BidderName = "brightroll" + BIdderColossus BidderName = "colossus" BidderConsumable BidderName = "consumable" BidderConversant BidderName = "conversant" BidderCpmstar BidderName = "cpmstar" @@ -133,6 +134,7 @@ var BidderMap = map[string]BidderName{ "beachfront": BidderBeachfront, "beintoo": BidderBeintoo, "brightroll": BidderBrightroll, + "colossus": BIdderColossus, "consumable": BidderConsumable, "conversant": BidderConversant, "cpmstar": BidderCpmstar, diff --git a/openrtb_ext/imp_colossus.go b/openrtb_ext/imp_colossus.go new file mode 100644 index 00000000000..8969000558d --- /dev/null +++ b/openrtb_ext/imp_colossus.go @@ -0,0 +1,6 @@ +package openrtb_ext + +// ExtImpColossus defines colossus specifiec param +type ExtImpColossus struct { + TagID string `json:"TagID"` +} diff --git a/static/bidder-info/colossus.yaml b/static/bidder-info/colossus.yaml new file mode 100644 index 00000000000..de71d0779f8 --- /dev/null +++ b/static/bidder-info/colossus.yaml @@ -0,0 +1,11 @@ +maintainer: + email: "aigolkin1991@gmail.com" +capabilities: + app: + mediaTypes: + - banner + - video + site: + mediaTypes: + - banner + - video \ No newline at end of file diff --git a/static/bidder-params/colossus.json b/static/bidder-params/colossus.json new file mode 100644 index 00000000000..10e7a9e3b38 --- /dev/null +++ b/static/bidder-params/colossus.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Colossus Adapter Params", + "description": "A schema which validates params accepted by the Colossus adapter", + + "type": "object", + "properties": { + "TagID": { + "type": "string", + "description": "An ID which identifies the colossus ad tag" + } + }, + "required" : [ "TagID" ] + } + \ No newline at end of file diff --git a/usersync/usersyncers/syncer.go b/usersync/usersyncers/syncer.go index 89540ea205b..c6ae984efc9 100755 --- a/usersync/usersyncers/syncer.go +++ b/usersync/usersyncers/syncer.go @@ -23,6 +23,7 @@ import ( "github.com/prebid/prebid-server/adapters/beachfront" "github.com/prebid/prebid-server/adapters/beintoo" "github.com/prebid/prebid-server/adapters/brightroll" + "github.com/prebid/prebid-server/adapters/colossus" "github.com/prebid/prebid-server/adapters/consumable" "github.com/prebid/prebid-server/adapters/conversant" "github.com/prebid/prebid-server/adapters/cpmstar" @@ -99,6 +100,7 @@ func NewSyncerMap(cfg *config.Configuration) map[openrtb_ext.BidderName]usersync insertIntoMap(cfg, syncers, openrtb_ext.BidderBeachfront, beachfront.NewBeachfrontSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderBeintoo, beintoo.NewBeintooSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderBrightroll, brightroll.NewBrightrollSyncer) + insertIntoMap(cfg, syncers, openrtb_ext.BidderColossus, colossus.NewColossusSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderConsumable, consumable.NewConsumableSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderConversant, conversant.NewConversantSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderCpmstar, cpmstar.NewCpmstarSyncer) From ec8af8a0e57900588c8fd80ecf2a5d1a071b1561 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Mon, 14 Sep 2020 21:13:12 +0300 Subject: [PATCH 24/27] fix conflict --- adapters/colossus/colossus.go | 4 ---- adapters/colossus/colossus_test.go | 4 ---- .../colossustest/exemplary/simple-banner.json | 12 ------------ .../colossustest/exemplary/simple-video.json | 4 ---- .../colossustest/exemplary/simple-web-banner.json | 4 ---- adapters/colossus/colossustest/params/banner.json | 4 ---- .../colossus/colossustest/params/race/banner.json | 4 ---- .../colossus/colossustest/params/race/video.json | 4 ---- adapters/colossus/colossustest/params/video.json | 4 ---- .../colossustest/supplemental/bad-imp-ext.json | 4 ---- .../colossustest/supplemental/bad_response.json | 4 ---- .../colossustest/supplemental/status-204.json | 6 ------ .../colossustest/supplemental/status-404.json | 7 ------- adapters/colossus/usersync_test.go | 8 -------- 14 files changed, 73 deletions(-) diff --git a/adapters/colossus/colossus.go b/adapters/colossus/colossus.go index 83abe216a8d..89cd49d2881 100644 --- a/adapters/colossus/colossus.go +++ b/adapters/colossus/colossus.go @@ -12,10 +12,6 @@ import ( "github.com/prebid/prebid-server/openrtb_ext" ) -<<<<<<< HEAD -// ColossusAdapter struct -======= ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 type ColossusAdapter struct { URI string } diff --git a/adapters/colossus/colossus_test.go b/adapters/colossus/colossus_test.go index af8236ee765..f4fd12f3fab 100644 --- a/adapters/colossus/colossus_test.go +++ b/adapters/colossus/colossus_test.go @@ -7,10 +7,6 @@ import ( ) func TestJsonSamples(t *testing.T) { -<<<<<<< HEAD - colossusAdapter := NewColossusBidder("http://colossusssp.com/?c=o&m=rtb") -======= colossusAdapter := NewColossusBidder("http://example.com/?c=o&m=rtb") ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 adapterstest.RunJSONBidderTest(t, "colossustest", colossusAdapter) } diff --git a/adapters/colossus/colossustest/exemplary/simple-banner.json b/adapters/colossus/colossustest/exemplary/simple-banner.json index fad23296859..1adc7010ed8 100644 --- a/adapters/colossus/colossustest/exemplary/simple-banner.json +++ b/adapters/colossus/colossustest/exemplary/simple-banner.json @@ -37,11 +37,7 @@ "httpCalls": [ { "expectedRequest": { -<<<<<<< HEAD - "uri": "http://colossusssp.com/?c=o&m=rtb", -======= "uri": "http://example.com/?c=o&m=rtb", ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 "body": { "id": "test-request-id", "imp": [ @@ -100,17 +96,9 @@ } } } -<<<<<<< HEAD - ], - "seat": "colossus" - } - ], - "cur": "USD" -======= ] } ] ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 } } } diff --git a/adapters/colossus/colossustest/exemplary/simple-video.json b/adapters/colossus/colossustest/exemplary/simple-video.json index 56b746d9a25..78516fcef31 100644 --- a/adapters/colossus/colossustest/exemplary/simple-video.json +++ b/adapters/colossus/colossustest/exemplary/simple-video.json @@ -30,11 +30,7 @@ "httpCalls": [ { "expectedRequest": { -<<<<<<< HEAD - "uri": "http://colossusssp.com/?c=o&m=rtb", -======= "uri": "http://example.com/?c=o&m=rtb", ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 "body": { "id": "test-request-id", "device": { diff --git a/adapters/colossus/colossustest/exemplary/simple-web-banner.json b/adapters/colossus/colossustest/exemplary/simple-web-banner.json index e6c741a5691..37baf3d97dd 100644 --- a/adapters/colossus/colossustest/exemplary/simple-web-banner.json +++ b/adapters/colossus/colossustest/exemplary/simple-web-banner.json @@ -36,11 +36,7 @@ "httpCalls": [ { "expectedRequest": { -<<<<<<< HEAD - "uri": "http://colossusssp.com/?c=o&m=rtb", -======= "uri": "http://example.com/?c=o&m=rtb", ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/params/banner.json b/adapters/colossus/colossustest/params/banner.json index 3cc8af20ab8..7c2643d4901 100644 --- a/adapters/colossus/colossustest/params/banner.json +++ b/adapters/colossus/colossustest/params/banner.json @@ -1,7 +1,3 @@ { "TagID": "61317" -<<<<<<< HEAD } -======= -} ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 diff --git a/adapters/colossus/colossustest/params/race/banner.json b/adapters/colossus/colossustest/params/race/banner.json index 3cc8af20ab8..7c2643d4901 100644 --- a/adapters/colossus/colossustest/params/race/banner.json +++ b/adapters/colossus/colossustest/params/race/banner.json @@ -1,7 +1,3 @@ { "TagID": "61317" -<<<<<<< HEAD } -======= -} ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 diff --git a/adapters/colossus/colossustest/params/race/video.json b/adapters/colossus/colossustest/params/race/video.json index 830d930a459..56f865c71d9 100644 --- a/adapters/colossus/colossustest/params/race/video.json +++ b/adapters/colossus/colossustest/params/race/video.json @@ -1,7 +1,3 @@ { "TagID": "61318" -<<<<<<< HEAD } -======= -} ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 diff --git a/adapters/colossus/colossustest/params/video.json b/adapters/colossus/colossustest/params/video.json index 830d930a459..56f865c71d9 100644 --- a/adapters/colossus/colossustest/params/video.json +++ b/adapters/colossus/colossustest/params/video.json @@ -1,7 +1,3 @@ { "TagID": "61318" -<<<<<<< HEAD } -======= -} ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 diff --git a/adapters/colossus/colossustest/supplemental/bad-imp-ext.json b/adapters/colossus/colossustest/supplemental/bad-imp-ext.json index 8a39f125089..13656337e5e 100644 --- a/adapters/colossus/colossustest/supplemental/bad-imp-ext.json +++ b/adapters/colossus/colossustest/supplemental/bad-imp-ext.json @@ -35,11 +35,7 @@ }, "expectedMakeRequestsErrors": [ { -<<<<<<< HEAD - "value": "unexpected end of JSON input", -======= "value": "Key path not found", ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 "comparison": "literal" } ] diff --git a/adapters/colossus/colossustest/supplemental/bad_response.json b/adapters/colossus/colossustest/supplemental/bad_response.json index fe2f10c23e8..c69b00c8e6e 100644 --- a/adapters/colossus/colossustest/supplemental/bad_response.json +++ b/adapters/colossus/colossustest/supplemental/bad_response.json @@ -35,11 +35,7 @@ }, "httpCalls": [{ "expectedRequest": { -<<<<<<< HEAD - "uri": "http://colossusssp.com/?c=o&m=rtb", -======= "uri": "http://example.com/?c=o&m=rtb", ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/supplemental/status-204.json b/adapters/colossus/colossustest/supplemental/status-204.json index 3d78c25d381..73f8bc71f23 100644 --- a/adapters/colossus/colossustest/supplemental/status-204.json +++ b/adapters/colossus/colossustest/supplemental/status-204.json @@ -33,15 +33,9 @@ "ifa": "sdjfksdf-dfsds-dsdg-dsgg" } }, -<<<<<<< HEAD - "httpCalls": [{ - "expectedRequest": { - "uri": "http://colossusssp.com/?c=o&m=rtb", -======= "httpCalls": [{ "expectedRequest": { "uri": "http://example.com/?c=o&m=rtb", ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/colossus/colossustest/supplemental/status-404.json b/adapters/colossus/colossustest/supplemental/status-404.json index b56ac31f953..676eb8bb2f4 100644 --- a/adapters/colossus/colossustest/supplemental/status-404.json +++ b/adapters/colossus/colossustest/supplemental/status-404.json @@ -33,17 +33,10 @@ "ifa": "sdjfksdf-dfsds-dsdg-dsgg" } }, -<<<<<<< HEAD - "httpCalls": [{ - "expectedRequest": { - "uri": "http://colossusssp.com/?c=o&m=rtb", - "body": { -======= "httpCalls": [{ "expectedRequest": { "uri": "http://example.com/?c=o&m=rtb", "body": { ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 "id": "test-request-id", "imp": [ { diff --git a/adapters/colossus/usersync_test.go b/adapters/colossus/usersync_test.go index 0e3b7b7b857..79d5483d528 100644 --- a/adapters/colossus/usersync_test.go +++ b/adapters/colossus/usersync_test.go @@ -20,11 +20,7 @@ func TestColossusSyncer(t *testing.T) { syncInfo, err := syncer.GetUsersyncInfo(privacy.Policies{ GDPR: gdpr.Policy{ Signal: "0", -<<<<<<< HEAD - Consent: "ANDFJDS", -======= Consent: "A", ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 }, CCPA: ccpa.Policy{ Value: "1-YY", @@ -32,11 +28,7 @@ func TestColossusSyncer(t *testing.T) { }) assert.NoError(t, err) -<<<<<<< HEAD - assert.Equal(t, "https://sync.example.com/pbs.gif?gdpr=0&gdpr_consent=ANDFJDS&us_privacy=1-YY&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D", syncInfo.URL) -======= assert.Equal(t, "https://sync.colossusssp.com/pbs.gif?gdpr=0&gdpr_consent=A&us_privacy=1-YY&redir=http%3A%2F%2Flocalhost%3A8000%2Fsetuid%3Fbidder%3Dcolossus%26uid%3D%5BUID%5D", syncInfo.URL) ->>>>>>> cd364bae287009a18923abfd943aaee06f03cdb2 assert.Equal(t, "redirect", syncInfo.Type) assert.EqualValues(t, 0, syncer.GDPRVendorID()) assert.Equal(t, false, syncInfo.SupportCORS) From a1b9bc959b0ca1627398418719d408f6a77b461e Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Mon, 14 Sep 2020 21:16:35 +0300 Subject: [PATCH 25/27] fix conflict --- .../{no-imp-ext-2.json => imp_ext_empty_object.json} | 2 +- .../supplemental/{no-imp-ext-1.json => imp_ext_string.json} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename adapters/colossus/colossustest/supplemental/{no-imp-ext-2.json => imp_ext_empty_object.json} (94%) rename adapters/colossus/colossustest/supplemental/{no-imp-ext-1.json => imp_ext_string.json} (89%) diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json b/adapters/colossus/colossustest/supplemental/imp_ext_empty_object.json similarity index 94% rename from adapters/colossus/colossustest/supplemental/no-imp-ext-2.json rename to adapters/colossus/colossustest/supplemental/imp_ext_empty_object.json index 3c5d010c9f2..e9c1f257aba 100644 --- a/adapters/colossus/colossustest/supplemental/no-imp-ext-2.json +++ b/adapters/colossus/colossustest/supplemental/imp_ext_empty_object.json @@ -31,7 +31,7 @@ }, "expectedMakeRequestsErrors": [ { - "value": "unexpected end of JSON input", + "value": "Key path not found", "comparison": "literal" } ] diff --git a/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json b/adapters/colossus/colossustest/supplemental/imp_ext_string.json similarity index 89% rename from adapters/colossus/colossustest/supplemental/no-imp-ext-1.json rename to adapters/colossus/colossustest/supplemental/imp_ext_string.json index 3ee4209c919..362a8fa4df8 100644 --- a/adapters/colossus/colossustest/supplemental/no-imp-ext-1.json +++ b/adapters/colossus/colossustest/supplemental/imp_ext_string.json @@ -31,7 +31,7 @@ }, "expectedMakeRequestsErrors": [ { - "value": "json: cannot unmarshal string into Go value of type adapters.ExtImpBidder", + "value": "Key path not found", "comparison": "literal" } ] From 014b212727a38a3758923d586defc3a168a6bcdc Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Mon, 14 Sep 2020 21:27:57 +0300 Subject: [PATCH 26/27] fix conflict --- exchange/adapter_map.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/exchange/adapter_map.go b/exchange/adapter_map.go index a160e87aad7..6e0a1a34610 100755 --- a/exchange/adapter_map.go +++ b/exchange/adapter_map.go @@ -31,6 +31,7 @@ import ( "github.com/prebid/prebid-server/adapters/beachfront" "github.com/prebid/prebid-server/adapters/beintoo" "github.com/prebid/prebid-server/adapters/brightroll" + "github.com/prebid/prebid-server/adapters/colossus" "github.com/prebid/prebid-server/adapters/consumable" "github.com/prebid/prebid-server/adapters/conversant" "github.com/prebid/prebid-server/adapters/cpmstar" @@ -118,6 +119,7 @@ func newAdapterMap(client *http.Client, cfg *config.Configuration, infos adapter openrtb_ext.BidderBeachfront: beachfront.NewBeachfrontBidder(cfg.Adapters[string(openrtb_ext.BidderBeachfront)].Endpoint, cfg.Adapters[string(openrtb_ext.BidderBeachfront)].ExtraAdapterInfo), openrtb_ext.BidderBeintoo: beintoo.NewBeintooBidder(cfg.Adapters[string(openrtb_ext.BidderBeintoo)].Endpoint), openrtb_ext.BidderBrightroll: brightroll.NewBrightrollBidder(cfg.Adapters[string(openrtb_ext.BidderBrightroll)].Endpoint, cfg.Adapters[string(openrtb_ext.BidderBrightroll)].ExtraAdapterInfo), + openrtb_ext.BidderColossus: colossus.NewColossusBidder(cfg.Adapte[string(openrtb_ext.BidderColossus)].Endpoint), openrtb_ext.BidderConsumable: consumable.NewConsumableBidder(cfg.Adapters[string(openrtb_ext.BidderConsumable)].Endpoint), openrtb_ext.BidderCpmstar: cpmstar.NewCpmstarBidder(cfg.Adapters[string(openrtb_ext.BidderCpmstar)].Endpoint), openrtb_ext.BidderDatablocks: datablocks.NewDatablocksBidder(cfg.Adapters[string(openrtb_ext.BidderDatablocks)].Endpoint), From e32b3e78aa94654eb4a7bdd1fdde8c1d6f164005 Mon Sep 17 00:00:00 2001 From: Aiholkin Date: Mon, 14 Sep 2020 21:28:59 +0300 Subject: [PATCH 27/27] fix conflict --- exchange/adapter_map.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exchange/adapter_map.go b/exchange/adapter_map.go index 6e0a1a34610..5bb788b63b9 100755 --- a/exchange/adapter_map.go +++ b/exchange/adapter_map.go @@ -119,7 +119,7 @@ func newAdapterMap(client *http.Client, cfg *config.Configuration, infos adapter openrtb_ext.BidderBeachfront: beachfront.NewBeachfrontBidder(cfg.Adapters[string(openrtb_ext.BidderBeachfront)].Endpoint, cfg.Adapters[string(openrtb_ext.BidderBeachfront)].ExtraAdapterInfo), openrtb_ext.BidderBeintoo: beintoo.NewBeintooBidder(cfg.Adapters[string(openrtb_ext.BidderBeintoo)].Endpoint), openrtb_ext.BidderBrightroll: brightroll.NewBrightrollBidder(cfg.Adapters[string(openrtb_ext.BidderBrightroll)].Endpoint, cfg.Adapters[string(openrtb_ext.BidderBrightroll)].ExtraAdapterInfo), - openrtb_ext.BidderColossus: colossus.NewColossusBidder(cfg.Adapte[string(openrtb_ext.BidderColossus)].Endpoint), + openrtb_ext.BidderColossus: colossus.NewColossusBidder(cfg.Adapters[string(openrtb_ext.BidderColossus)].Endpoint), openrtb_ext.BidderConsumable: consumable.NewConsumableBidder(cfg.Adapters[string(openrtb_ext.BidderConsumable)].Endpoint), openrtb_ext.BidderCpmstar: cpmstar.NewCpmstarBidder(cfg.Adapters[string(openrtb_ext.BidderCpmstar)].Endpoint), openrtb_ext.BidderDatablocks: datablocks.NewDatablocksBidder(cfg.Adapters[string(openrtb_ext.BidderDatablocks)].Endpoint),