MagicBlock ephemeral-vrfをcargo testすると「No such file or directory」エラー

オンチェーン上でランダムロジック(randomness)が実装できる Verifiable Random Function (VRF) を試していたときに発生したエラー。

現象

rootディレクトリで以下を実行。

% cargo build-sbf
% cargo test-sbf --features test-sbf

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests/test.rs (target/debug/deps/test-08f9f6240c3e085c)

running 1 test
[2025-04-13T15:01:23.640719000Z INFO  solana_program_test] "ephemeral_vrf_program" SBF program from /Users/256hax/Desktop/tmp/ephemeral-vrf/target/deploy/ephemeral_vrf_program.so, modified 17 minutes, 57 seconds, 369 ms, 423 µs and 380 ns ago
test run_test ... FAILED

failures:

---- run_test stdout ----

thread 'run_test' panicked at /Users/256hax/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/solana-program-test-2.1.16/src/lib.rs:467:31:
Failed to open "tests/integration/use-randomness/target/deploy/use_randomness.so": No such file or directory (os error 2)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace


failures:
    run_test

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

error: test failed, to rerun pass `--test test`

原因

実行ディレクトリが誤っているため。

対策

programsに移動して実行する。

% cd programs
% cargo build-sbf
% cargo test-sbf --features test-sbf

test run_test ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s

   Doc-tests ephemeral_vrf_program

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

備考

anchor testも実行できる。

% cd program/tests/integration/use-randomness
% npm i
% anchor test

  use-randomness
Request randomness Z37DbLBGi2w5Pco6LiEKjLYkeGxrrn3YZXWBaZifjTMm1NP3BDsVcihetDvLNwGK5qhqXyu6U5cThFqdFwoQ3Tk
    ✔ Request randomness (411ms)
Request randomness 5iDcCzb9BNqW87Rj3iaYR7mMhbmfXU8grddbg6YwmSkZFbYfEH2qff3YjooFnP3b6wzzhz8JP8N3gCYPNrHGnXqv
    ✔ Simpler request randomness (464ms)


  2 passing (878ms)

✨  Done in 3.13s.