Skip to content

trailofbits/anchor-coverage

Repository files navigation

anchor-coverage

A wrapper around anchor test for computing test coverage

anchor-coverage requires a patched solana-test-validator (see below). The patch is known to work with Agave v3.0.8.

Steps to use

  1. Download, unzip, and untar a patched solana-test-validator from sbpf-coverage's Releases.

  2. Add the following to the [profile.release] section of your Anchor project's root Cargo.toml:

    debug = true

    This tells Cargo to build with debug information.

  3. Run anchor-coverage as follows:

    anchor-coverage [ANCHOR_TEST_ARGS]...

    This will create an sbf_trace_dir directory with an LCOV file for each executable run.

  4. Run the following command to generate and open an HTML coverage report:

    genhtml --output-directory coverage sbf_trace_dir/*.lcov && open coverage/index.html

Known problems

anchor-coverage uses Dwarf debug information, not LLVM instrumentation-based coverage, to map instructions to source code locations. This can have confusing implications. For example:

  • one line can appear directly before another
  • the latter line can have a greater number of hits

The reason is that multiple instructions can map to the same source line. If multiple instructions map to the latter source line, it can have a greater number of hits than the former.

The following is an example. The line with the assignment to signer is hit only once. But the immediately following line is hit multiple times, because the instructions that map to it are interspersed with instructions that map elsewhere.

            5 :     pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
            1 :         let signer = &ctx.accounts.signer;
            4 :         let pubkey = signer.signer_key().unwrap();
           11 :         msg!("Signer's pubkey: {}", pubkey);
            1 :         Ok(())
            1 :     }

Troubleshooting

  • If you see:
    Line hits: 0
    
    Check that you added debug = true to the [profile.release] section of your Anchor project's root Cargo.toml.

Links

About

A wrapper around `anchor test` for computing test coverage

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages