From 2fecb332460027e7a9615ff1fbe4752af0500a0c Mon Sep 17 00:00:00 2001 From: Mathias Kraus Date: Thu, 30 Jun 2022 22:18:30 +0200 Subject: [PATCH] iox-#5 Add tests for loaning uninitialized sample --- src/tests/basic_pub_sub.rs | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/tests/basic_pub_sub.rs b/src/tests/basic_pub_sub.rs index ce08432..ef88473 100644 --- a/src/tests/basic_pub_sub.rs +++ b/src/tests/basic_pub_sub.rs @@ -69,7 +69,7 @@ fn multi_threaded_subscriber() -> Result<()> { let mut sample = publisher.loan()?; - const SEND_COUNTER: u32 = 42; + const SEND_COUNTER: u32 = 13; sample.counter = SEND_COUNTER; publisher.publish(sample); @@ -120,3 +120,39 @@ fn publisher_loaning_but_not_publishing_sample() -> Result<()> { Ok(()) } + +#[test] +fn loaning_uninitialized_sample() -> Result<()> { + let _roudi = RouDiEnvironment::new(); + + Runtime::init("basic_pub_sub"); + + let (subscriber, sample_receive_token) = + SubscriberBuilder::::new("Test", "BasicPubSub", "Counter") + .queue_capacity(5) + .create()?; + + let publisher = PublisherBuilder::::new("Test", "BasicPubSub", "Counter").create()?; + + const SEND_COUNTER: u32 = 73; + let mut sample = publisher.loan_uninitialized()?; + let sample = unsafe { + (*sample.as_mut_ptr()).counter = SEND_COUNTER; + sample.assume_init() + }; + publisher.publish(sample); + + let sample_receiver = subscriber.get_sample_receiver(sample_receive_token); + + assert!(sample_receiver.has_data()); + + match sample_receiver.take() { + Some(sample) => assert_eq!(sample.counter, SEND_COUNTER), + _ => return Err(anyhow!("Could not read sample")), + } + + publisher.stop_offer(); + subscriber.unsubscribe(sample_receiver); + + Ok(()) +}