From 508332feaf99ada12037c3a7fa77eab8516bb69e Mon Sep 17 00:00:00 2001 From: Isis Lovecruft Date: Mon, 18 Jun 2018 18:57:38 +0000 Subject: [PATCH] rust: Add "test-c-from-rust" feature-gate. Due to linker issues (#25386) when testing Rust code which calls C, all tests which touch FFI code should now be feature-gated behind the "test-c-from-rust" flag. To run this test code, cargo must be called with `cargo test --features="test-c-from-rust"`. * FIXES #26398: https://bugs.torproject.org/26398 --- src/rust/Cargo.toml | 9 +++++++++ src/rust/crypto/Cargo.toml | 4 ++++ src/rust/crypto/digests/sha2.rs | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml index c3e44d2a795..4bbadbe5352 100644 --- a/src/rust/Cargo.toml +++ b/src/rust/Cargo.toml @@ -14,3 +14,12 @@ members = [ debug = true panic = "abort" +[features] +default = [] +# If this feature is enabled, test code which calls Tor C code from Rust will +# execute with `cargo test`. Due to numerous linker issues (#25386), this is +# currently disabled by default. Crates listed here are those which, in their +# unittests, doctests, and/or integration tests, call C code. +test-c-from-rust = [ + "crypto/test-c-from-rust", +] diff --git a/src/rust/crypto/Cargo.toml b/src/rust/crypto/Cargo.toml index c0c5e7bf93c..c31c8e185a7 100644 --- a/src/rust/crypto/Cargo.toml +++ b/src/rust/crypto/Cargo.toml @@ -26,4 +26,8 @@ rand_core = { version = "=0.2.0-pre.0", default-features = false } [features] testing = ["tor_log/testing"] +# If this feature is enabled, test code which calls Tor C code from Rust will +# execute with `cargo test`. Due to numerous linker issues (#25386), this is +# currently disabled by default. +test-c-from-rust = [] diff --git a/src/rust/crypto/digests/sha2.rs b/src/rust/crypto/digests/sha2.rs index 1cbb6c581e6..bb610ed9e21 100644 --- a/src/rust/crypto/digests/sha2.rs +++ b/src/rust/crypto/digests/sha2.rs @@ -165,15 +165,19 @@ impl FixedOutput for Sha512 { #[cfg(test)] mod test { + #[cfg(feature = "test-c-from-rust")] use digest::Digest; + #[cfg(feature = "test-c-from-rust")] use super::*; + #[cfg(feature = "test-c-from-rust")] #[test] fn sha256_default() { let _: Sha256 = Sha256::default(); } + #[cfg(feature = "test-c-from-rust")] #[test] fn sha256_digest() { let mut h: Sha256 = Sha256::new(); @@ -190,11 +194,13 @@ mod test { assert_eq!(&result[..], &b"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"[..]); } + #[cfg(feature = "test-c-from-rust")] #[test] fn sha512_default() { let _: Sha512 = Sha512::default(); } + #[cfg(feature = "test-c-from-rust")] #[test] fn sha512_digest() { let mut h: Sha512 = Sha512::new();