tamer: Remove tests invoking cargo and associated libs

There are a number of reasons for this, where the benefits do not make up
for the losses.

First: this is actually invoking cargo.  Not only is this not necessary, but
it's not desirable: cargo by default hits the network and does all sorts of
other stuff, when all we want to do is invoke the executable.  So the tests
aren't really testing the right thing in that sense.  See the previous
commit for more information.

The way it invokes cargo is different than the way the Makefile invokes
cargo, so on my system, it's actually invoking a _different cargo_!  This is
causing problems, in particular with lock files, which causes my tests to
fail.

Importantly, this also removes a _lot_ of dependencies, which removes a lot
of supplier chain risk and a lot of code to audit.  This provides
significant security benefits, especially given that what was being tested
was rather small, and could be done in a shell script.

TAMER will receive significant system testing later on.  But for now, none
of this was worth it.

Further audits of dependencies will come later on.  I've always been fairly
insistent on keeping the dependency graph small and auditable, but recent
supply chain attacks have given me a better way to rationalize the security
risk.  Further, I'm the only one on this project right now.
main
Mike Gerwitz 2021-12-02 12:32:56 -05:00
parent 87c457ba41
commit fd1b1527d6
6 changed files with 10 additions and 409 deletions

213
tamer/Cargo.lock generated
View File

@ -2,32 +2,11 @@
# It is not intended for manual editing.
version = 3
[[package]]
name = "aho-corasick"
version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
dependencies = [
"memchr",
]
[[package]]
name = "arrayvec"
version = "0.7.1"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be4dc07131ffa69b8072d35f5007352af944213cde02545e2103680baed38fcd"
[[package]]
name = "assert_cmd"
version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7ac5c260f75e4e4ba87b7342be6edcecbcb3eb6741a0507fda7ad115845cc65"
dependencies = [
"escargot",
"predicates",
"predicates-core",
"predicates-tree",
]
checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
[[package]]
name = "autocfg"
@ -47,22 +26,6 @@ version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "difference"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
[[package]]
name = "escargot"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19db1f7e74438642a5018cdf263bb1325b2e792f02dd0a3ca6d6c0f0d7b1d5a5"
dependencies = [
"serde",
"serde_json",
]
[[package]]
name = "exitcode"
version = "1.1.2"
@ -75,15 +38,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
[[package]]
name = "float-cmp"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4"
dependencies = [
"num-traits",
]
[[package]]
name = "fxhash"
version = "0.2.1"
@ -104,26 +58,20 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.9.1"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
[[package]]
name = "indexmap"
version = "1.6.2"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3"
checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
dependencies = [
"autocfg",
"hashbrown",
]
[[package]]
name = "itoa"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
[[package]]
name = "lazy_static"
version = "1.4.0"
@ -132,24 +80,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "memchr"
version = "2.4.0"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc"
[[package]]
name = "normalize-line-endings"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
[[package]]
name = "num-traits"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
dependencies = [
"autocfg",
]
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]]
name = "paste"
@ -177,44 +110,6 @@ dependencies = [
"xml-rs",
]
[[package]]
name = "predicates"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df"
dependencies = [
"difference",
"float-cmp",
"normalize-line-endings",
"predicates-core",
"regex",
]
[[package]]
name = "predicates-core"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57e35a3326b75e49aa85f5dc6ec15b41108cf5aee58eabb1f274dd18b73c2451"
[[package]]
name = "predicates-tree"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15f553275e5721409451eb85e15fd9a860a6e5ab4496eb215987502b5f5391f2"
dependencies = [
"predicates-core",
"treeline",
]
[[package]]
name = "proc-macro2"
version = "1.0.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"
dependencies = [
"unicode-xid",
]
[[package]]
name = "quick-xml"
version = "0.23.0-alpha3"
@ -224,92 +119,17 @@ dependencies = [
"memchr",
]
[[package]]
name = "quote"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
dependencies = [
"proc-macro2",
]
[[package]]
name = "regex"
version = "1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
[[package]]
name = "ryu"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
[[package]]
name = "serde"
version = "1.0.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.126"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.64"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "syn"
version = "1.0.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7"
dependencies = [
"proc-macro2",
"quote",
"unicode-xid",
]
[[package]]
name = "tamer"
version = "0.0.0"
dependencies = [
"arrayvec",
"assert_cmd",
"bumpalo",
"exitcode",
"fxhash",
@ -319,28 +139,15 @@ dependencies = [
"paste",
"petgraph",
"petgraph-graphml",
"predicates",
"quick-xml",
"static_assertions",
]
[[package]]
name = "treeline"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41"
[[package]]
name = "unicode-width"
version = "0.1.8"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
[[package]]
name = "unicode-xid"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
[[package]]
name = "xml-rs"

View File

@ -22,10 +22,6 @@ lto = true
# in a release.
lto = true
[dev-dependencies]
assert_cmd = "0.10"
predicates = "1"
[dependencies]
arrayvec = ">= 0.7.1"
bumpalo = ">= 2.6.0"

View File

@ -1 +0,0 @@
This is not valid XML!

View File

@ -1,96 +0,0 @@
// Copyright (C) 2014-2021 Ryan Specialty Group, LLC.
//
// This file is part of TAME.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
use assert_cmd::prelude::*;
use predicates::prelude::*;
use std::process::Command;
#[test]
fn compile_invalid_argument() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tamec")?;
cmd.arg("-q");
cmd.assert()
.failure()
.code(exitcode::USAGE)
.stderr(predicate::str::contains("Unrecognized option:"));
Ok(())
}
#[test]
fn compile_missing_input_file() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tamec")?;
cmd.arg("--emit").arg("xmlo");
cmd.assert()
.failure()
.code(exitcode::USAGE)
.stderr(predicate::str::contains("INPUT"));
Ok(())
}
#[test]
fn compile_missing_emit() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tamec")?;
cmd.arg("foobar");
cmd.assert()
.failure()
.code(exitcode::USAGE)
.stderr(predicate::str::contains("--emit xmlo"));
Ok(())
}
#[test]
fn compile_invalid_emit() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tamec")?;
cmd.arg("foobar");
cmd.arg("--emit").arg("foo");
cmd.assert()
.failure()
.code(exitcode::USAGE)
.stderr(predicate::str::contains("--emit xmlo"));
Ok(())
}
#[test]
fn compile_input_file_does_not_exist() -> Result<(), Box<dyn std::error::Error>>
{
let mut cmd = Command::cargo_bin("tamec")?;
cmd.arg("foobar.xml");
cmd.arg("--emit").arg("xmlo");
cmd.assert()
.failure()
.code(1)
.stderr(predicate::str::contains("No such file or directory"));
Ok(())
}
#[test]
fn compile_input_file_wrong_extension() -> Result<(), Box<dyn std::error::Error>>
{
let mut cmd = Command::cargo_bin("tamec")?;
cmd.arg("foobar.php");
cmd.arg("--emit").arg("xmlo");
cmd.assert().failure().stderr(predicate::str::contains(
"foobar.php: file format not recognized",
));
Ok(())
}

View File

@ -1,105 +0,0 @@
// Copyright (C) 2014-2021 Ryan Specialty Group, LLC.
//
// This file is part of TAME.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
use assert_cmd::prelude::*;
use predicates::prelude::*;
use std::process::Command;
#[test]
fn link_invalid_argument() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tameld")?;
cmd.arg("-q");
cmd.assert()
.failure()
.code(exitcode::USAGE)
.stderr(predicate::str::contains("Unrecognized option:"));
Ok(())
}
#[test]
fn link_missing_input_file() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tameld")?;
cmd.assert()
.failure()
.code(exitcode::USAGE)
.stderr(predicate::str::contains("FILE"));
Ok(())
}
#[test]
fn link_missing_output_file() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tameld")?;
cmd.arg("foobar");
cmd.assert()
.failure()
.code(exitcode::USAGE)
.stderr(predicate::str::contains("-o OUTPUT"));
Ok(())
}
#[test]
fn link_input_file_does_not_exist() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tameld")?;
cmd.arg("foobar");
cmd.arg("-o").arg("tests/data/test-output.xmle");
cmd.assert()
.failure()
.code(1)
.stderr(predicate::str::contains("No such file or directory"));
Ok(())
}
#[test]
fn link_invalid_emit() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tameld")?;
cmd.arg("foobar");
cmd.arg("--emit").arg("notgood");
cmd.arg("-o").arg("tests/data/test-output.xmle");
cmd.assert()
.failure()
.stderr(predicate::str::contains("--emit notgood"));
Ok(())
}
#[test]
fn link_empty_input_file() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tameld")?;
cmd.arg("tests/data/empty.xmlo");
cmd.arg("-o").arg("tests/data/test-output.xmle");
cmd.assert()
.failure()
.stderr(predicate::str::contains("stack overflow")); // uh oh
Ok(())
}
#[test]
fn link_invalid_input_file() -> Result<(), Box<dyn std::error::Error>> {
let mut cmd = Command::cargo_bin("tameld")?;
cmd.arg("tests/data/invalid.xmlo");
cmd.arg("-o").arg("tests/data/test-output.xmle");
cmd.assert()
.failure()
.stderr(predicate::str::contains("stack overflow")); // uh oh
Ok(())
}