From 96271ffa3cb9588c97dddddc186a28ef4bbcb43a Mon Sep 17 00:00:00 2001 From: D9nni Date: Tue, 9 Jan 2024 23:12:40 +0200 Subject: [PATCH] cksum: added tests for --raw with each algorithm, not working for crc, sysv, bsd --- src/uu/cksum/src/cksum.rs | 19 +++++++++++++----- tests/by-util/test_cksum.rs | 16 ++++++++------- .../cksum/raw/blake2b_single_file.expected | 1 + .../cksum/raw/bsd_single_file.expected | 1 + .../crc_single_file.expected} | 0 .../cksum/raw/md5_single_file.expected | Bin 0 -> 16 bytes .../cksum/raw/sha1_single_file.expected | 1 + .../cksum/raw/sha224_single_file.expected | Bin 0 -> 28 bytes .../cksum/raw/sha256_single_file.expected | 1 + .../cksum/raw/sha384_single_file.expected | 3 +++ .../cksum/raw/sha512_single_file.expected | 1 + .../cksum/raw/sm3_single_file.expected | 1 + .../cksum/raw/sysv_single_file.expected | 1 + 13 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 tests/fixtures/cksum/raw/blake2b_single_file.expected create mode 100644 tests/fixtures/cksum/raw/bsd_single_file.expected rename tests/fixtures/cksum/{raw_single_file.expected => raw/crc_single_file.expected} (100%) create mode 100644 tests/fixtures/cksum/raw/md5_single_file.expected create mode 100644 tests/fixtures/cksum/raw/sha1_single_file.expected create mode 100644 tests/fixtures/cksum/raw/sha224_single_file.expected create mode 100644 tests/fixtures/cksum/raw/sha256_single_file.expected create mode 100644 tests/fixtures/cksum/raw/sha384_single_file.expected create mode 100644 tests/fixtures/cksum/raw/sha512_single_file.expected create mode 100644 tests/fixtures/cksum/raw/sm3_single_file.expected create mode 100644 tests/fixtures/cksum/raw/sysv_single_file.expected diff --git a/src/uu/cksum/src/cksum.rs b/src/uu/cksum/src/cksum.rs index 40c06a386..6f3de690d 100644 --- a/src/uu/cksum/src/cksum.rs +++ b/src/uu/cksum/src/cksum.rs @@ -5,6 +5,7 @@ // spell-checker:ignore (ToDO) fname, algo use clap::{crate_version, value_parser, Arg, ArgAction, Command}; +use hex::decode; use hex::encode; use std::error::Error; use std::ffi::OsStr; @@ -151,12 +152,12 @@ fn cksum<'a, I>(mut options: Options, files: I) -> UResult<()> where I: Iterator, { - let files_vec: Vec<_> = files.collect(); - if options.raw && files_vec.len() > 1 { + let files: Vec<_> = files.collect(); + if options.raw && files.len() > 1 { return Err(Box::new(CkSumError::RawMultipleFiles)); } - for filename in files_vec { + for filename in files { let filename = Path::new(filename); let stdin_buf; let file_buf; @@ -175,8 +176,16 @@ where .map_err_context(|| "failed to read input".to_string())?; if options.raw { - let bytes_str = sum.parse::().unwrap().to_be_bytes(); - stdout().write_all(&bytes_str)?; + match decode(sum.clone()) { + Ok(bytes) => { + stdout().write_all(&bytes)?; + } + Err(_) => { + //bsd, sysv and crc have output generated without encode() + let bytes = sum.parse::().unwrap().to_be_bytes(); + stdout().write_all(&bytes)?; + } + } return Ok(()); } // The BSD checksum output is 5 digit integer diff --git a/tests/by-util/test_cksum.rs b/tests/by-util/test_cksum.rs index 52ac09911..b3db0bf0a 100644 --- a/tests/by-util/test_cksum.rs +++ b/tests/by-util/test_cksum.rs @@ -289,14 +289,16 @@ fn test_length_is_zero() { #[test] fn test_raw_single_file() { - new_ucmd!() - .arg("--raw") - .arg("lorem_ipsum.txt") - .succeeds() - .no_stderr() - .stdout_is_fixture_bytes("raw_single_file.expected"); + for algo in ALGOS { + new_ucmd!() + .arg("--raw") + .arg("lorem_ipsum.txt") + .arg(format!("--algorithm={algo}")) + .succeeds() + .no_stderr() + .stdout_is_fixture_bytes(format!("raw/{algo}_single_file.expected")); + } } - #[test] fn test_raw_multiple_files() { new_ucmd!() diff --git a/tests/fixtures/cksum/raw/blake2b_single_file.expected b/tests/fixtures/cksum/raw/blake2b_single_file.expected new file mode 100644 index 000000000..4955b2f99 --- /dev/null +++ b/tests/fixtures/cksum/raw/blake2b_single_file.expected @@ -0,0 +1 @@ +�����`�x� �f��W���Et�B��l��W^J�0�aX´��8�����5�B��9m�� \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/bsd_single_file.expected b/tests/fixtures/cksum/raw/bsd_single_file.expected new file mode 100644 index 000000000..538ab19f7 --- /dev/null +++ b/tests/fixtures/cksum/raw/bsd_single_file.expected @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/fixtures/cksum/raw_single_file.expected b/tests/fixtures/cksum/raw/crc_single_file.expected similarity index 100% rename from tests/fixtures/cksum/raw_single_file.expected rename to tests/fixtures/cksum/raw/crc_single_file.expected diff --git a/tests/fixtures/cksum/raw/md5_single_file.expected b/tests/fixtures/cksum/raw/md5_single_file.expected new file mode 100644 index 0000000000000000000000000000000000000000..e7b47aebbcba99b6dbaa03e825f0be3b5bfdb012 GIT binary patch literal 16 YcmX?GKH08Ru5cmMzZ literal 0 HcmV?d00001 diff --git a/tests/fixtures/cksum/raw/sha1_single_file.expected b/tests/fixtures/cksum/raw/sha1_single_file.expected new file mode 100644 index 000000000..0f634be47 --- /dev/null +++ b/tests/fixtures/cksum/raw/sha1_single_file.expected @@ -0,0 +1 @@ +к؈:=m毽(%, \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sha224_single_file.expected b/tests/fixtures/cksum/raw/sha224_single_file.expected new file mode 100644 index 0000000000000000000000000000000000000000..bc3fa6bf18f53f72894471200626992087ef971d GIT binary patch literal 28 kcmcD0mcM7MK%TV2YD?*-If0iL>Nfs77JA{!quGBL0mH`*$p8QV literal 0 HcmV?d00001 diff --git a/tests/fixtures/cksum/raw/sha256_single_file.expected b/tests/fixtures/cksum/raw/sha256_single_file.expected new file mode 100644 index 000000000..b9ce06f39 --- /dev/null +++ b/tests/fixtures/cksum/raw/sha256_single_file.expected @@ -0,0 +1 @@ + PP 0P g^ SkEC[+? \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sha384_single_file.expected b/tests/fixtures/cksum/raw/sha384_single_file.expected new file mode 100644 index 000000000..4b337f859 --- /dev/null +++ b/tests/fixtures/cksum/raw/sha384_single_file.expected @@ -0,0 +1,3 @@ +K + 2iJMϸ/gLZ{WZ3S +H \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sha512_single_file.expected b/tests/fixtures/cksum/raw/sha512_single_file.expected new file mode 100644 index 000000000..79f78cf00 --- /dev/null +++ b/tests/fixtures/cksum/raw/sha512_single_file.expected @@ -0,0 +1 @@ +Td%VՎsؚ!Yyu)f|T,Bn^OऊVgD k!= \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sm3_single_file.expected b/tests/fixtures/cksum/raw/sm3_single_file.expected new file mode 100644 index 000000000..3506406dc --- /dev/null +++ b/tests/fixtures/cksum/raw/sm3_single_file.expected @@ -0,0 +1 @@ +m)k] (0CyMg@pi \ No newline at end of file diff --git a/tests/fixtures/cksum/raw/sysv_single_file.expected b/tests/fixtures/cksum/raw/sysv_single_file.expected new file mode 100644 index 000000000..b975da49c --- /dev/null +++ b/tests/fixtures/cksum/raw/sysv_single_file.expected @@ -0,0 +1 @@ +I \ No newline at end of file