From 57af933212aee5d21957158abf62e5255a7996a5 Mon Sep 17 00:00:00 2001 From: Christian Eltzschig Date: Wed, 4 Dec 2024 13:06:48 +0100 Subject: [PATCH] [#532] Add C++ tests --- .../src/service_publish_subscribe_tests.cpp | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/iceoryx2-ffi/cxx/tests/src/service_publish_subscribe_tests.cpp b/iceoryx2-ffi/cxx/tests/src/service_publish_subscribe_tests.cpp index dc008c171..7ea2097dd 100644 --- a/iceoryx2-ffi/cxx/tests/src/service_publish_subscribe_tests.cpp +++ b/iceoryx2-ffi/cxx/tests/src/service_publish_subscribe_tests.cpp @@ -758,4 +758,63 @@ TYPED_TEST(ServicePublishSubscribeTest, service_can_be_opened_when_there_is_a_su } } +TYPED_TEST(ServicePublishSubscribeTest, publisher_reallocates_memory_when_allocation_strategy_is_set) { + constexpr ServiceType SERVICE_TYPE = TestFixture::TYPE; + using ValueType = uint8_t; + constexpr uint64_t INITIAL_SIZE = 128; + + const auto service_name = iox2_testing::generate_service_name(); + auto node = NodeBuilder().create().expect(""); + auto service = + node.service_builder(service_name).template publish_subscribe>().create().expect(""); + + auto publisher = service.publisher_builder() + .initial_max_slice_len(INITIAL_SIZE) + .allocation_strategy(AllocationStrategy::BestFit) + .create() + .expect(""); + + { + auto sample = publisher.loan_slice(INITIAL_SIZE); + ASSERT_THAT(sample.has_value(), Eq(true)); + } + + { + auto sample = publisher.loan_slice(INITIAL_SIZE * INITIAL_SIZE); + ASSERT_THAT(sample.has_value(), Eq(true)); + } + + { + auto sample = publisher.loan_slice(INITIAL_SIZE * INITIAL_SIZE * INITIAL_SIZE); + ASSERT_THAT(sample.has_value(), Eq(true)); + } +} + +TYPED_TEST(ServicePublishSubscribeTest, publisher_does_not_reallocate_when_allocation_strategy_is_static) { + constexpr ServiceType SERVICE_TYPE = TestFixture::TYPE; + using ValueType = uint8_t; + constexpr uint64_t INITIAL_SIZE = 128; + + const auto service_name = iox2_testing::generate_service_name(); + auto node = NodeBuilder().create().expect(""); + auto service = + node.service_builder(service_name).template publish_subscribe>().create().expect(""); + + auto publisher = service.publisher_builder() + .initial_max_slice_len(INITIAL_SIZE) + .allocation_strategy(AllocationStrategy::Static) + .create() + .expect(""); + + auto sample_1 = publisher.loan_slice(INITIAL_SIZE); + ASSERT_THAT(sample_1.has_value(), Eq(true)); + + auto sample_2 = publisher.loan_slice(INITIAL_SIZE * INITIAL_SIZE); + ASSERT_THAT(sample_2.has_value(), Eq(false)); + ASSERT_THAT(sample_2.error(), Eq(PublisherLoanError::ExceedsMaxLoanSize)); + + auto sample_3 = publisher.loan_slice(INITIAL_SIZE * INITIAL_SIZE * INITIAL_SIZE); + ASSERT_THAT(sample_3.has_value(), Eq(false)); + ASSERT_THAT(sample_3.error(), Eq(PublisherLoanError::ExceedsMaxLoanSize)); +} } // namespace