From b3b76664bb57924a1f13cf7214857c604329318b Mon Sep 17 00:00:00 2001 From: Chris Hibbert Date: Mon, 16 Dec 2024 08:45:04 -0800 Subject: [PATCH] test: add proposal w/300 E(chainTimerService).getTimerBrand() calls --- .../builders/scripts/testing/provokeBOYD.js | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 packages/builders/scripts/testing/provokeBOYD.js diff --git a/packages/builders/scripts/testing/provokeBOYD.js b/packages/builders/scripts/testing/provokeBOYD.js new file mode 100644 index 00000000000..40d607c68c8 --- /dev/null +++ b/packages/builders/scripts/testing/provokeBOYD.js @@ -0,0 +1,49 @@ +/** + * @file call getTimerBrand() 300 times in hopes of provoking BOYD. + */ +import { makeTracer } from '@agoric/internal'; +import { E } from '@endo/far'; + +/// +/** @import {Instance} from '@agoric/zoe/src/zoeService/utils.js'; */ + +const trace = makeTracer('provokeBOYD', true); + +/** + * @param {BootstrapPowers} powers + */ +export const provokeBOYD = async ({ consume: { chainTimerService } }) => { + trace(provokeBOYD.name); + await null; + + for (let i = 0; i < 300; i += 1) { + await E(chainTimerService).getTimerBrand(); + } + trace('done'); +}; +harden(provokeBOYD); + +export const getManifestForProvokeBOYD = () => { + return { + manifest: { + [provokeBOYD.name]: { + consume: { chainTimerService: true }, + }, + }, + }; +}; + +/** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */ +export const defaultProposalBuilder = async () => + harden({ + sourceSpec: '@agoric/builders/scripts/testing/provokeBOYD.js', + getManifestCall: ['getManifestForProvokeBOYD'], + }); + +/** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */ +export default async (homeP, endowments) => { + const dspModule = await import('@agoric/deploy-script-support'); + const { makeHelpers } = dspModule; + const { writeCoreEval } = await makeHelpers(homeP, endowments); + await writeCoreEval(provokeBOYD.name, defaultProposalBuilder); +};