fixtures.mjs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/env zx
  2. import 'zx/globals';
  3. import { existsSync } from 'fs';
  4. import { cliArguments, workingDirectory } from '../utils.mjs';
  5. // Directory where the fixtures are generated.
  6. const FIXTURES_DIR = path.join(workingDirectory, 'target', 'fixtures');
  7. // Directory of the SPL Token program.
  8. const SPL_TOKEN_DIR = path.join(workingDirectory, 'program');
  9. // Directory of the SBF program.
  10. const SBF_OUTPUT_DIR = path.join(workingDirectory, 'target', 'deploy');
  11. const [command, ...args] = cliArguments();
  12. switch (command) {
  13. case 'clean':
  14. await clean();
  15. break;
  16. case 'generate':
  17. await generate();
  18. break;
  19. case 'run':
  20. await run(args);
  21. break;
  22. default:
  23. throw new Error(`Unknown command: ${command}`);
  24. }
  25. async function clean() {
  26. await $`rm -rf ${FIXTURES_DIR}`;
  27. }
  28. async function generate() {
  29. if (existsSync(FIXTURES_DIR)) {
  30. echo(chalk.yellow('[ WARNING ]'), `Fixtures directory already exists.`);
  31. } else {
  32. await $`mkdir ${FIXTURES_DIR}`;
  33. // Fixtures are generated from the SPL Token program.
  34. cd(SPL_TOKEN_DIR);
  35. await $`RUST_LOG=error EJECT_FUZZ_FIXTURES=${FIXTURES_DIR} cargo test-sbf --features mollusk-svm/fuzz`;
  36. }
  37. }
  38. async function run(args) {
  39. if (!existsSync(FIXTURES_DIR)) {
  40. throw new Error(`Fixtures directory does not exist: ${FIXTURES_DIR}`);
  41. }
  42. const [programName] = args;
  43. if (!programName) {
  44. throw new Error('The name of the program file must be provided.');
  45. }
  46. await $`mollusk execute-fixture \
  47. ${path.join(SBF_OUTPUT_DIR, programName + '.so')} \
  48. ${FIXTURES_DIR} \
  49. TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA \
  50. --ignore-compute-units`;
  51. }