docs: Add a section about how to test Wasmtime
This commit is contained in:
@@ -30,6 +30,7 @@
|
|||||||
- [Sandboxing](./security-sandboxing.md)
|
- [Sandboxing](./security-sandboxing.md)
|
||||||
- [Contributing](contributing.md)
|
- [Contributing](contributing.md)
|
||||||
- [Building](./contributing-building.md)
|
- [Building](./contributing-building.md)
|
||||||
|
- [Testing](./contributing-testing.md)
|
||||||
- [CI](./contributing-ci.md)
|
- [CI](./contributing-ci.md)
|
||||||
- [Governance](./contributing-governance.md)
|
- [Governance](./contributing-governance.md)
|
||||||
- [Code of Conduct](./contributing-coc.md)
|
- [Code of Conduct](./contributing-coc.md)
|
||||||
|
|||||||
106
docs/contributing-testing.md
Normal file
106
docs/contributing-testing.md
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
# Testing
|
||||||
|
|
||||||
|
This section describes how to run Wasmtime's tests and add new tests.
|
||||||
|
|
||||||
|
Before continuing, make sure you can [build
|
||||||
|
Wasmtime](./contributing-building.html) successfully. Can't run the tests if you
|
||||||
|
can't build it!
|
||||||
|
|
||||||
|
## Running All Tests
|
||||||
|
|
||||||
|
To run all of Wasmtime's tests, execute this command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cargo test --all
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also exclude a particular crate from testing with `--exclude`. For
|
||||||
|
example, if you want to avoid testing the `wastime-fuzzing` crate — which
|
||||||
|
requires that `libclang` is installed on your system, and for some reason maybe
|
||||||
|
you don't have it — you can run:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cargo test --all --exclude wasmtime-fuzzing
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing a Specific Crate
|
||||||
|
|
||||||
|
You can test a particular Wasmtime crate with `cargo test -p
|
||||||
|
wasmtime-whatever`. For example, to test the `wasmtime-environ` crate, execute
|
||||||
|
this command:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cargo test -p wasmtime-environ
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, you can `cd` into the crate's directory, and run `cargo test`
|
||||||
|
there, without needing to supply the `-p` flag:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd crates/environ/
|
||||||
|
cargo test
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running the Wasm Spec Tests
|
||||||
|
|
||||||
|
The spec testsuite itself is in a git submodule, so make sure you've
|
||||||
|
checked it out and initialized its submodule:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git submodule update --init
|
||||||
|
```
|
||||||
|
|
||||||
|
When the submodule is checked out, Wasmtime runs the Wasm spec testsuite as part
|
||||||
|
of testing the `wasmtime-cli` crate:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cargo test -p wasmtime-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
## Adding New Tests
|
||||||
|
|
||||||
|
### Adding Rust's `#[test]`-Style Tests
|
||||||
|
|
||||||
|
For very "unit-y" tests, we add `test` modules in the same `.rs` file as the
|
||||||
|
code that is being tested. These `test` modules are configured to only get
|
||||||
|
compiled during testing with `#[cfg(test)]`.
|
||||||
|
|
||||||
|
```rust
|
||||||
|
// some code...
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn some_test_for_that_code() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you're writing a unit test and a `test` module doesn't already exist, you can
|
||||||
|
create one.
|
||||||
|
|
||||||
|
For more "integration-y" tests, we create a `tests` directory within the crate,
|
||||||
|
and put the tests inside there. For example, there are various code
|
||||||
|
cache-related tests at `crates/environ/tests/cache_*.rs`. Always feel free to
|
||||||
|
add a `tests` directory to a crate, if you want to add a new test and there
|
||||||
|
aren't any existing tests.
|
||||||
|
|
||||||
|
### Adding Specification-Style Wast Tests
|
||||||
|
|
||||||
|
We use the spec testsuite as-is and without custom patches or a forked
|
||||||
|
version. If you have a new test that you want to add to it, make sure it makes
|
||||||
|
sense for every Wasm implementation to run your test (i.e. it isn't
|
||||||
|
Wasmtime-specific) and send a pull request
|
||||||
|
[upstream](https://github.com/WebAssembly/testsuite/). Once it is accepted in
|
||||||
|
the upstream repo, we can update our git submodule and we'll start running the
|
||||||
|
new tests.
|
||||||
|
|
||||||
|
Alternatively, if you have a Wasmtime-specific test that you'd like to write in
|
||||||
|
Wast and use the Wast-style assertions, you can add it to our "misc
|
||||||
|
testsuite". The misc testsuite uses the same syntax and assertions as the spec
|
||||||
|
testsuite, but lives in `tests/misc_testsuite`. Feel free to add new tests to
|
||||||
|
existing `tests/misc_testsuite/*.wast` files or create new ones as needed. These
|
||||||
|
tests are run as part of the `wasmtime-cli` crate.
|
||||||
Reference in New Issue
Block a user