12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/usr/bin/env zx
- import 'zx/globals';
- import { existsSync } from 'fs';
- import { cliArguments, workingDirectory } from '../utils.mjs';
- // Directory where the fixtures are generated.
- const FIXTURES_DIR = path.join(workingDirectory, 'target', 'fixtures');
- // Directory of the SPL Token program.
- const SPL_TOKEN_DIR = path.join(workingDirectory, 'program');
- // Directory of the SBF program.
- const SBF_OUTPUT_DIR = path.join(workingDirectory, 'target', 'deploy');
- const [command, ...args] = cliArguments();
- switch (command) {
- case 'clean':
- await clean();
- break;
- case 'generate':
- await generate();
- break;
- case 'run':
- await run(args);
- break;
- default:
- throw new Error(`Unknown command: ${command}`);
- }
- async function clean() {
- await $`rm -rf ${FIXTURES_DIR}`;
- }
- async function generate() {
- if (existsSync(FIXTURES_DIR)) {
- echo(chalk.yellow('[ WARNING ]'), `Fixtures directory already exists.`);
- } else {
- await $`mkdir ${FIXTURES_DIR}`;
- // Fixtures are generated from the SPL Token program.
- cd(SPL_TOKEN_DIR);
- await $`RUST_LOG=error EJECT_FUZZ_FIXTURES=${FIXTURES_DIR} cargo test-sbf --features mollusk-svm/fuzz`;
- }
- }
- async function run(args) {
- if (!existsSync(FIXTURES_DIR)) {
- throw new Error(`Fixtures directory does not exist: ${FIXTURES_DIR}`);
- }
- const [programName] = args;
- if (!programName) {
- throw new Error('The name of the program file must be provided.');
- }
- await $`mollusk execute-fixture \
- ${path.join(SBF_OUTPUT_DIR, programName + '.so')} \
- ${FIXTURES_DIR} \
- TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA \
- --ignore-compute-units`;
- }
|