2 # Run `cargo test` on an installed Debian crate, e.g. in an autopkgtest.
4 # Requires dev-dependencies to be installed. If you give extra flags such as
5 # "--all-features", then these features' dependencies must also be installed.
7 # This script also swallows some known false-positive test failures, so you
8 # don't have to set test_is_broken everywhere in your debcargo.toml configs.
15 if [ -z "$pkg" -o -z "$ver" ]; then
16 echo >&2 "Usage: $0 <crate> <version> [<extra test flags, e.g. --all-features>]"
21 pkgdir
="/usr/share/cargo/registry/${pkg}-${ver}"
22 if [ ! -d "$pkgdir" ]; then
23 echo >&2 "crate directory not found: $pkgdir"
29 # https://stackoverflow.com/a/14812383 inside "trap" avoids running handler twice
30 trap 'excode=$?; rm -rf "'"$rundir"'"; trap - EXIT' EXIT HUP INT QUIT PIPE TERM
32 # set envvars necessary for cargo-debian-wrapper
34 export DEB_CARGO_CRATE
="${pkg}_${ver}"
35 export CARGO_HOME
="$rundir/debian/cargo_home"
36 mkdir
-p "$CARGO_HOME"
37 mkdir
-p "$rundir/registry"
39 .
<(dpkg-buildflags
--export)
40 .
<(dpkg-architecture
-s)
41 RUST_TYPE
="$(rustc --version --verbose | sed -ne 's/^host: //p')"
42 export DEB_HOST_RUST_TYPE
="$RUST_TYPE"
43 export DEB_BUILD_RUST_TYPE
="$RUST_TYPE"
44 export DEB_TARGET_RUST_TYPE
="$RUST_TYPE"
46 export CARGO_TARGET_DIR
="$rundir/target"
47 export PATH
="/usr/share/cargo/bin:$PATH"
51 if [ -t 2 ]; then flags
="--color=always"; export RUSTDOCFLAGS
="--color=always"; fi
56 { cargo
test $flags "$@" 2>&1; echo "$?" > "$rundir/run-$n.ec"; } |
tee "$rundir/run-$n.log"
57 sed -i -e 's/\x1b\[[0-9;]*m//g' "$rundir/run-$n.log" # rm ansi colour codes
58 local x
="$(< "$rundir/run-
$n.ec
")"
59 if [ "$x" = "0" ]; then
62 local e
="$(egrep -o '^error\[E[0-9]+\]' "$rundir/run-
$n.log
" | sort -u | tr '\n' ',')"
63 # some crates like to update their old versions to depend on their new
64 # versions, e.g. rand-core. unfortunately this breaks cargo test, see
65 # https://github.com/rust-lang/cargo/issues/6819. so just ignore them.
66 if [ "$e" = "error[E0463],error[E0465]," ]; then
67 echo "cargo-auto-test: ignore test failure due to upstream #6819: $e"
75 cargo prepare-debian
"$rundir/registry" --link-from-system
79 if [ "$x" = "0" ]; then exit 0; fi
80 if ! egrep -q '^error\[E0554\]' "$rundir/run-0.log"; then exit "$x"; fi
83 echo "----------------------------------------------------------------"
84 echo "cargo-auto-test: re-running test with RUSTC_BOOTSTRAP due to E0554"
85 RUSTC_BOOTSTRAP
=1 run_test
1 "$@"