From 007d96dedd33fc2e69159564b64320bffb1fb0cc Mon Sep 17 00:00:00 2001 From: Hardcore Sushi Date: Sun, 4 Jul 2021 14:38:51 +0200 Subject: [PATCH] Add integration test --- Cargo.lock | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 6 ++- tests/cli.rs | 33 +++++++++++++ 3 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 tests/cli.rs diff --git a/Cargo.lock b/Cargo.lock index b9e92de..70d22b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,6 +46,20 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "assert_cmd" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2dfc8228c6260bf620fc5a341afa8e27edcde388b19ffc5732320bfe657eb2" +dependencies = [ + "bstr", + "doc-comment", + "predicates", + "predicates-core", + "predicates-tree", + "wait-timeout", +] + [[package]] name = "atty" version = "0.2.14" @@ -95,6 +109,17 @@ dependencies = [ "digest", ] +[[package]] +name = "bstr" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", +] + [[package]] name = "cc" version = "1.0.68" @@ -203,6 +228,12 @@ dependencies = [ "syn", ] +[[package]] +name = "difference" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" + [[package]] name = "digest" version = "0.9.0" @@ -218,6 +249,7 @@ version = "0.1.0" dependencies = [ "aes", "argon2", + "assert_cmd", "blake3", "chacha20", "clap", @@ -227,9 +259,16 @@ dependencies = [ "num_enum", "rand", "rpassword", + "tempfile", "zeroize", ] +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + [[package]] name = "generic-array" version = "0.14.4" @@ -280,12 +319,24 @@ dependencies = [ "digest", ] +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + [[package]] name = "libc" version = "0.2.97" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" +[[package]] +name = "memchr" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" + [[package]] name = "num_enum" version = "0.5.1" @@ -331,6 +382,32 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +[[package]] +name = "predicates" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49cfaf7fdaa3bfacc6fa3e7054e65148878354a5cfddcf661df4c851f8021df" +dependencies = [ + "difference", + "predicates-core", +] + +[[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-macro-crate" version = "0.1.5" @@ -398,6 +475,30 @@ dependencies = [ "rand_core", ] +[[package]] +name = "redox_syscall" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + [[package]] name = "rpassword" version = "5.0.1" @@ -437,6 +538,20 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "tempfile" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "rand", + "redox_syscall", + "remove_dir_all", + "winapi", +] + [[package]] name = "textwrap" version = "0.11.0" @@ -455,6 +570,12 @@ dependencies = [ "serde", ] +[[package]] +name = "treeline" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" + [[package]] name = "typenum" version = "1.13.0" @@ -485,6 +606,15 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index 8714c14..4c2e978 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,4 +26,8 @@ blake3 = "0.3" hkdf = "0.11" argon2 = "0.2" rpassword = "5.0" -zeroize = "1.3" \ No newline at end of file +zeroize = "1.3" + +[dev-dependencies] +assert_cmd = "1.0" +tempfile = "3.0" \ No newline at end of file diff --git a/tests/cli.rs b/tests/cli.rs new file mode 100644 index 0000000..f56ec50 --- /dev/null +++ b/tests/cli.rs @@ -0,0 +1,33 @@ +use std::{io::{self, Read, Write}, fs::File, path::PathBuf}; +use assert_cmd::{Command, cargo::CargoError}; +use tempfile::{NamedTempFile, TempDir}; + +fn doby_cmd<>() -> Result { + const PASSWORD: &str = "the password"; + let mut cmd = Command::cargo_bin("doby")?; + cmd.arg("-p").arg(PASSWORD); + Ok(cmd) +} + +#[test] +fn files() -> io::Result<()> { + const PLAINTEXT: &[u8] = b"the plaintext"; + + let tmp_dir = TempDir::new()?; + let tmp_path = PathBuf::from(tmp_dir.path()); + + let mut tmp_plaintext = NamedTempFile::new_in(&tmp_dir)?; + tmp_plaintext.write_all(PLAINTEXT)?; + let tmp_ciphertext = tmp_path.join("ciphertext"); + doby_cmd().unwrap().arg(tmp_plaintext.path()).arg(&tmp_ciphertext).assert().success().stdout("").stderr(""); + + let tmp_decrypted = tmp_path.join("decryped"); + doby_cmd().unwrap().arg(tmp_ciphertext).arg(&tmp_decrypted).assert().success().stdout("").stderr(""); + + let mut tmp_decrypted = File::open(tmp_decrypted).unwrap(); + let mut buff = [0; PLAINTEXT.len()]; + assert_eq!(tmp_decrypted.read(&mut buff)?, PLAINTEXT.len()); + assert_eq!(buff, PLAINTEXT); + + Ok(()) +} \ No newline at end of file