From 84eb6bab4a6d5f6daf4696eaca9071c9bbfc4065 Mon Sep 17 00:00:00 2001 From: Dmitri Makarov Date: Mon, 8 Aug 2022 09:39:54 -0700 Subject: [PATCH] Refactor cargo-build-sbf integration tests using assert_cmd crate --- Cargo.lock | 1 + sdk/cargo-build-sbf/Cargo.toml | 1 + sdk/cargo-build-sbf/tests/crates.rs | 50 ++++++++--------------------- 3 files changed, 15 insertions(+), 37 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 18b3587f6..fd94f32c0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4767,6 +4767,7 @@ dependencies = [ name = "solana-cargo-build-sbf" version = "1.12.0" dependencies = [ + "assert_cmd", "bzip2", "cargo_metadata", "clap 3.1.8", diff --git a/sdk/cargo-build-sbf/Cargo.toml b/sdk/cargo-build-sbf/Cargo.toml index 6ab8e2c1b..2c8359c4d 100644 --- a/sdk/cargo-build-sbf/Cargo.toml +++ b/sdk/cargo-build-sbf/Cargo.toml @@ -21,6 +21,7 @@ solana-sdk = { path = "..", version = "=1.12.0" } tar = "0.4.38" [dev-dependencies] +assert_cmd = "*" serial_test = "*" [features] diff --git a/sdk/cargo-build-sbf/tests/crates.rs b/sdk/cargo-build-sbf/tests/crates.rs index d71a11410..9b775a19a 100644 --- a/sdk/cargo-build-sbf/tests/crates.rs +++ b/sdk/cargo-build-sbf/tests/crates.rs @@ -1,19 +1,10 @@ -use std::{ - env, fs, - io::{self, Write}, - process::{Command, Output}, -}; +use std::{env, fs, process}; #[macro_use] extern crate serial_test; -fn run_cargo_build(crate_name: &str, extra_args: &[&str], test_name: &str) -> Output { +fn run_cargo_build(crate_name: &str, extra_args: &[&str], fail: bool) { let cwd = env::current_dir().expect("Unable to get current working directory"); - let root = cwd - .parent() - .expect("Unable to get parent directory of current working dir") - .parent() - .expect("Unable to get ../.. of current working dir"); let toml = cwd .join("tests") .join("crates") @@ -26,20 +17,13 @@ fn run_cargo_build(crate_name: &str, extra_args: &[&str], test_name: &str) -> Ou } args.push("--"); args.push("-vv"); - let cargo_build_sbf = root.join("target").join("debug").join("cargo-build-sbf"); - env::set_var("RUST_LOG", "debug"); - let output = Command::new(cargo_build_sbf) - .args(&args) - .output() - .expect("Error running cargo-build-sbf"); - if !output.status.success() { - eprintln!("--- stdout of {} ---", test_name); - io::stderr().write_all(&output.stdout).unwrap(); - eprintln!("--- stderr of {} ---", test_name); - io::stderr().write_all(&output.stderr).unwrap(); - eprintln!("--------------"); + let mut cmd = assert_cmd::Command::cargo_bin("cargo-build-sbf").unwrap(); + let assert = cmd.env("RUST_LOG", "debug").args(&args).assert(); + if fail { + assert.failure(); + } else { + assert.success(); } - output } fn clean_target(crate_name: &str) { @@ -55,8 +39,7 @@ fn clean_target(crate_name: &str) { #[test] #[serial] fn test_build() { - let output = run_cargo_build("noop", &[], "test_build"); - assert!(output.status.success()); + run_cargo_build("noop", &[], false); clean_target("noop"); } @@ -64,13 +47,12 @@ fn test_build() { #[serial] fn test_dump() { // This test requires rustfilt. - assert!(Command::new("cargo") + assert!(process::Command::new("cargo") .args(&["install", "-f", "rustfilt"]) .status() .expect("Unable to install rustfilt required for --dump option") .success()); - let output = run_cargo_build("noop", &["--dump"], "test_dump"); - assert!(output.status.success()); + run_cargo_build("noop", &["--dump"], false); let cwd = env::current_dir().expect("Unable to get current working directory"); let dump = cwd .join("tests") @@ -86,8 +68,7 @@ fn test_dump() { #[test] #[serial] fn test_out_dir() { - let output = run_cargo_build("noop", &["--sbf-out-dir", "tmp_out"], "test_out_dir"); - assert!(output.status.success()); + run_cargo_build("noop", &["--sbf-out-dir", "tmp_out"], false); let cwd = env::current_dir().expect("Unable to get current working directory"); let dir = cwd.join("tmp_out"); assert!(dir.exists()); @@ -98,12 +79,7 @@ fn test_out_dir() { #[test] #[serial] fn test_generate_child_script_on_failre() { - let output = run_cargo_build( - "fail", - &["--generate-child-script-on-failure"], - "test_generate_child_script_on_failre", - ); - assert!(!output.status.success()); + run_cargo_build("fail", &["--generate-child-script-on-failure"], true); let cwd = env::current_dir().expect("Unable to get current working directory"); let scr = cwd .join("tests")