// META: script=/resources/testdriver.js // META: script=/common/utils.js // META: script=resources/fledge-util.sub.js // META: script=/common/subset-tests.js // META: timeout=long // META: variant=?1-5 // META: variant=?6-10 // META: variant=?11-15 // META: variant=?16-20 // META: variant=?21-25 // META: variant=?26-30 // META: variant=?31-35 // META: variant=?36-40 // META: variant=?41-45 // META: variant=?46-last "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 Protected Audiences network requests. These strings will be // appended to URLs to make the Python scripts that generate responses respond // with errors. const COMMON_NETWORK_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_NETWORK_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_NETWORK_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};' ]; const BIDDING_WASM_HELPER_ERRORS = [ ...COMMON_NETWORK_ERRORS, 'error=not-wasm' ]; for (error of BIDDING_LOGIC_SCRIPT_ERRORS) { subsetTest(promise_test, (async (error, test) => { let biddingLogicURL = `${BASE_URL}resources/bidding-logic.sub.py?${error}`; await joinGroupAndRunBasicFledgeTestExpectingNoWinner( test, {interestGroupOverrides: {biddingLogicURL: biddingLogicURL}} ); }).bind(undefined, error), `Bidding logic script: ${error}`); } for (error of DECISION_LOGIC_SCRIPT_ERRORS) { subsetTest(promise_test, (async (error, test) => { let decisionLogicURL = `${BASE_URL}resources/decision-logic.sub.py?${error}`; await joinGroupAndRunBasicFledgeTestExpectingNoWinner( test, { auctionConfigOverrides: { decisionLogicURL: decisionLogicURL } } ); }).bind(undefined, error), `Decision logic script: ${error}`); } for (error of BIDDING_WASM_HELPER_ERRORS) { subsetTest(promise_test, (async (error, test) => { let biddingWasmHelperURL = `${BASE_URL}resources/wasm-helper.py?${error}`; await joinGroupAndRunBasicFledgeTestExpectingNoWinner( test, { interestGroupOverrides: { biddingWasmHelperURL: biddingWasmHelperURL } } ); }).bind(undefined, error), `Bidding WASM helper: ${error}`); }