cleanup paths for coverage script run

This commit is contained in:
Benjamin Fry 2019-12-15 12:58:49 -08:00
parent 29a447e32b
commit c854ca5ab2
18 changed files with 54 additions and 172 deletions

View File

@ -22,7 +22,7 @@ CARGO_MAKE_EXTEND_WORKSPACE_MAKEFILE = "true"
CARGO_MAKE_KCOV_INSTALLATION_DIRECTORY = "${TARGET_DIR}/kcov"
TDNS_BIND_PATH = "${TARGET_DIR}/bind"
TDNS_WORKSPACE_ROOT = "${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}"
##
## Installation tasks
@ -276,7 +276,7 @@ script_runner = "bash"
env = { CARGO_MAKE_KCOV_INCLUDE_PATTERN = "${CARGO_MAKE_WORKING_DIRECTORY}/src/", CARGO_MAKE_KCOV_VERSION = "37", CARGO_MAKE_KCOV_DOWNLOAD_DIRECTORY = "${TARGET_DIR}/kcov-dl", CARGO_MAKE_COVERAGE_REPORT_DIRECTORY = "${TARGET_DIR}/coverage", CARGO_MAKE_TEST_COVERAGE_BINARY_FILTER = "${CARGO_MAKE_CRATE_FS_NAME}-[a-z0-9]*$\\|test_[_a-z0-9]*-[a-z0-9]*$\\|[a-z0-9]*_tests-[_a-z0-9]*$" }
install_script = [
'''
set -e
#set -e
echo "====> installing kcov"
@ -334,7 +334,7 @@ fi
]
script = [
'''
set -e
#set -e
echo "Working Directory: ${CARGO_MAKE_WORKING_DIRECTORY}"
@ -372,6 +372,7 @@ if [ -n "$CARGO_MAKE_KCOV_EXCLUDE_REGION" ]; then
fi
cd ${CARGO_MAKE_WORKING_DIRECTORY}
echo "Working director: ${PWD}"
echo "Running tests from directory: ${BINARY_DIRECTORY}"
# Evaluate variables that may be in the expression
@ -389,7 +390,6 @@ done
[tasks.coverage]
description = "Run coverage reports on all crates"
env = { RUSTFLAGS = "-C link-dead-code" }
run_task = "coverage-kcov"
##

View File

@ -206,10 +206,10 @@ fn bind_process() -> (NamedProcess, u16) {
let test_port = find_test_port();
let bind_path = env::var("TDNS_BIND_PATH").unwrap_or_else(|_| "bind".to_owned());
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
// create the work directory
let working_dir = format!("{}/../../target/bind_pwd", server_path);
let working_dir = format!("{}/../target/bind_pwd", server_path);
if !Path::new(&working_dir).exists() {
DirBuilder::new()
.create(&working_dir)

View File

@ -44,11 +44,11 @@ fn test_example_https_toml_startup() {
named_test_harness("dns_over_https.toml", move |_, _, _, https_port| {
let mut cert_der = vec![];
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
println!("using server src path: {}", server_path);
File::open(&format!(
"{}/../tests/test-data/named_test_configs/sec/example.cert",
"{}/tests/test-data/named_test_configs/sec/example.cert",
server_path
))
.expect("failed to open cert")

View File

@ -50,11 +50,11 @@ fn test_example_tls_rustls_and_openssl_toml_startup() {
fn test_startup(toml: &'static str) {
named_test_harness(toml, move |_, _, tls_port, _| {
let mut cert_der = vec![];
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
println!("using server src path: {}", server_path);
File::open(&format!(
"{}/../tests/test-data/named_test_configs/sec/example.cert",
"{}/tests/test-data/named_test_configs/sec/example.cert",
server_path
))
.expect("failed to open cert")

View File

@ -42,11 +42,11 @@ fn test_example_tls_toml_startup() {
"dns_over_tls_rustls_and_openssl.toml",
move |_, _, tls_port, _| {
let mut cert_der = vec![];
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
println!("using server src path: {}", server_path);
File::open(&format!(
"{}/../tests/test-data/named_test_configs/sec/example.cert",
"{}/tests/test-data/named_test_configs/sec/example.cert",
server_path
))
.expect("failed to open cert")

View File

@ -86,7 +86,7 @@ fn generic_test(config_toml: &str, key_path: &str, key_format: KeyFormat, algori
// use log::LogLevel;
// logger::TrustDnsLogger::enable_logging(LogLevel::Debug);
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
let server_path = Path::new(&server_path);
named_test_harness(config_toml, |_, tcp_port, _, _| {
@ -118,7 +118,7 @@ fn generic_test(config_toml: &str, key_path: &str, key_format: KeyFormat, algori
fn test_rsa_sha256() {
generic_test(
confg_toml(),
"../tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
"tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
KeyFormat::Pem,
Algorithm::RSASHA256,
);
@ -129,7 +129,7 @@ fn test_rsa_sha256() {
fn test_rsa_sha512() {
generic_test(
confg_toml(),
"../tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
"tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
KeyFormat::Pem,
Algorithm::RSASHA512,
);
@ -140,7 +140,7 @@ fn test_rsa_sha512() {
fn test_ecdsa_p256() {
generic_test(
confg_toml(),
"../tests/test-data/named_test_configs/dnssec/ecdsa_p256.pem",
"tests/test-data/named_test_configs/dnssec/ecdsa_p256.pem",
KeyFormat::Pem,
Algorithm::ECDSAP256SHA256,
);
@ -151,7 +151,7 @@ fn test_ecdsa_p256() {
fn test_ecdsa_p256_pkcs8() {
generic_test(
confg_toml(),
"../tests/test-data/named_test_configs/dnssec/ecdsa_p256.pk8",
"tests/test-data/named_test_configs/dnssec/ecdsa_p256.pk8",
KeyFormat::Pkcs8,
Algorithm::ECDSAP256SHA256,
);
@ -162,7 +162,7 @@ fn test_ecdsa_p256_pkcs8() {
fn test_ecdsa_p384() {
generic_test(
confg_toml(),
"../tests/test-data/named_test_configs/dnssec/ecdsa_p384.pem",
"tests/test-data/named_test_configs/dnssec/ecdsa_p384.pem",
KeyFormat::Pem,
Algorithm::ECDSAP384SHA384,
);
@ -173,7 +173,7 @@ fn test_ecdsa_p384() {
fn test_ecdsa_p384_pkcs8() {
generic_test(
confg_toml(),
"../tests/test-data/named_test_configs/dnssec/ecdsa_p384.pk8",
"tests/test-data/named_test_configs/dnssec/ecdsa_p384.pk8",
KeyFormat::Pkcs8,
Algorithm::ECDSAP384SHA384,
);
@ -184,7 +184,7 @@ fn test_ecdsa_p384_pkcs8() {
fn test_ed25519() {
generic_test(
confg_toml(),
"../tests/test-data/named_test_configs/dnssec/ed25519.pk8",
"tests/test-data/named_test_configs/dnssec/ed25519.pk8",
KeyFormat::Pkcs8,
Algorithm::ED25519,
);
@ -195,7 +195,7 @@ fn test_ed25519() {
fn test_rsa_sha1_fails() {
generic_test(
confg_toml(),
"../tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
"tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
KeyFormat::Pem,
Algorithm::RSASHA1,
);
@ -206,15 +206,15 @@ fn test_rsa_sha1_fails() {
#[test]
fn test_dnssec_restart_with_update_journal() {
// TODO: make journal path configurable, it should be in target/tests/...
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
let server_path = Path::new(&server_path);
let journal =
server_path.join("../tests/test-data/named_test_configs/example.com_dnsec_update.jrnl");
server_path.join("tests/test-data/named_test_configs/example.com_dnsec_update.jrnl");
std::fs::remove_file(&journal).ok();
generic_test(
"dnssec_with_update.toml",
"../tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
"tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
KeyFormat::Pem,
Algorithm::RSASHA256,
);
@ -225,7 +225,7 @@ fn test_dnssec_restart_with_update_journal() {
// and all dnssec tests should still pass
generic_test(
"dnssec_with_update.toml",
"../tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
"tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
KeyFormat::Pem,
Algorithm::RSASHA256,
);
@ -243,14 +243,14 @@ fn test_dnssec_restart_with_update_journal() {
#[test]
fn test_dnssec_restart_with_update_journal_dep() {
// TODO: make journal path configurable, it should be in target/tests/...
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
let server_path = Path::new(&server_path);
let journal = server_path.join("../tests/test-data/named_test_configs/example.com.jrnl");
let journal = server_path.join("tests/test-data/named_test_configs/example.com.jrnl");
std::fs::remove_file(&journal).ok();
generic_test(
"dnssec_with_update_deprecated.toml",
"../tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
"tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
KeyFormat::Pem,
Algorithm::RSASHA256,
);
@ -261,7 +261,7 @@ fn test_dnssec_restart_with_update_journal_dep() {
// and all dnssec tests should still pass
generic_test(
"dnssec_with_update_deprecated.toml",
"../tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
"tests/test-data/named_test_configs/dnssec/rsa_2048.pem",
KeyFormat::Pem,
Algorithm::RSASHA256,
);

View File

@ -40,20 +40,20 @@ pub fn named_test_harness<F, R>(toml: &str, test: F)
where
F: FnOnce(Option<u16>, Option<u16>, Option<u16>, Option<u16>) -> R + UnwindSafe,
{
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
println!("using server src path: {}", server_path);
let mut named = Command::new(&format!("{}/../target/debug/named", server_path))
let mut named = Command::new(&format!("{}/target/debug/named", server_path))
.stdout(Stdio::piped())
.env(
"RUST_LOG",
"trust_dns_client=debug,trust_dns_https=debug,trust_dns_proto=debug,trust_dns_resolver=debug,trust_dns_server=debug",
).arg("-d")
.arg(&format!(
"--config={}/../tests/test-data/named_test_configs/{}",
"--config={}/tests/test-data/named_test_configs/{}",
server_path, toml
)).arg(&format!(
"--zonedir={}/../tests/test-data/named_test_configs",
"--zonedir={}/tests/test-data/named_test_configs",
server_path
)).arg(&format!("--port={}", 0))
.arg(&format!("--tls-port={}", 0))

View File

@ -87,14 +87,14 @@ fn tls_client_stream_test(server_addr: IpAddr, mtls: bool) {
})
.unwrap();
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| "../../bin".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "../..".to_owned());
println!("using server src path: {}", server_path);
let root_cert_der = read_file(&format!("{}/../tests/test-data/ca.der", server_path));
let root_cert_der = read_file(&format!("{}/tests/test-data/ca.der", server_path));
// Generate X509 certificate
let dns_name = "ns.example.com";
let server_pkcs12_der = read_file(&format!("{}/../tests/test-data/cert.p12", server_path));
let server_pkcs12_der = read_file(&format!("{}/tests/test-data/cert.p12", server_path));
// TODO: need a timeout on listen
let server = std::net::TcpListener::bind(SocketAddr::new(server_addr, 0)).unwrap();

View File

@ -189,8 +189,8 @@ mod tests {
use std::net::{Ipv4Addr, Ipv6Addr};
fn tests_dir() -> String {
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
format! {"{}/../resolver/tests", server_path}
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "../..".to_owned());
format! {"{}/crates/resolver/tests", server_path}
}
#[test]

View File

@ -133,8 +133,8 @@ mod tests {
}
fn tests_dir() -> String {
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
format!("{}/../resolver/tests", server_path)
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "../..".to_owned());
format!("{}/crates/resolver/tests", server_path)
}
#[test]

View File

@ -89,15 +89,15 @@ fn tls_client_stream_test(server_addr: IpAddr, mtls: bool) {
})
.unwrap();
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| "../../bin".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "../..".to_owned());
println!("using server src path: {}", server_path);
let root_cert_der = read_file(&format!("{}/../tests/test-data/ca.der", server_path));
let root_cert_der = read_file(&format!("{}/tests/test-data/ca.der", server_path));
let root_cert_der_copy = root_cert_der.clone();
// Generate X509 certificate
let dns_name = "ns.example.com";
let server_pkcs12_der = read_file(&format!("{}/../tests/test-data/cert.p12", server_path));
let server_pkcs12_der = read_file(&format!("{}/tests/test-data/cert.p12", server_path));
// TODO: need a timeout on listen
let server = std::net::TcpListener::bind(SocketAddr::new(server_addr, 0)).unwrap();

View File

@ -28,9 +28,9 @@ use trust_dns_server::config::*;
#[test]
fn test_read_config() {
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "../..".to_owned());
let path: PathBuf =
PathBuf::from(server_path).join("../../tests/test-data/named_test_configs/example.toml");
PathBuf::from(server_path).join("tests/test-data/named_test_configs/example.toml");
if !path.exists() {
panic!("can't locate example.toml and other configs: {:?}", path)
@ -255,7 +255,9 @@ tls_listen_port = 8853
}
fn test_config(path: &str) {
let path = PathBuf::from("../../tests/test-data/named_test_configs")
let workspace = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "../..".to_owned());
let path = PathBuf::from(workspace)
.join("tests/test-data/named_test_configs")
.join(path)
.with_extension("toml");
assert!(path.exists(), "does not exist: {}", path.display());

View File

@ -1,87 +0,0 @@
#!/bin/bash -e
set -x
# THIS SCRIPT ASSUMES TESTS HAVE ALREADY BEEN BUILT
# *WARING* it is destructive and installs kcov via sudo!
trust_dns_dir=$(dirname $0)/..
cd ${trust_dns_dir:?}
case $(uname) in
Darwin) exit 0;;
*) KCOV=true;;
esac
# don't run on nightly or beta
rustc --version | grep beta && exit 0;
rustc --version | grep nightly && exit 0;
rm -rf kcov-master master.tar.gz*
# install kcov
# sudo apt-get install libcurl4-openssl-dev libelf-dev libdw-dev
sudo apt-get update --yes
sudo apt-get install --yes cmake libcurl4-openssl-dev libelf-dev libdw-dev
wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz
tar xzf master.tar.gz
mkdir kcov-master/build
cd kcov-master/build
cmake ..
make
sudo make install
cd ../..
PROJECT=${PWD}
WORK_DIR=${PROJECT:?}/crates/server
KCOV_TARGET=${PROJECT:?}/target
TEST_PATH=${PROJECT:?}/target/debug
# run kcov on all tests, rerunning all tests with coverage report
mkdir -p ${KCOV_TARGET:?}
# needed to tell some config tests where the server root directory is
export TDNS_SERVER_SRC_ROOT=${PROJECT:?}/bin
export COVERALLS_PARALLEL=true
SRC_PATHS=\
${PROJECT:?}/crates/client/src,\
${PROJECT:?}/crates/native-tls/src,\
${PROJECT:?}/crates/openssl/src,\
${PROJECT:?}/crates/proto/src,\
${PROJECT:?}/crates/https/src,\
${PROJECT:?}/crates/resolver/src,\
${PROJECT:?}/crates/rustls/src,\
${PROJECT:?}/crates/server/src,\
${PROJECT:?}/bin/src
EXCLUDE_PATHS=\
${PROJECT:?}/crates/client/src/error,\
${PROJECT:?}/crates/proto/src/error.rs,\
${PROJECT:?}/crates/server/src/error,\
${PROJECT:?}/tests/compatibility-tests/src/lib.rs,\
${PROJECT:?}/tests/integration-tests/src/lib.rs
pushd ${WORK_DIR:?}
for i in ${TEST_PATH:?}/trust_dns*-* ${TEST_PATH:?}/*_tests-* ; do
if [ -f $i ] && [ -x $i ]; then
# submit the report... what's the executable since there are many?
echo "----> executing kcov on $i"
kcov --exclude-pattern=${PROJECT:?}/.cargo \
--include-path=${SRC_PATHS} \
--exclude-path=${EXCLUDE_PATHS} \
${KCOV_TARGET:?}/kcov-$(basename $i) $i
let test_count='test_count+1'
# this only works for a single test run upload
last_test=$i
fi
done
popd
echo "----> ran $test_count test(s)"
echo "----> uploading to codecov.io"
bash <(curl -s https://codecov.io/bash) -c -F ${NAME}
echo "----> coverage reports done"

View File

@ -1,19 +0,0 @@
#!/bin/bash -e
set -x
trust_dns_dir=$(dirname $0)/..
cd ${trust_dns_dir:?}
# Build all tests
cargo test --manifest-path crates/proto/Cargo.toml --all-features
cargo test --manifest-path crates/client/Cargo.toml --all-features
cargo test --manifest-path util/Cargo.toml --all-features
cargo test --manifest-path crates/native-tls/Cargo.toml --all-features
cargo test --manifest-path crates/openssl/Cargo.toml --all-features
cargo test --manifest-path crates/rustls/Cargo.toml --all-features
cargo test --manifest-path crates/https/Cargo.toml --all-features
cargo test --manifest-path crates/resolver/Cargo.toml --all-features
cargo test --manifest-path crates/server/Cargo.toml --all-features
cargo test --manifest-path bin/Cargo.toml --all-features
cargo test --manifest-path tests/integration-tests/Cargo.toml --all-features

View File

@ -1,14 +0,0 @@
#!/bin/bash -e
set -x
trust_dns_dir=$(dirname $0)/..
cd ${trust_dns_dir:?}
# Build all tests
cargo test --manifest-path crates/proto/Cargo.toml --features dnssec-ring
cargo test --manifest-path crates/client/Cargo.toml --features dnssec-ring
cargo test --manifest-path crates/resolver/Cargo.toml --features dnssec-ring
cargo test --manifest-path crates/server/Cargo.toml --features dnssec-ring
cargo test --manifest-path bin/Cargo.toml --features dnssec-ring
cargo test --manifest-path tests/integration-tests/Cargo.toml --features dnssec-ring

View File

@ -69,7 +69,7 @@ where
CC: ClientConnection,
{
let server_path =
env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| "../../crates/server".to_owned());
env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "../../crates/server".to_owned());
let pem_path = format!(
"{}/../../tests/compatibility-tests/tests/conf/Kupdate.example.com.+008+56935.pem",
server_path

View File

@ -162,12 +162,12 @@ fn test_server_www_tls() {
let dns_name = "ns.example.com";
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or("../../crates/server".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or("../..".to_owned());
println!("using server src path: {}", server_path);
let cert_der = read_file(&format!("{}/../../tests/test-data/ca.der", server_path));
let cert_der = read_file(&format!("{}/tests/test-data/ca.der", server_path));
let pkcs12_der = read_file(&format!("{}/../../tests/test-data/cert.p12", server_path));
let pkcs12_der = read_file(&format!("{}/tests/test-data/cert.p12", server_path));
// Server address
let mut runtime = Runtime::new().expect("failed to create Tokio Runtime");

View File

@ -102,9 +102,9 @@ mod test {
#[test]
fn read_pem_into_key_pair() {
let server_path = env::var("TDNS_SERVER_SRC_ROOT").unwrap_or_else(|_| ".".to_owned());
let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned());
let path = [&server_path, "..", "tests", "test-data", "ca.pubkey"]
let path = [&server_path, "tests", "test-data", "ca.pubkey"]
.iter()
.collect::<PathBuf>();
let mut pem = File::open(path).unwrap();