From f2fa1e1be14d7a9a59d6eae4181ac5497ce4f5b7 Mon Sep 17 00:00:00 2001 From: Tyler Date: Sat, 29 May 2021 15:22:42 -0700 Subject: [PATCH] Adds additional test resources & unit tests for block. --- src/uu/dd/src/dd_test.rs | 203 +++++++++++++++++- src/uu/dd/test-resources/dd-block-cbs16.spec | 1 + src/uu/dd/test-resources/dd-block-cbs16.test | 16 ++ src/uu/dd/test-resources/dd-block-cbs8.spec | 1 + .../dd-block-consecutive-nl-cbs16.spec | 1 + .../dd-block-consecutive-nl.test | 4 + .../dd/test-resources/dd-unblock-cbs16.spec | 16 ++ .../dd/test-resources/dd-unblock-cbs16.test | 1 + src/uu/dd/test-resources/dd-unblock-cbs8.spec | 32 +++ 9 files changed, 272 insertions(+), 3 deletions(-) create mode 100644 src/uu/dd/test-resources/dd-block-cbs16.spec create mode 100644 src/uu/dd/test-resources/dd-block-cbs16.test create mode 100644 src/uu/dd/test-resources/dd-block-cbs8.spec create mode 100644 src/uu/dd/test-resources/dd-block-consecutive-nl-cbs16.spec create mode 100644 src/uu/dd/test-resources/dd-block-consecutive-nl.test create mode 100644 src/uu/dd/test-resources/dd-unblock-cbs16.spec create mode 100644 src/uu/dd/test-resources/dd-unblock-cbs16.test create mode 100644 src/uu/dd/test-resources/dd-unblock-cbs8.spec diff --git a/src/uu/dd/src/dd_test.rs b/src/uu/dd/src/dd_test.rs index 6d697b5ec..b3187fc10 100644 --- a/src/uu/dd/src/dd_test.rs +++ b/src/uu/dd/src/dd_test.rs @@ -175,6 +175,38 @@ macro_rules! make_icf_test ( }; ); +macro_rules! make_block_test ( + ( $test_id:ident, $test_name:expr, $src:expr, $block:expr, $spec:expr ) => + { + make_spec_test!($test_id, + $test_name, + Input { + src: $src, + non_ascii: false, + ibs: 512, + xfer_stats: StatusLevel::None, + cflags: IConvFlags { + ctable: None, + block: $block, + unblock: None, + swab: false, + sync: false, + noerror: false, + }, + iflags: DEFAULT_IFLAGS, + }, + Output { + dst: File::create(format!("./test-resources/FAILED-{}.test", $test_name)).unwrap(), + obs: 512, + cflags: DEFAULT_CFO, + oflags: DEFAULT_OFLAGS, + }, + $spec, + format!("./test-resources/FAILED-{}.test", $test_name) + ); + }; +); + make_spec_test!( zeros_4k_test, "zeros-4k", @@ -371,10 +403,175 @@ make_icf_test!( File::open("./test-resources/seq-byte-values-odd.spec").unwrap() ); -fn block_test_basic() +static NL: u8 = '\n' as u8; +static SPACE: u8 = ' ' as u8; + +#[test] +fn block_test_no_nl() { - let mut buf = vec![0u8, 1u8, 2u8, 3u8]; + let buf = vec![0u8, 1u8, 2u8, 3u8]; let res = block(&buf, 4); - assert_eq!(res, vec![buf]); + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8], + ]); } + +#[test] +fn block_test_no_nl_short_rec() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8]; + let res = block(&buf, 8); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE], + ]); +} + +#[test] +fn block_test_no_nl_trunc() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8, 4u8]; + let res = block(&buf, 4); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8/*, 4u8*/], + ]); +} + +#[test] +fn block_test_nl_gt_cbs_trunc() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8, 4u8, NL, 5u8, 6u8, 7u8]; + let res = block(&buf, 4); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8], + // gnu-dd truncates this record + // vec![4u8, SPACE, SPACE, SPACE], + vec![5u8, 6u8], + vec![7u8], + ]); +} + +#[test] +fn block_test_surrounded_nl() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, 5u8, 6u8, 7u8, 8u8]; + let res = block(&buf, 8); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE], + vec![4u8, 5u8, 6u8, 7u8, 8u8, SPACE, SPACE, SPACE], + ]); +} + +#[test] +fn block_test_multiple_nl_same_block() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, NL, 5u8, 6u8, 7u8, 8u8, 9u8, 10u8, 11u8 ]; + let res = block(&buf, 8); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE], + vec![4u8, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE], + vec![5u8, 6u8, 7u8, 8u8, 9u8, 10u8, 11u8, SPACE], + ]); +} + +#[test] +fn block_test_multiple_nl_diff_block() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, 5u8, 6u8, 7u8, NL, 8u8, 9u8, 10u8, 11u8 ]; + let res = block(&buf, 8); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE], + vec![4u8, 5u8, 6u8, 7u8, SPACE, SPACE, SPACE, SPACE], + vec![8u8, 9u8, 10u8, 11u8, SPACE, SPACE, SPACE, SPACE], + ]); +} + +#[test] +fn block_test_lone_nl_end() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8, NL]; + let res = block(&buf, 4); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8], + ]); +} + +#[test] +fn block_test_end_nl() +{ + let buf = vec![0u8, 1u8, 2u8, NL]; + let res = block(&buf, 4); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, SPACE] + ]); +} + +#[test] +fn block_test_start_nl() +{ + let buf = vec![NL, 0u8, 1u8, 2u8, 3u8]; + let res = block(&buf, 4); + + assert_eq!(res, vec![ + vec![SPACE, SPACE, SPACE, SPACE], + vec![0u8, 1u8, 2u8, 3u8], + ]); +} + +#[test] +fn block_test_double_nl() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8, NL, NL, 4u8, 5u8, 6u8, 7u8]; + let res = block(&buf, 8); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE], + vec![SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE, SPACE], + vec![4u8, 5u8, 6u8, 7u8], + ]); +} + +#[test] +fn block_test_double_nl_aligned() +{ + let buf = vec![0u8, 1u8, 2u8, 3u8, NL, NL, 3u8, 4u8, 5u8, 6u8, 7u8, 8u8]; + let res = block(&buf, 4); + + assert_eq!(res, vec![ + vec![0u8, 1u8, 2u8, 3u8], + vec![SPACE, SPACE, SPACE, SPACE], + vec![3u8, 4u8, 5u8, 6u8, 7u8/*, 8u8*/], + ]); +} + +make_block_test!( + block_cbs16, + "block-cbs-16", + File::open("./test-resources/dd-block-cbs16.test").unwrap(), + Some(16), + File::open("./test-resources/dd-block-cbs16.spec").unwrap() +); + +make_block_test!( + block_cbs16_as_cbs8, + "block-cbs-16-as-cbs8", + File::open("./test-resources/dd-block-cbs16.test").unwrap(), + Some(8), + File::open("./test-resources/dd-block-cbs8.spec").unwrap() +); + +make_block_test!( + block_consecutive_nl, + "block-consecutive-nl", + File::open("./test-resources/dd-block-consecutive-nl.test").unwrap(), + Some(16), + File::open("./test-resources/dd-block-consecutive-nl-cbs16.spec").unwrap() +); diff --git a/src/uu/dd/test-resources/dd-block-cbs16.spec b/src/uu/dd/test-resources/dd-block-cbs16.spec new file mode 100644 index 000000000..d06bc43ca --- /dev/null +++ b/src/uu/dd/test-resources/dd-block-cbs16.spec @@ -0,0 +1 @@ +0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 0123456789a 0123456789ab 0123456789abc 0123456789abcd 0123456789abcde 0123456789abcdef \ No newline at end of file diff --git a/src/uu/dd/test-resources/dd-block-cbs16.test b/src/uu/dd/test-resources/dd-block-cbs16.test new file mode 100644 index 000000000..b59df5561 --- /dev/null +++ b/src/uu/dd/test-resources/dd-block-cbs16.test @@ -0,0 +1,16 @@ +0 +01 +012 +0123 +01234 +012345 +0123456 +01234567 +012345678 +0123456789 +0123456789a +0123456789ab +0123456789abc +0123456789abcd +0123456789abcde +0123456789abcdef diff --git a/src/uu/dd/test-resources/dd-block-cbs8.spec b/src/uu/dd/test-resources/dd-block-cbs8.spec new file mode 100644 index 000000000..ea86bdd74 --- /dev/null +++ b/src/uu/dd/test-resources/dd-block-cbs8.spec @@ -0,0 +1 @@ +0 01 012 0123 01234 012345 0123456 012345670123456701234567012345670123456701234567012345670123456701234567 \ No newline at end of file diff --git a/src/uu/dd/test-resources/dd-block-consecutive-nl-cbs16.spec b/src/uu/dd/test-resources/dd-block-consecutive-nl-cbs16.spec new file mode 100644 index 000000000..f365007e0 --- /dev/null +++ b/src/uu/dd/test-resources/dd-block-consecutive-nl-cbs16.spec @@ -0,0 +1 @@ +pre post \ No newline at end of file diff --git a/src/uu/dd/test-resources/dd-block-consecutive-nl.test b/src/uu/dd/test-resources/dd-block-consecutive-nl.test new file mode 100644 index 000000000..df0029a74 --- /dev/null +++ b/src/uu/dd/test-resources/dd-block-consecutive-nl.test @@ -0,0 +1,4 @@ +pre + + +post diff --git a/src/uu/dd/test-resources/dd-unblock-cbs16.spec b/src/uu/dd/test-resources/dd-unblock-cbs16.spec new file mode 100644 index 000000000..b59df5561 --- /dev/null +++ b/src/uu/dd/test-resources/dd-unblock-cbs16.spec @@ -0,0 +1,16 @@ +0 +01 +012 +0123 +01234 +012345 +0123456 +01234567 +012345678 +0123456789 +0123456789a +0123456789ab +0123456789abc +0123456789abcd +0123456789abcde +0123456789abcdef diff --git a/src/uu/dd/test-resources/dd-unblock-cbs16.test b/src/uu/dd/test-resources/dd-unblock-cbs16.test new file mode 100644 index 000000000..d06bc43ca --- /dev/null +++ b/src/uu/dd/test-resources/dd-unblock-cbs16.test @@ -0,0 +1 @@ +0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 0123456789a 0123456789ab 0123456789abc 0123456789abcd 0123456789abcde 0123456789abcdef \ No newline at end of file diff --git a/src/uu/dd/test-resources/dd-unblock-cbs8.spec b/src/uu/dd/test-resources/dd-unblock-cbs8.spec new file mode 100644 index 000000000..02a88fe2a --- /dev/null +++ b/src/uu/dd/test-resources/dd-unblock-cbs8.spec @@ -0,0 +1,32 @@ +0 + +01 + +012 + +0123 + +01234 + +012345 + +0123456 + +01234567 + +01234567 +8 +01234567 +89 +01234567 +89a +01234567 +89ab +01234567 +89abc +01234567 +89abcd +01234567 +89abcde +01234567 +89abcdef