Skip to content

Commit ed0e047

Browse files
committed
tests: Improve testing infrastructure
- Cleanup .travis.yml - Loops over std/no_std targets - Remove deprecated/useless keys - No more `cd`, we just use `--package`. - Improve tests - Main `getrandom` tests are now unit test modules instead of integration tests, making the code cleaner. - The custom RNG crates now use this common module as part of their integration tests. - No more weird test-only features needed to get the crate to build. Signed-off-by: Joe Richey <[email protected]>
1 parent 8ac79d4 commit ed0e047

File tree

9 files changed

+69
-97
lines changed

9 files changed

+69
-97
lines changed

.travis.yml

+31-54
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
language: rust
2-
sudo: false
2+
os: linux
33

4-
matrix:
4+
# Targets that we just build (rather than run and test)
5+
env:
6+
global:
7+
- STD_TARGETS="x86_64-sun-solaris x86_64-unknown-cloudabi x86_64-unknown-freebsd x86_64-fuchsia x86_64-unknown-netbsd x86_64-unknown-redox x86_64-fortanix-unknown-sgx"
8+
- NO_STD_TARGETS="x86_64-unknown-uefi x86_64-unknown-hermit x86_64-unknown-l4re-uclibc x86_64-uwp-windows-gnu x86_64-wrs-vxworks"
9+
10+
jobs:
511
include:
612
- name: "Linux, 1.32.0"
713
rust: 1.32.0
8-
os: linux
914

1015
- name: "OSX, 1.32.0"
1116
rust: 1.32.0
@@ -68,41 +73,40 @@ matrix:
6873
# This is actually useful as it finds stuff such as rust-random/rand#669
6974
- cargo web test --target wasm32-unknown-emscripten --no-run
7075
- cargo web test --target asmjs-unknown-emscripten --no-run
71-
# wasi tests
7276
- cargo test --target wasm32-wasi
73-
# stdweb tests (Node, Chrome)
74-
- cd custom/stdweb
75-
- cargo web test --nodejs --target=wasm32-unknown-unknown
76-
- cargo web test --target=wasm32-unknown-unknown
77-
# wasm-bindgen tests (Node, Firefox, Chrome)
78-
- cd ../wasm-bindgen
79-
- cargo test --target wasm32-unknown-unknown
80-
- GECKODRIVER=$HOME/geckodriver cargo test --target wasm32-unknown-unknown --features=test-in-browser
81-
- CHROMEDRIVER=$HOME/chromedriver cargo test --target wasm32-unknown-unknown --features=test-in-browser
77+
# stdweb (wasm32-unknown-unknown) tests (Node, Chrome)
78+
- cargo web test --package stdweb-getrandom
79+
- cargo web test --package stdweb-getrandom --nodejs
80+
# wasm-bindgen (wasm32-unknown-unknown) tests (Node, Firefox, Chrome)
81+
- cargo test --package wasm-bindgen-getrandom
82+
--target wasm32-unknown-unknown --test node
83+
- GECKODRIVER=$HOME/geckodriver
84+
cargo test --package wasm-bindgen-getrandom
85+
--target wasm32-unknown-unknown --test web
86+
- CHROMEDRIVER=$HOME/chromedriver
87+
cargo test --package wasm-bindgen-getrandom
88+
--target wasm32-unknown-unknown --test web
8289

8390
- &nightly_and_docs
8491
name: "Linux, nightly, docs"
8592
rust: nightly
86-
os: linux
8793
install:
8894
- rustup target add wasm32-unknown-unknown
8995
- cargo --list | egrep "^\s*deadlinks$" -q || cargo install cargo-deadlinks
9096
- cargo deadlinks -V
9197
script:
92-
# Check that our tests pass in the default configuration
93-
- cargo test
94-
- cargo test --benches
9598
# Check that setting various features does not break the build
9699
- cargo build --features=std
97100
- cargo build --features=custom
98101
# remove cached documentation, otherwise files from previous PRs can get included
99102
- rm -rf target/doc
100103
- cargo doc --no-deps --features=std,custom
101-
- cargo doc --no-deps --manifest-path=custom/wasm-bindgen/Cargo.toml --target=wasm32-unknown-unknown
104+
- cargo doc --no-deps --package wasm-bindgen-getrandom --target=wasm32-unknown-unknown
102105
- cargo deadlinks --dir target/doc
103-
# also test minimum dependency versions are usable
106+
# Check that our tests pass in the default/minimal configuration
107+
- cargo test --tests --benches
104108
- cargo generate-lockfile -Z minimal-versions
105-
- cargo test --features=std,custom
109+
- cargo test --tests --benches
106110

107111
- <<: *nightly_and_docs
108112
name: "OSX, nightly, docs"
@@ -111,49 +115,23 @@ matrix:
111115
- name: "cross-platform build only"
112116
rust: nightly
113117
install:
114-
- rustup target add x86_64-sun-solaris
115-
- rustup target add x86_64-unknown-cloudabi
116-
- rustup target add x86_64-unknown-freebsd
117-
- rustup target add x86_64-fuchsia
118-
- rustup target add x86_64-unknown-netbsd
119-
- rustup target add x86_64-unknown-redox
120-
- rustup target add x86_64-fortanix-unknown-sgx
118+
- echo $STD_TARGETS | xargs -n1 rustup target add
121119
# For no_std targets
122120
- rustup component add rust-src
123-
- cargo install cargo-xbuild || true
121+
- cargo --list | egrep "^\s*xbuild$" -q || cargo install cargo-xbuild
124122
script:
125-
- cargo build --target=x86_64-sun-solaris
126-
- cargo build --target=x86_64-unknown-cloudabi
127-
- cargo build --target=x86_64-unknown-freebsd
128-
- cargo build --target=x86_64-fuchsia
129-
- cargo build --target=x86_64-unknown-netbsd
130-
- cargo build --target=x86_64-unknown-redox
131-
- cargo build --target=x86_64-fortanix-unknown-sgx
132-
- cargo xbuild --target=x86_64-unknown-uefi
133-
- cargo xbuild --target=x86_64-unknown-hermit
134-
- cargo xbuild --target=x86_64-unknown-l4re-uclibc
135-
- cargo xbuild --target=x86_64-uwp-windows-gnu
136-
- cargo xbuild --target=x86_64-wrs-vxworks
123+
# We test that getrandom builds for all targets
124+
- echo $STD_TARGETS | xargs -t -n1 cargo build --target
125+
- echo $NO_STD_TARGETS | xargs -t -n1 cargo xbuild --target
137126
# also test minimum dependency versions are usable
138127
- cargo generate-lockfile -Z minimal-versions
139-
- cargo build --target=x86_64-sun-solaris
140-
- cargo build --target=x86_64-unknown-cloudabi
141-
- cargo build --target=x86_64-unknown-freebsd
142-
- cargo build --target=x86_64-fuchsia
143-
- cargo build --target=x86_64-unknown-netbsd
144-
- cargo build --target=x86_64-unknown-redox
145-
- cargo build --target=x86_64-fortanix-unknown-sgx
146-
- cargo xbuild --target=x86_64-unknown-uefi
147-
- cargo xbuild --target=x86_64-unknown-hermit
148-
- cargo xbuild --target=x86_64-unknown-l4re-uclibc
149-
- cargo xbuild --target=x86_64-uwp-windows-gnu
150-
- cargo xbuild --target=x86_64-wrs-vxworks
128+
- echo $STD_TARGETS | xargs -t -n1 cargo build --target
129+
- echo $NO_STD_TARGETS | xargs -t -n1 cargo xbuild --target
151130

152131
# Trust cross-built/emulated targets. We must repeat all non-default values.
153132
- name: "Linux (MIPS, big-endian)"
154133
env: TARGET=mips-unknown-linux-gnu
155134
rust: stable
156-
sudo: required
157135
dist: trusty
158136
services: docker
159137
install:
@@ -165,7 +143,6 @@ matrix:
165143
- name: "Android (ARMv7)"
166144
env: TARGET=armv7-linux-androideabi
167145
rust: stable
168-
sudo: required
169146
dist: trusty
170147
services: docker
171148
install:

benches/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#![feature(test)]
2-
extern crate getrandom;
32
extern crate test;
43

54
#[bench]

custom/stdweb/Cargo.toml

+1-10
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,5 @@ categories = ["wasm"]
1313
getrandom = { path = "../..", version = "0.2", features = ["custom"] }
1414
stdweb = "0.4.18"
1515

16-
# Test-only features allowing us to reuse most of the code in common.rs
17-
[features]
18-
default = ["test-stdweb"]
19-
test-stdweb = []
20-
21-
[[test]]
22-
name = "common"
23-
path = "../../tests/common.rs"
24-
2516
[package.metadata.docs.rs]
26-
default-target = "wasm32-unknown-unknown"
17+
default-target = "wasm32-unknown-unknown"

custom/stdweb/tests/test.rs

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Explicitly use the Custom RNG crate to link it in.
2+
use stdweb_getrandom as _;
3+
4+
use getrandom::getrandom;
5+
use test;
6+
#[path = "../../../src/test_common.rs"]
7+
mod test_common;

custom/wasm-bindgen/Cargo.toml

+3-13
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,10 @@ categories = ["wasm"]
1111

1212
[dependencies]
1313
getrandom = { path = "../..", version = "0.2", features = ["custom"] }
14-
wasm-bindgen = "0.2.29"
14+
wasm-bindgen = "0.2.46"
1515

1616
[dev-dependencies]
17-
wasm-bindgen-test = "0.2"
18-
19-
# Test-only features allowing us to reuse most of the code in common.rs
20-
[features]
21-
default = ["test-bindgen"]
22-
test-bindgen = []
23-
test-in-browser = ["test-bindgen"]
24-
25-
[[test]]
26-
name = "common"
27-
path = "../../tests/common.rs"
17+
wasm-bindgen-test = "0.2.46"
2818

2919
[package.metadata.docs.rs]
30-
default-target = "wasm32-unknown-unknown"
20+
default-target = "wasm32-unknown-unknown"

custom/wasm-bindgen/tests/node.rs

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Explicitly use the Custom RNG crate to link it in.
2+
use wasm_bindgen_getrandom as _;
3+
4+
use getrandom::getrandom;
5+
use wasm_bindgen_test::wasm_bindgen_test as test;
6+
#[path = "../../../src/test_common.rs"]
7+
mod test_common;

custom/wasm-bindgen/tests/web.rs

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Explicitly use the Custom RNG crate to link it in.
2+
use wasm_bindgen_getrandom as _;
3+
4+
wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
5+
6+
use getrandom::getrandom;
7+
use wasm_bindgen_test::wasm_bindgen_test as test;
8+
#[path = "../../../src/test_common.rs"]
9+
mod test_common;

src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -214,3 +214,6 @@ pub fn getrandom(dest: &mut [u8]) -> Result<(), Error> {
214214
}
215215
imp::getrandom_inner(dest)
216216
}
217+
218+
#[cfg(test)]
219+
mod test_common;

tests/common.rs src/test_common.rs

+8-19
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,14 @@
1-
// Explicitly use the Custom RNG crates to link them in.
2-
#[cfg(feature = "test-stdweb")]
3-
use stdweb_getrandom as _;
4-
#[cfg(feature = "test-bindgen")]
5-
use wasm_bindgen_getrandom as _;
1+
// Both getrandom and test can be renamed by the parent module.
2+
use super::getrandom;
3+
#[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
4+
use super::test;
65

7-
#[cfg(feature = "test-bindgen")]
8-
use wasm_bindgen_test::*;
9-
10-
use getrandom::getrandom;
11-
12-
#[cfg(feature = "test-in-browser")]
13-
wasm_bindgen_test_configure!(run_in_browser);
14-
15-
#[cfg_attr(feature = "test-bindgen", wasm_bindgen_test)]
166
#[test]
177
fn test_zero() {
188
// Test that APIs are happy with zero-length requests
199
getrandom(&mut [0u8; 0]).unwrap();
2010
}
2111

22-
#[cfg_attr(feature = "test-bindgen", wasm_bindgen_test)]
2312
#[test]
2413
fn test_diff() {
2514
let mut v1 = [0u8; 1000];
@@ -37,18 +26,18 @@ fn test_diff() {
3726
assert!(n_diff_bits >= v1.len() as u32);
3827
}
3928

40-
#[cfg_attr(feature = "test-bindgen", wasm_bindgen_test)]
4129
#[test]
4230
fn test_huge() {
4331
let mut huge = [0u8; 100_000];
4432
getrandom(&mut huge).unwrap();
4533
}
4634

47-
#[cfg(any(unix, windows, target_os = "redox", target_os = "fuchsia"))]
35+
// On WASM, the thread API always fails/panics
36+
#[cfg(not(target_arch = "wasm32"))]
4837
#[test]
4938
fn test_multithreading() {
50-
use std::sync::mpsc::channel;
51-
use std::thread;
39+
extern crate std;
40+
use std::{sync::mpsc::channel, thread, vec};
5241

5342
let mut txs = vec![];
5443
for _ in 0..20 {

0 commit comments

Comments
 (0)