From ae2ed48ab875e9916a5040792c4900faf9d0e6cd Mon Sep 17 00:00:00 2001 From: Leynos Date: Fri, 4 Jul 2025 02:07:36 +0100 Subject: [PATCH] Test LengthFormat error handling --- tests/response.rs | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/tests/response.rs b/tests/response.rs index 069334d0..d7417e64 100644 --- a/tests/response.rs +++ b/tests/response.rs @@ -135,9 +135,12 @@ async fn send_response_propagates_write_error() { assert!(matches!(err, wireframe::app::SendError::Io(_))); } -#[test] -fn encode_fails_for_unsupported_prefix_size() { - let fmt = LengthFormat::new(3, Endianness::Big); +#[rstest] +#[case(0, Endianness::Big)] +#[case(3, Endianness::Big)] +#[case(5, Endianness::Little)] +fn encode_fails_for_invalid_prefix_size(#[case] bytes: usize, #[case] endian: Endianness) { + let fmt = LengthFormat::new(bytes, endian); let processor = LengthPrefixedProcessor::new(fmt); let mut buf = BytesMut::new(); let err = processor @@ -146,15 +149,31 @@ fn encode_fails_for_unsupported_prefix_size() { assert_eq!(err.kind(), std::io::ErrorKind::InvalidInput); } -#[test] -fn decode_fails_for_unsupported_prefix_size() { - let fmt = LengthFormat::new(3, Endianness::Little); +#[rstest] +#[case(0, Endianness::Little)] +#[case(3, Endianness::Little)] +#[case(5, Endianness::Big)] +fn decode_fails_for_invalid_prefix_size(#[case] bytes: usize, #[case] endian: Endianness) { + let fmt = LengthFormat::new(bytes, endian); let processor = LengthPrefixedProcessor::new(fmt); - let mut buf = BytesMut::from(&[0x00, 0x01, 0x02][..]); + let mut buf = BytesMut::from(vec![0u8; bytes].as_slice()); let err = processor.decode(&mut buf).expect_err("expected error"); assert_eq!(err.kind(), std::io::ErrorKind::InvalidInput); } +#[rstest] +#[case(LengthFormat::new(1, Endianness::Big), 256)] +#[case(LengthFormat::new(2, Endianness::Little), 65_536)] +fn encode_fails_for_length_too_large(#[case] fmt: LengthFormat, #[case] len: usize) { + let processor = LengthPrefixedProcessor::new(fmt); + let frame = vec![0u8; len]; + let mut buf = BytesMut::new(); + let err = processor + .encode(&frame, &mut buf) + .expect_err("expected error"); + assert_eq!(err.kind(), std::io::ErrorKind::InvalidInput); +} + #[tokio::test] /// Tests that `send_response` returns a serialization error when encoding fails. ///