forked from bytecodealliance/wasmtime
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test-all.sh
executable file
·104 lines (89 loc) · 3.1 KB
/
test-all.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/bin/bash
set -euo pipefail
# This is the top-level test script:
#
# - Check code formatting.
# - Make a debug build.
# - Make a release build.
# - Run unit tests for all Rust crates (including the filetests)
# - Build API documentation.
# - Optionally, run fuzzing.
#
# All tests run by this script should be passing at all times.
# Repository top-level directory.
topdir=$(dirname "$0")
cd "$topdir"
function banner {
echo "====== $* ======"
}
# Run rustfmt if we have it.
banner "Rust formatting"
if cargo +stable fmt -- --version > /dev/null ; then
if ! "$topdir/format-all.sh" --check ; then
echo "Formatting diffs detected! Run \"cargo fmt --all\" to correct."
exit 1
fi
else
echo "cargo-fmt not available; formatting not checked!"
echo
echo "If you are using rustup, rustfmt can be installed via"
echo "\"rustup component add --toolchain=stable rustfmt-preview\", or see"
echo "https://github.com/rust-lang-nursery/rustfmt for more information."
fi
# Make sure the code builds in release mode.
banner "Rust release build"
cargo build --release
# Make sure the code builds in debug mode.
banner "Rust debug build"
cargo build
# Run the tests. We run these in debug mode so that assertions are enabled.
banner "Rust unit tests"
# TODO: lightbeam currently requires rust nightly, so don't try to run the
# tests here. Name all the other packages, rather than using --all. We'll
# run the lightbeam tests below if nightly is available.
#RUST_BACKTRACE=1 cargo test --all
RUST_BACKTRACE=1 cargo test \
--package wasmtime \
--package wasmtime-api \
--package wasmtime-wasi \
--package wasmtime-wast \
--package wasmtime-debug \
--package wasmtime-environ \
--package wasmtime-runtime \
--package wasmtime-jit \
--package wasmtime-interface-types \
--package wasmtime-obj \
# Test wasmtime-wasi-c, which doesn't support Windows.
if [ "${OS:-Not}" != "Windows_NT" ]; then
RUST_BACKTRACE=1 cargo test \
--package wasmtime-wasi-c
fi
# Make sure the documentation builds.
banner "Rust documentation: $topdir/target/doc/wasmtime/index.html"
cargo doc
# Ensure fuzzer works by running it with a single input
# Note LSAN is disabled due to https://github.com/google/sanitizers/issues/764
banner "cargo fuzz check"
if rustup toolchain list | grep -q nightly; then
if cargo install --list | grep -q cargo-fuzz; then
echo "cargo-fuzz found"
else
echo "installing cargo-fuzz"
cargo +nightly install cargo-fuzz
fi
fuzz_module="1340712d77d3db3c79b4b0c1494df18615485480"
ASAN_OPTIONS=detect_leaks=0 \
cargo +nightly fuzz run compile \
"$topdir/fuzz/corpus/compile/$fuzz_module"
# Nightly is available, so also run lightbeam's tests, which we
# skipped earlier.
cargo +nightly test --features lightbeam --package lightbeam
cargo +nightly test --features lightbeam
# Also run wasmtime-py and wasmtime-rust's tests.
RUST_BACKTRACE=1 cargo +nightly test \
--package wasmtime-py \
--package wasmtime-rust
else
echo "nightly toolchain not found, skipping fuzz target integration test"
fi
banner "OK"