mirror of
https://github.com/xavo95/repak.git
synced 2025-01-18 19:04:07 +00:00
Add some cli tests
This commit is contained in:
parent
9cfdd993d5
commit
389acbb7b4
3 changed files with 267 additions and 0 deletions
99
Cargo.lock
generated
99
Cargo.lock
generated
|
@ -94,6 +94,12 @@ version = "0.21.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
|
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bitflags"
|
||||||
|
version = "2.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "block-buffer"
|
name = "block-buffer"
|
||||||
version = "0.10.4"
|
version = "0.10.4"
|
||||||
|
@ -289,6 +295,15 @@ dependencies = [
|
||||||
"crypto-common",
|
"crypto-common",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dir-diff"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a7ad16bf5f84253b50d6557681c58c3ab67c47c77d39fed9aeb56e947290bd10"
|
||||||
|
dependencies = [
|
||||||
|
"walkdir",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "doc-comment"
|
name = "doc-comment"
|
||||||
version = "0.3.3"
|
version = "0.3.3"
|
||||||
|
@ -307,6 +322,22 @@ version = "0.3.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "errno"
|
||||||
|
version = "0.3.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"windows-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fastrand"
|
||||||
|
version = "2.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "658bd65b1cf4c852a3cc96f18a8ce7b5640f6b703f905c7d74532294c2a63984"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flate2"
|
name = "flate2"
|
||||||
version = "1.0.28"
|
version = "1.0.28"
|
||||||
|
@ -395,6 +426,12 @@ dependencies = [
|
||||||
"unicode-width",
|
"unicode-width",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indoc"
|
||||||
|
version = "2.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "inout"
|
name = "inout"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
|
@ -453,6 +490,12 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linux-raw-sys"
|
||||||
|
version = "0.4.13"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.21"
|
version = "0.4.21"
|
||||||
|
@ -652,8 +695,10 @@ dependencies = [
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
"base64",
|
"base64",
|
||||||
"clap",
|
"clap",
|
||||||
|
"dir-diff",
|
||||||
"hex",
|
"hex",
|
||||||
"indicatif",
|
"indicatif",
|
||||||
|
"indoc",
|
||||||
"itertools",
|
"itertools",
|
||||||
"path-clean",
|
"path-clean",
|
||||||
"path-slash",
|
"path-slash",
|
||||||
|
@ -661,6 +706,7 @@ dependencies = [
|
||||||
"repak",
|
"repak",
|
||||||
"sha2",
|
"sha2",
|
||||||
"strum",
|
"strum",
|
||||||
|
"tempfile",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -678,6 +724,19 @@ dependencies = [
|
||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustix"
|
||||||
|
version = "0.38.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"errno",
|
||||||
|
"libc",
|
||||||
|
"linux-raw-sys",
|
||||||
|
"windows-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls"
|
name = "rustls"
|
||||||
version = "0.22.4"
|
version = "0.22.4"
|
||||||
|
@ -715,6 +774,15 @@ version = "1.0.15"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47"
|
checksum = "80af6f9131f277a45a3fba6ce8e2258037bb0477a67e610d3c1fe046ab31de47"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "same-file"
|
||||||
|
version = "1.0.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-util",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "seq-macro"
|
name = "seq-macro"
|
||||||
version = "0.3.5"
|
version = "0.3.5"
|
||||||
|
@ -825,6 +893,18 @@ dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tempfile"
|
||||||
|
version = "3.10.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"fastrand",
|
||||||
|
"rustix",
|
||||||
|
"windows-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termtree"
|
name = "termtree"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
|
@ -954,6 +1034,16 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "walkdir"
|
||||||
|
version = "2.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
|
||||||
|
dependencies = [
|
||||||
|
"same-file",
|
||||||
|
"winapi-util",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
version = "0.11.0+wasi-snapshot-preview1"
|
version = "0.11.0+wasi-snapshot-preview1"
|
||||||
|
@ -985,6 +1075,15 @@ version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-util"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
|
||||||
|
dependencies = [
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi-x86_64-pc-windows-gnu"
|
name = "winapi-x86_64-pc-windows-gnu"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
|
|
|
@ -37,3 +37,6 @@ itertools = "0.12.0"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
assert_cmd = "2.0.12"
|
assert_cmd = "2.0.12"
|
||||||
|
dir-diff = "0.3.3"
|
||||||
|
indoc = "2.0.5"
|
||||||
|
tempfile = "3.10.1"
|
||||||
|
|
165
repak_cli/tests/cli.rs
Normal file
165
repak_cli/tests/cli.rs
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
use assert_cmd::prelude::*;
|
||||||
|
use indoc::{formatdoc, indoc};
|
||||||
|
use std::process::Command;
|
||||||
|
|
||||||
|
const PAK: &str = "../repak/tests/packs/pack_v11.pak";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_cli_info() {
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("info")
|
||||||
|
.arg(PAK)
|
||||||
|
.assert();
|
||||||
|
assert.success().stdout(indoc! {"
|
||||||
|
mount point: ../mount/point/root/
|
||||||
|
version: V11
|
||||||
|
version major: Fnv64BugFix
|
||||||
|
encrypted index: false
|
||||||
|
encrytion guid: Some(00000000000000000000000000000000)
|
||||||
|
4 file entries
|
||||||
|
"});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_cli_list() {
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("list")
|
||||||
|
.arg("-s")
|
||||||
|
.arg("")
|
||||||
|
.arg(PAK)
|
||||||
|
.assert();
|
||||||
|
assert.success().stdout(indoc! {r#"
|
||||||
|
../mount/point/root/directory/nested.txt
|
||||||
|
../mount/point/root/test.png
|
||||||
|
../mount/point/root/test.txt
|
||||||
|
../mount/point/root/zeros.bin
|
||||||
|
"#});
|
||||||
|
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("list")
|
||||||
|
.arg("-s")
|
||||||
|
.arg("../mount")
|
||||||
|
.arg(PAK)
|
||||||
|
.assert();
|
||||||
|
assert.success().stdout(indoc! {r#"
|
||||||
|
point/root/directory/nested.txt
|
||||||
|
point/root/test.png
|
||||||
|
point/root/test.txt
|
||||||
|
point/root/zeros.bin
|
||||||
|
"#});
|
||||||
|
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("list")
|
||||||
|
.arg("-s")
|
||||||
|
.arg("../mount/root/asdf")
|
||||||
|
.arg(PAK)
|
||||||
|
.assert();
|
||||||
|
assert.failure().stderr(indoc! {r#"
|
||||||
|
Error: Prefix "../mount/root/asdf" does not match path "../mount/point/root/directory/nested.txt"
|
||||||
|
"#});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_cli_get() {
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("get")
|
||||||
|
.arg("-s")
|
||||||
|
.arg("../mount/point")
|
||||||
|
.arg(PAK)
|
||||||
|
.arg("root/test.txt")
|
||||||
|
.assert();
|
||||||
|
assert.success().stdout(indoc! {r#"
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
||||||
|
"#});
|
||||||
|
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("get")
|
||||||
|
.arg("-s")
|
||||||
|
.arg("../mount/point")
|
||||||
|
.arg(PAK)
|
||||||
|
.arg("root/doesnotexist.txt")
|
||||||
|
.assert();
|
||||||
|
assert.failure().stderr(indoc! {r#"
|
||||||
|
Error: No entry found at doesnotexist.txt
|
||||||
|
"#});
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_cli_pack() {
|
||||||
|
let dir = tempfile::tempdir().unwrap();
|
||||||
|
|
||||||
|
let out_pak = dir.path().join("output.pak");
|
||||||
|
let out_dir = dir.path().join("output");
|
||||||
|
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("pack")
|
||||||
|
.arg("../repak/tests/pack/")
|
||||||
|
.arg("-m")
|
||||||
|
.arg("../mount/point/root")
|
||||||
|
.arg("--version")
|
||||||
|
.arg("V11")
|
||||||
|
.arg(&out_pak)
|
||||||
|
.assert();
|
||||||
|
assert.success().stdout(formatdoc! {r#"
|
||||||
|
Packed 4 files to {}
|
||||||
|
"#, out_pak.to_string_lossy()});
|
||||||
|
|
||||||
|
// TODO test packing to non-empty file
|
||||||
|
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("unpack")
|
||||||
|
.arg(&out_pak)
|
||||||
|
.arg("-s")
|
||||||
|
.arg("../mount/point/root")
|
||||||
|
.assert();
|
||||||
|
assert.success().stdout(formatdoc! {r#"
|
||||||
|
Unpacked 4 files to {} from {}
|
||||||
|
"#, out_dir.to_string_lossy(), out_pak.to_string_lossy()});
|
||||||
|
assert!(!dir_diff::is_different("../repak/tests/pack/", out_dir).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_cli_unpack() {
|
||||||
|
let dir = tempfile::tempdir().unwrap();
|
||||||
|
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("unpack")
|
||||||
|
.arg(PAK)
|
||||||
|
.arg("-s")
|
||||||
|
.arg("../mount")
|
||||||
|
.arg("-o")
|
||||||
|
.arg(dir.path())
|
||||||
|
.assert();
|
||||||
|
assert.success().stdout(formatdoc! {r#"
|
||||||
|
Unpacked 4 files to {} from ../repak/tests/packs/pack_v11.pak
|
||||||
|
"#, &dir.path().to_string_lossy()});
|
||||||
|
assert!(!dir_diff::is_different("../repak/tests/pack/", dir.path().join("point")).unwrap());
|
||||||
|
|
||||||
|
// TODO test unpacking to non-empty directory
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_cli_hashlist() {
|
||||||
|
let assert = Command::cargo_bin("repak")
|
||||||
|
.unwrap()
|
||||||
|
.arg("hash-list")
|
||||||
|
.arg(PAK)
|
||||||
|
.arg("-s")
|
||||||
|
.arg("../mount")
|
||||||
|
.assert();
|
||||||
|
assert.success().stdout(formatdoc! {r#"
|
||||||
|
246c88de650fb20d63abaeb7c1bd8556d0ea260bf4579beafe0b2597e00270a5 point/root/directory/nested.txt
|
||||||
|
d7d3e1c21a5b98621add61a4244a413abf5ad6413b0d25ba09bfd5536c75e3b1 point/root/test.png
|
||||||
|
56293a80e0394d252e995f2debccea8223e4b5b2b150bee212729b3b39ac4d46 point/root/test.txt
|
||||||
|
e5a00aa9991ac8a5ee3109844d84a55583bd20572ad3ffcd42792f3c36b183ad point/root/zeros.bin
|
||||||
|
"#});
|
||||||
|
}
|
Loading…
Reference in a new issue