Skip to content

Commit

Permalink
cksum: implement --untagged
Browse files Browse the repository at this point in the history
  • Loading branch information
cakebaker committed May 14, 2023
1 parent 24e0bef commit 690fff2
Show file tree
Hide file tree
Showing 35 changed files with 135 additions and 9 deletions.
35 changes: 26 additions & 9 deletions src/uu/cksum/src/cksum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
// file that was distributed with this source code.

// spell-checker:ignore (ToDO) fname, algo
use clap::{crate_version, Arg, Command};
use clap::{crate_version, Arg, ArgAction, Command};
use hex::encode;
use std::ffi::OsStr;
use std::fs::File;
Expand Down Expand Up @@ -103,6 +103,7 @@ struct Options {
algo_name: &'static str,
digest: Box<dyn Digest + 'static>,
output_bits: usize,
untagged: bool,
}

/// Calculate checksum
Expand Down Expand Up @@ -161,12 +162,20 @@ where
),
(ALGORITHM_OPTIONS_CRC, true) => println!("{sum} {sz}"),
(ALGORITHM_OPTIONS_CRC, false) => println!("{sum} {sz} {}", filename.display()),
(ALGORITHM_OPTIONS_BLAKE2B, _) => println!("BLAKE2b ({}) = {sum}", filename.display()),
_ => println!(
"{} ({}) = {sum}",
options.algo_name.to_ascii_uppercase(),
filename.display()
),
(ALGORITHM_OPTIONS_BLAKE2B, _) if !options.untagged => {
println!("BLAKE2b ({}) = {sum}", filename.display());
}
_ => {
if options.untagged {
println!("{sum} {}", filename.display());
} else {
println!(
"{} ({}) = {sum}",
options.algo_name.to_ascii_uppercase(),
filename.display()
);
}
}
}
}

Expand Down Expand Up @@ -208,8 +217,9 @@ fn digest_read<T: Read>(
}

mod options {
pub static FILE: &str = "file";
pub static ALGORITHM: &str = "algorithm";
pub const ALGORITHM: &str = "algorithm";
pub const FILE: &str = "file";
pub const UNTAGGED: &str = "untagged";
}

#[uucore::main]
Expand All @@ -228,6 +238,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
algo_name: name,
digest: algo,
output_bits: bits,
untagged: matches.get_flag(options::UNTAGGED),
};

match matches.get_many::<String>(options::FILE) {
Expand Down Expand Up @@ -270,5 +281,11 @@ pub fn uu_app() -> Command {
ALGORITHM_OPTIONS_SM3,
]),
)
.arg(
Arg::new(options::UNTAGGED)
.long(options::UNTAGGED)
.help("create a reversed style checksum, without digest type")
.action(ArgAction::SetTrue),
)
.after_help(AFTER_HELP)
}
65 changes: 65 additions & 0 deletions tests/by-util/test_cksum.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,3 +159,68 @@ fn test_algorithm_stdin() {
}
}
}

#[test]
fn test_untagged_single_file() {
new_ucmd!()
.arg("--untagged")
.arg("lorem_ipsum.txt")
.succeeds()
.stdout_is_fixture("untagged/crc_single_file.expected");
}

#[test]
fn test_untagged_multiple_files() {
new_ucmd!()
.arg("--untagged")
.arg("lorem_ipsum.txt")
.arg("alice_in_wonderland.txt")
.succeeds()
.stdout_is_fixture("untagged/crc_multiple_files.expected");
}

#[test]
fn test_untagged_stdin() {
new_ucmd!()
.arg("--untagged")
.pipe_in_fixture("lorem_ipsum.txt")
.succeeds()
.stdout_is_fixture("untagged/crc_stdin.expected");
}

#[test]
fn test_untagged_algorithm_single_file() {
for algo in ALGOS {
new_ucmd!()
.arg("--untagged")
.arg(format!("--algorithm={algo}"))
.arg("lorem_ipsum.txt")
.succeeds()
.stdout_is_fixture(format!("untagged/{algo}_single_file.expected"));
}
}

#[test]
fn test_untagged_algorithm_multiple_files() {
for algo in ALGOS {
new_ucmd!()
.arg("--untagged")
.arg(format!("--algorithm={algo}"))
.arg("lorem_ipsum.txt")
.arg("alice_in_wonderland.txt")
.succeeds()
.stdout_is_fixture(format!("untagged/{algo}_multiple_files.expected"));
}
}

#[test]
fn test_untagged_algorithm_stdin() {
for algo in ALGOS {
new_ucmd!()
.arg("--untagged")
.arg(format!("--algorithm={algo}"))
.pipe_in_fixture("lorem_ipsum.txt")
.succeeds()
.stdout_is_fixture(format!("untagged/{algo}_stdin.expected"));
}
}
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/blake2b_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 lorem_ipsum.txt
91b8b0f0868e905ad18b8ac35e4a1dacd289857b19258ab5d1e071761af758b0134ec152d4f011fe1825ca889c80c2e072ca70eb50548c25fc49a98937515af4 alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/blake2b_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/blake2b_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0e97a09189e560c3789c0bff1f020166861ef857d1fbfe4574de1842e3c06cabb9575e4af6309a166158c2b408d3c038c1b49d828b35158142cdc0396d1195c3 -
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/bsd_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
08109 1 lorem_ipsum.txt
01814 1 alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/bsd_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
08109 1 lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/bsd_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
08109 1
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/crc_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
378294376 772 lorem_ipsum.txt
3805907707 302 alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/crc_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
378294376 772 lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/crc_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
378294376 772
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/md5_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
cd724690f7dc61775dfac400a71f2caa lorem_ipsum.txt
f6fa7033e16166a9589aa1c0388ffd58 alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/md5_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cd724690f7dc61775dfac400a71f2caa lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/md5_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cd724690f7dc61775dfac400a71f2caa -
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/sha1_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef lorem_ipsum.txt
22b54b2520e8b4fa59eb10719028a4e587c12d1e alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha1_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha1_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ab1dd0bae1d8883a3d18a66de6afbd28252cfbef -
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/sha224_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 lorem_ipsum.txt
54c9c7d78458886418ce0845111fc49fe1c628ffd4bf3da14226ffd9 alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha224_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha224_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3de66fbcad106e1b40ab391be56c51d2007eb1f9c655d0f4e29bfc01 -
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/sha256_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 lorem_ipsum.txt
14ab7e5a0aa3a670222744714bc96961d51012cb216225d965db71824a46e5fe alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha256_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha256_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
f7c420501c50e00b309250100d67ea5e910981536b4582fe9c435bd92b3f1f02 -
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/sha384_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb lorem_ipsum.txt
b7966c97ef84ab5858db2e0cdd33fbaf4fa8346d84de65aba001e738c242598a43272854d0073ad1099404eaa1d93766 alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha384_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha384_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
4be4b90a0d0d32966992921019f24abc824dcfb8b1c408102f1f6788fb80ba9a9a4c5a7b575a3353a90a8ee719481dcb -
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/sha512_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 lorem_ipsum.txt
251646d5a7eb481e0f3aced7839d78dd5e97153f822dc55938e17059c485990d85d602e2881b528b565ab6262584a69c97b068b26bda81acc9356c53c7c1c96d alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha512_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sha512_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
965464ab2556aad58ebc73d89ad221e559797529ecafc0f466c11795cff6d6e2c60f96a07c542cfd1f426e5e4fe0a48aa15667ba44096b213d0813cd038dfa05 -
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/sm3_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 lorem_ipsum.txt
d66617ae3c4e87828298dcd836f79efbab488c53b84e09c3e8e83a16c902418d alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sm3_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sm3_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6d296b805d060bfed22808df308dbb9b4317794dd4ed6740a10770a782699bc2 -
2 changes: 2 additions & 0 deletions tests/fixtures/cksum/untagged/sysv_multiple_files.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
6985 2 lorem_ipsum.txt
27441 1 alice_in_wonderland.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sysv_single_file.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6985 2 lorem_ipsum.txt
1 change: 1 addition & 0 deletions tests/fixtures/cksum/untagged/sysv_stdin.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6985 2

0 comments on commit 690fff2

Please sign in to comment.