From de901c1b5d58b81a16b46f4a91bc0ffce6bfc0a2 Mon Sep 17 00:00:00 2001 From: Leynos Date: Fri, 20 Jun 2025 20:01:53 +0100 Subject: [PATCH 1/2] Add processor fixture and clone support --- src/frame.rs | 1 + tests/routes.rs | 14 +++++++------- tests/util.rs | 10 +++++++++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/frame.rs b/src/frame.rs index 97e31dc5..b0a6c960 100644 --- a/src/frame.rs +++ b/src/frame.rs @@ -190,6 +190,7 @@ pub trait FrameProcessor: Send + Sync { } /// Simple length-prefixed framing using a configurable length prefix. +#[derive(Clone)] pub struct LengthPrefixedProcessor { format: LengthFormat, } diff --git a/tests/routes.rs b/tests/routes.rs index e8d45db7..6b61ff39 100644 --- a/tests/routes.rs +++ b/tests/routes.rs @@ -4,6 +4,7 @@ use std::sync::{ }; use bytes::BytesMut; +use rstest::rstest; use wireframe::{ Serializer, app::WireframeApp, @@ -13,7 +14,7 @@ use wireframe::{ }; mod util; -use util::run_app_with_frame; +use util::{processor, run_app_with_frame}; #[derive(bincode::Encode, bincode::BorrowDecode, PartialEq, Debug)] struct TestEnvelope { @@ -24,13 +25,14 @@ struct TestEnvelope { #[derive(bincode::Encode, bincode::BorrowDecode, PartialEq, Debug)] struct Echo(u8); +#[rstest] #[tokio::test] -async fn handler_receives_message_and_echoes_response() { +async fn handler_receives_message_and_echoes_response(processor: LengthPrefixedProcessor) { let called = Arc::new(AtomicUsize::new(0)); let called_clone = called.clone(); let app = WireframeApp::new() .unwrap() - .frame_processor(LengthPrefixedProcessor) + .frame_processor(processor.clone()) .route( 1, Box::new(move |_| { @@ -49,14 +51,12 @@ async fn handler_receives_message_and_echoes_response() { }; let env_bytes = BincodeSerializer.serialize(&env).unwrap(); let mut framed = BytesMut::new(); - LengthPrefixedProcessor - .encode(&env_bytes, &mut framed) - .unwrap(); + processor.encode(&env_bytes, &mut framed).unwrap(); let out = run_app_with_frame(app, framed.to_vec()).await.unwrap(); let mut buf = BytesMut::from(&out[..]); - let frame = LengthPrefixedProcessor.decode(&mut buf).unwrap().unwrap(); + let frame = processor.decode(&mut buf).unwrap().unwrap(); let (resp_env, _) = BincodeSerializer .deserialize::(&frame) .unwrap(); diff --git a/tests/util.rs b/tests/util.rs index 66d7e0b4..48b68234 100644 --- a/tests/util.rs +++ b/tests/util.rs @@ -1,5 +1,6 @@ +use rstest::fixture; use tokio::io::{self, AsyncReadExt, AsyncWriteExt, duplex}; -use wireframe::app::WireframeApp; +use wireframe::{app::WireframeApp, frame::LengthPrefixedProcessor}; /// Feed a single frame into `app` and collect the response bytes. /// @@ -13,6 +14,13 @@ use wireframe::app::WireframeApp; /// Optional duplex buffer capacity for `run_app_with_frame`. const DEFAULT_CAPACITY: usize = 4096; +/// Create a default length-prefixed frame processor for tests. +#[fixture] +#[rustfmt::skip] +pub fn processor() -> LengthPrefixedProcessor { + LengthPrefixedProcessor::default() +} + /// Run `app` with a single input `frame` using the default buffer capacity. /// /// # Errors From ae90a98a709075d1d68833d604e654087eddb418 Mon Sep 17 00:00:00 2001 From: Leynos Date: Fri, 20 Jun 2025 23:46:22 +0100 Subject: [PATCH 2/2] Fix routes test imports (#99) --- tests/routes.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/routes.rs b/tests/routes.rs index 598dbf61..0b4d8098 100644 --- a/tests/routes.rs +++ b/tests/routes.rs @@ -27,13 +27,13 @@ struct Echo(u8); #[rstest] #[tokio::test] -async fn handler_receives_message_and_echoes_response(processor: LengthPrefixedProcessor) { +async fn handler_receives_message_and_echoes_response() { let called = Arc::new(AtomicUsize::new(0)); let called_clone = called.clone(); let processor = default_processor(); let app = WireframeApp::new() .unwrap() - .frame_processor(processor.clone()) + .frame_processor(processor) .route( 1, Box::new(move |_| {