// 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-last
"use strict;"
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
`sendReportTo('${createSellerReportURL(uuid)}');`,
reportWinSuccessCondition:
'sellerSignals === null',
reportWin:
`sendReportTo('${createBidderReportURL(uuid)}');` },
// expectedReportURLs:
[createSellerReportURL(uuid), createBidderReportURL(uuid)]
);
}, 'Both send reports, seller passes nothing to bidder.');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
`sendReportTo('${createSellerReportURL(uuid)}');`,
reportWin:
'' },
// expectedReportURLs:
[createSellerReportURL(uuid)]
);
}, 'Only seller sends a report');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
`sendReportTo('${createSellerReportURL(uuid)}');`,
reportWin:
'throw new Error("Very serious exception")' },
// expectedReportURLs:
[createSellerReportURL(uuid)]
);
}, 'Only seller sends a report, bidder throws an exception');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
`sendReportTo('${createSellerReportURL(uuid)}');` },
// expectedReportURLs:
[createSellerReportURL(uuid)]
);
}, 'Only seller sends a report, bidder has no reportWin() method');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
'',
reportWinSuccessCondition:
'sellerSignals === null',
reportWin:
`sendReportTo('${createBidderReportURL(uuid)}');` },
// expectedReportURLs:
[createBidderReportURL(uuid)]
);
}, 'Only bidder sends a report');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
'return "foo";',
reportWinSuccessCondition:
'sellerSignals === "foo"',
reportWin:
`sendReportTo('${createBidderReportURL(uuid)}');` },
// expectedReportURLs:
[createBidderReportURL(uuid)]
);
}, 'Only bidder sends a report, seller passes a message to bidder');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
'throw new Error("Very serious exception")',
reportWinSuccessCondition:
'sellerSignals === null',
reportWin:
`sendReportTo('${createBidderReportURL(uuid)}');` },
// expectedReportURLs:
[createBidderReportURL(uuid)]
);
}, 'Only bidder sends a report, seller throws an exception');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportWinSuccessCondition:
'sellerSignals === null',
reportWin:
`sendReportTo('${createBidderReportURL(uuid)}');` },
// expectedReportURLs:
[createBidderReportURL(uuid)]
);
}, 'Only bidder sends a report, seller has no reportResult() method');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
`sendReportTo('${createSellerReportURL(uuid)}');
sendReportTo('${createSellerReportURL(uuid)}');
return 5;`,
reportWinSuccessCondition:
'sellerSignals === null',
reportWin:
`sendReportTo('${createBidderReportURL(uuid)}');` },
// expectedReportURLs:
[createBidderReportURL(uuid)]
);
}, 'Seller calls sendReportTo() twice, which throws an exception.');
subsetTest(promise_test, async test => {
const uuid = generateUuid(test);
await runReportTest(
test, uuid,
{ reportResult:
`sendReportTo('${createSellerReportURL(uuid)}');`,
reportWin:
`sendReportTo('${createBidderReportURL(uuid)}');
sendReportTo('${createBidderReportURL(uuid)}');` },
// expectedReportURLs:
[createSellerReportURL(uuid)]
);
// Seller reports may be sent before bidder reports, since reportWin()
// takes output from reportResult() as input. Wait to make sure the
// bidder report URL really is not being requested.
await new Promise(resolve => test.step_timeout(resolve, 200));
await waitForObservedRequests(uuid, [createSellerReportURL(uuid)]);
}, 'Bidder calls sendReportTo() twice, which throws an exception.');