| // META: script=/resources/testdriver.js |
| // META: script=/common/utils.js |
| // META: script=resources/fledge-util.js |
| // META: timeout=long |
| |
| "use strict;" |
| |
| // The tests in this file focus on simple auctions (one bidder, one seller, one |
| // origin, one frame) which have no winning bid, either due to errors or due to |
| // there being no bids, except where tests fit better with another set of tests. |
| |
| // Errors common to bidding and decision logic scripts. These atrings will be |
| // appended to script URLs to make the python scripts that generate bidding |
| // logic and decision logic scripts with errors. |
| const COMMON_SCRIPT_ERRORS = [ |
| 'error=close-connection', |
| 'error=http-error', |
| 'error=no-content-type', |
| 'error=wrong-content-type', |
| 'error=bad-allow-fledge', |
| 'error=fledge-not-allowed', |
| 'error=no-allow-fledge', |
| 'error=no-body', |
| ]; |
| |
| const BIDDING_LOGIC_SCRIPT_ERRORS = [ |
| ...COMMON_SCRIPT_ERRORS, |
| 'error=no-generateBid', |
| 'generateBid=throw 1;', |
| 'generateBid=This does not compile', |
| // Default timeout test. Doesn't check how long timing out takes. |
| 'generateBid=while(1);', |
| // Bad return values: |
| 'generateBid=return 5;', |
| 'generateBid=return "Foo";', |
| 'generateBid=return interestGroup.ads[0].renderUrl;', |
| 'generateBid=return {bid: 1, render: "https://not-in-ads-array.test/"};', |
| 'generateBid=return {bid: 1};', |
| 'generateBid=return {render: interestGroup.ads[0].renderUrl};', |
| // These are not bidding rather than errors. |
| 'generateBid=return {bid:0, render: interestGroup.ads[0].renderUrl};', |
| 'generateBid=return {bid:-1, render: interestGroup.ads[0].renderUrl};', |
| ]; |
| |
| const DECISION_LOGIC_SCRIPT_ERRORS = [ |
| ...COMMON_SCRIPT_ERRORS, |
| 'error=no-scoreAd', |
| 'scoreAd=throw 1;', |
| 'scoreAd=This does not compile', |
| // Default timeout test. Doesn't check how long timing out takes. |
| 'scoreAd=while(1);', |
| // Bad return values: |
| 'scoreAd=return "Foo";', |
| 'scoreAd=return {desirability: "Foo"};', |
| // These are rejecting the bid rather than errors. |
| 'scoreAd=return 0;', |
| 'scoreAd=return -1;', |
| 'scoreAd=return {desirability: 0};', |
| 'scoreAd=return {desirability: -1};', |
| ]; |
| |
| for (error of BIDDING_LOGIC_SCRIPT_ERRORS) { |
| promise_test((async (error, test) => { |
| let biddingLogicURL = `${BASE_URL}resources/bidding-logic.sub.py?${error}`; |
| await runBasicFledgeTestExpectingNoWinner( |
| test, |
| {interestGroupOverrides: {biddingLogicURL: biddingLogicURL}} |
| ); |
| }).bind(undefined, error), `Bidding logic script: ${error}`); |
| } |
| |
| for (error of DECISION_LOGIC_SCRIPT_ERRORS) { |
| promise_test((async (error, test) => { |
| let decisionLogicURL = |
| `${BASE_URL}resources/decision-logic.sub.py?${error}`; |
| await runBasicFledgeTestExpectingNoWinner( |
| test, { auctionConfigOverrides: { decisionLogicURL: decisionLogicURL } } |
| ); |
| }).bind(undefined, error), `Decision logic script: ${error}`); |
| } |