From 138006c2f71ccdb040bbc7c891536911d0df4b08 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Mon, 26 Feb 2018 17:38:15 +0000 Subject: [PATCH 1/7] Add Travis test target: MIPS64 This a test adding partial Trust tests as in dhardy/master branch --- .travis.yml | 22 ++++++++++++++++++++ utils/ci/install.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++ utils/ci/script.sh | 28 ++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 utils/ci/install.sh create mode 100644 utils/ci/script.sh diff --git a/.travis.yml b/.travis.yml index dee09e69499..1836975f3e6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,6 +23,21 @@ matrix: - cargo test --tests --no-default-features --features=alloc after_success: - travis-cargo --only nightly doc-upload + + - rust: stable + sudo: required + dist: trusty + services: docker + install: + - sh utils/ci/install.sh + - source ~/.cargo/env || true + script: + - bash utils/ci/script.sh + env: TARGET=mips64-unknown-linux-gnuabi64 + +before_install: + - set -e + - rustup self update script: - cargo test @@ -30,6 +45,13 @@ script: - cargo test --features serde-1,log - cargo test --tests --no-default-features --features=serde-1 +after_script: set +e + +cache: cargo +before_cache: + # Travis can't cache files that are not readable by "others" + - chmod -R a+r $HOME/.cargo + env: global: secure: "BdDntVHSompN+Qxz5Rz45VI4ZqhD72r6aPl166FADlnkIwS6N6FLWdqs51O7G5CpoMXEDvyYrjmRMZe/GYLIG9cmqmn/wUrWPO+PauGiIuG/D2dmfuUNvSTRcIe7UQLXrfP3yyfZPgqsH6pSnNEVopquQKy3KjzqepgriOJtbyY=" diff --git a/utils/ci/install.sh b/utils/ci/install.sh new file mode 100644 index 00000000000..8e636e18175 --- /dev/null +++ b/utils/ci/install.sh @@ -0,0 +1,49 @@ +# From https://github.com/japaric/trust + +set -ex + +main() { + local target= + if [ $TRAVIS_OS_NAME = linux ]; then + target=x86_64-unknown-linux-musl + sort=sort + else + target=x86_64-apple-darwin + sort=gsort # for `sort --sort-version`, from brew's coreutils. + fi + + # Builds for iOS are done on OSX, but require the specific target to be + # installed. + case $TARGET in + aarch64-apple-ios) + rustup target install aarch64-apple-ios + ;; + armv7-apple-ios) + rustup target install armv7-apple-ios + ;; + armv7s-apple-ios) + rustup target install armv7s-apple-ios + ;; + i386-apple-ios) + rustup target install i386-apple-ios + ;; + x86_64-apple-ios) + rustup target install x86_64-apple-ios + ;; + esac + + # This fetches latest stable release + local tag=$(git ls-remote --tags --refs --exit-code https://github.com/japaric/cross \ + | cut -d/ -f3 \ + | grep -E '^v[0.1.0-9.]+$' \ + | $sort --version-sort \ + | tail -n1) + curl -LSfs https://japaric.github.io/trust/install.sh | \ + sh -s -- \ + --force \ + --git japaric/cross \ + --tag $tag \ + --target $target +} + +main diff --git a/utils/ci/script.sh b/utils/ci/script.sh new file mode 100644 index 00000000000..c4ab8855e81 --- /dev/null +++ b/utils/ci/script.sh @@ -0,0 +1,28 @@ +# Derived from https://github.com/japaric/trust + +set -ex + +main() { + if [ ! -z $DISABLE_TESTS ]; then + if [ ! -z $DISABLE_STD ]; then + cross build --all --no-default-features --target $TARGET + else + cross build --all --features log,serde-1 --target $TARGET + fi + return + fi + + if [ ! -z $NIGHTLY ]; then + cross test --all --tests --no-default-features --features alloc --target $TARGET + cross test --all --features serde-1,log,nightly --target $TARGET + cross test --all --benches --target $TARGET + else + cross test --all --tests --no-default-features --target $TARGET + cross test --all --features serde-1,log --target $TARGET + fi +} + +# we don't run the "test phase" when doing deploys +if [ -z $TRAVIS_TAG ]; then + main +fi From eeea689df86eb5f9578eddad9cf7d48a41f51879 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Mon, 26 Feb 2018 18:11:15 +0000 Subject: [PATCH 2/7] Fix test failing on MIPS. --- src/prng/xorshift.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/prng/xorshift.rs b/src/prng/xorshift.rs index 81c6dbe1b7e..077f621b9f0 100644 --- a/src/prng/xorshift.rs +++ b/src/prng/xorshift.rs @@ -136,7 +136,8 @@ mod tests { assert_eq!(rng1.next_u64(), 4325440999699518727); let mut rng2 = XorShiftRng::from_rng(&mut rng1).unwrap(); - assert_eq!(rng2.next_u64(), 15614385950550801700); + // Note: we cannot test the state of rng2 because from_rng does not + // fix Endianness. This is allowed in the trait specification. } #[test] From aee678ab8555540f247f14cae77583ebba1eaa71 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Mon, 26 Feb 2018 18:18:33 +0000 Subject: [PATCH 3/7] Travis/trust: add some more targets --- .travis.yml | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/.travis.yml b/.travis.yml index 1836975f3e6..fcc4b1228ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,27 @@ matrix: after_success: - travis-cargo --only nightly doc-upload + # Trust cross-built/emulated targets. We must repeat all non-default values. + - rust: stable + sudo: required + dist: trusty + services: docker + install: + - sh utils/ci/install.sh + - source ~/.cargo/env || true + script: + - bash utils/ci/script.sh + env: TARGET=i686-unknown-linux-gnu NIGHTLY=1 + - rust: stable + sudo: required + dist: trusty + services: docker + install: + - sh utils/ci/install.sh + - source ~/.cargo/env || true + script: + - bash utils/ci/script.sh + env: TARGET=x86_64-unknown-freebsd DISABLE_TESTS=1 - rust: stable sudo: required dist: trusty @@ -34,6 +55,27 @@ matrix: script: - bash utils/ci/script.sh env: TARGET=mips64-unknown-linux-gnuabi64 + - rust: stable + sudo: required + dist: trusty + services: docker + install: + - sh utils/ci/install.sh + - source ~/.cargo/env || true + script: + - bash utils/ci/script.sh + env: TARGET=armv7-linux-androideabi DISABLE_TESTS=1 + - rust: stable + sudo: required + dist: trusty + services: docker + install: + - sh utils/ci/install.sh + - source ~/.cargo/env || true + script: + - bash utils/ci/script.sh + # Bare metal target; no std + env: TARGET=thumbv6m-none-eabi DISABLE_STD=1 before_install: - set -e From 718aef7ed23aae64c0e87ba8cd3bdc6a6d5ac1da Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Mon, 26 Feb 2018 18:29:53 +0000 Subject: [PATCH 4/7] Trust/Travis: fixes (including to src/os.rs) plus iOS test --- .travis.yml | 15 +++++++++++++-- src/os.rs | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index fcc4b1228ed..57c87a92a0e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,7 +25,7 @@ matrix: - travis-cargo --only nightly doc-upload # Trust cross-built/emulated targets. We must repeat all non-default values. - - rust: stable + - rust: nightly sudo: required dist: trusty services: docker @@ -65,6 +65,17 @@ matrix: script: - bash utils/ci/script.sh env: TARGET=armv7-linux-androideabi DISABLE_TESTS=1 + - rust: stable + os: osx + sudo: required + dist: trusty + services: docker + install: + - sh utils/ci/install.sh + - source ~/.cargo/env || true + script: + - bash utils/ci/script.sh + env: TARGET=armv7-apple-ios DISABLE_TESTS=1 - rust: stable sudo: required dist: trusty @@ -75,7 +86,7 @@ matrix: script: - bash utils/ci/script.sh # Bare metal target; no std - env: TARGET=thumbv6m-none-eabi DISABLE_STD=1 + env: TARGET=thumbv6m-none-eabi DISABLE_TESTS=1 DISABLE_STD=1 before_install: - set -e diff --git a/src/os.rs b/src/os.rs index a7c10509e92..017949e61f2 100644 --- a/src/os.rs +++ b/src/os.rs @@ -413,6 +413,7 @@ mod imp { use {Error, ErrorKind}; use std::ptr; + use std::io; #[derive(Debug)] pub struct OsRng; From 9dc68f0e537461f3445648f32359bea2c8a5d00a Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Tue, 27 Feb 2018 09:34:45 +0000 Subject: [PATCH 5/7] Fix os for FreeBSD and fix warning --- src/os.rs | 2 +- src/prng/xorshift.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/os.rs b/src/os.rs index 017949e61f2..8bbbab90c6e 100644 --- a/src/os.rs +++ b/src/os.rs @@ -424,10 +424,10 @@ mod imp { } pub fn try_fill_bytes(&mut self, v: &mut [u8]) -> Result<(), Error> { let mib = [libc::CTL_KERN, libc::KERN_ARND]; + trace!("OsRng: reading {} bytes via kern.arandom", v.len()); // kern.arandom permits a maximum buffer size of 256 bytes for s in v.chunks_mut(256) { let mut s_len = s.len(); - trace!("OsRng: reading {} bytes via kern.arandom", v.len()); let ret = unsafe { libc::sysctl(mib.as_ptr(), mib.len() as libc::c_uint, s.as_mut_ptr() as *mut _, &mut s_len, diff --git a/src/prng/xorshift.rs b/src/prng/xorshift.rs index 077f621b9f0..1d48ab8233b 100644 --- a/src/prng/xorshift.rs +++ b/src/prng/xorshift.rs @@ -135,8 +135,8 @@ mod tests { let mut rng1 = XorShiftRng::from_seed(seed); assert_eq!(rng1.next_u64(), 4325440999699518727); - let mut rng2 = XorShiftRng::from_rng(&mut rng1).unwrap(); - // Note: we cannot test the state of rng2 because from_rng does not + let _rng2 = XorShiftRng::from_rng(&mut rng1).unwrap(); + // Note: we cannot test the state of _rng2 because from_rng does not // fix Endianness. This is allowed in the trait specification. } From f35a70e5647eac3059e99cdc1512d04be4645c4a Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Tue, 27 Feb 2018 14:41:15 +0000 Subject: [PATCH 6/7] Travis/Trust: revise tests (reduce); cleaner script --- .travis.yml | 73 ++++++++++++++++------------------------------ utils/ci/script.sh | 2 +- 2 files changed, 26 insertions(+), 49 deletions(-) diff --git a/.travis.yml b/.travis.yml index 57c87a92a0e..0a23885bd28 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,90 +1,66 @@ language: rust sudo: false +# We aim to test all the following in any combination: +# - standard tests, benches, documentation, all available features +# - pinned stable, latest stable, beta and nightly Rust releases +# - Linux, OS X, Android, iOS, bare metal (i.e. no_std) +# - x86_64, ARMv7, a Big-Endian arch (MIPS) matrix: include: - rust: 1.22.0 + install: script: - - cargo test - - cargo build --no-default-features # we cannot exclude doc tests - - rust: stable + - cargo test --all --tests --no-default-features + - cargo test --all --features serde-1,log - rust: stable os: osx + install: + script: + - cargo test --all --tests --no-default-features + - cargo test --all --features serde-1,log - rust: beta + install: + script: + - cargo test --all --tests --no-default-features - rust: nightly - - - rust: nightly + install: before_script: - pip install 'travis-cargo<0.2' --user && export PATH=$HOME/.local/bin:$PATH script: - - cargo doc --no-deps --all-features - - cargo test --benches - - cargo test --features nightly - cargo test --tests --no-default-features --features=alloc + - cargo test --all --features serde-1,log,nightly + - cargo test --benches + - cargo doc --no-deps --all-features after_success: - travis-cargo --only nightly doc-upload # Trust cross-built/emulated targets. We must repeat all non-default values. - - rust: nightly - sudo: required - dist: trusty - services: docker - install: - - sh utils/ci/install.sh - - source ~/.cargo/env || true - script: - - bash utils/ci/script.sh - env: TARGET=i686-unknown-linux-gnu NIGHTLY=1 - rust: stable sudo: required dist: trusty services: docker - install: - - sh utils/ci/install.sh - - source ~/.cargo/env || true - script: - - bash utils/ci/script.sh env: TARGET=x86_64-unknown-freebsd DISABLE_TESTS=1 - rust: stable sudo: required dist: trusty services: docker - install: - - sh utils/ci/install.sh - - source ~/.cargo/env || true - script: - - bash utils/ci/script.sh - env: TARGET=mips64-unknown-linux-gnuabi64 + env: TARGET=mips-unknown-linux-gnuabi - rust: stable sudo: required dist: trusty services: docker - install: - - sh utils/ci/install.sh - - source ~/.cargo/env || true - script: - - bash utils/ci/script.sh env: TARGET=armv7-linux-androideabi DISABLE_TESTS=1 - rust: stable os: osx sudo: required dist: trusty services: docker - install: - - sh utils/ci/install.sh - - source ~/.cargo/env || true - script: - - bash utils/ci/script.sh env: TARGET=armv7-apple-ios DISABLE_TESTS=1 - rust: stable sudo: required dist: trusty services: docker - install: - - sh utils/ci/install.sh - - source ~/.cargo/env || true - script: - - bash utils/ci/script.sh # Bare metal target; no std env: TARGET=thumbv6m-none-eabi DISABLE_TESTS=1 DISABLE_STD=1 @@ -92,11 +68,12 @@ before_install: - set -e - rustup self update +# Used by all Trust targets; others must override: +install: + - sh utils/ci/install.sh + - source ~/.cargo/env || true script: - - cargo test - - cargo test --tests --no-default-features - - cargo test --features serde-1,log - - cargo test --tests --no-default-features --features=serde-1 + - bash utils/ci/script.sh after_script: set +e diff --git a/utils/ci/script.sh b/utils/ci/script.sh index c4ab8855e81..aa0d4997fb8 100644 --- a/utils/ci/script.sh +++ b/utils/ci/script.sh @@ -5,7 +5,7 @@ set -ex main() { if [ ! -z $DISABLE_TESTS ]; then if [ ! -z $DISABLE_STD ]; then - cross build --all --no-default-features --target $TARGET + cross build --all --no-default-features --target $TARGET --release else cross build --all --features log,serde-1 --target $TARGET fi From 250b6231ca199ccd99cfe0d2b55b93bcd328eea2 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Tue, 27 Feb 2018 15:22:06 +0000 Subject: [PATCH 7/7] Travis/Trust: fix MIPS target name; use nightly for bare metal --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0a23885bd28..d71f20e0781 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,7 +45,7 @@ matrix: sudo: required dist: trusty services: docker - env: TARGET=mips-unknown-linux-gnuabi + env: TARGET=mips-unknown-linux-gnu - rust: stable sudo: required dist: trusty @@ -57,11 +57,11 @@ matrix: dist: trusty services: docker env: TARGET=armv7-apple-ios DISABLE_TESTS=1 - - rust: stable + - rust: nightly sudo: required dist: trusty services: docker - # Bare metal target; no std + # Bare metal target; no std; only works on nightly env: TARGET=thumbv6m-none-eabi DISABLE_TESTS=1 DISABLE_STD=1 before_install: