Skip to content

Commit a07fbcf

Browse files
author
jparisu
committed
Refs #15841: Fix error in test mocking entities
Signed-off-by: jparisu <[email protected]>
1 parent c935d47 commit a07fbcf

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

src/cpp/StatisticsBackend.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,6 @@ EntityId create_and_register_monitor(
193193
monitor->domain_callback_mask = callback_mask;
194194
monitor->data_mask = data_mask;
195195

196-
monitor->participant_listener = new subscriber::StatisticsParticipantListener(
197-
domain->id,
198-
details::StatisticsBackendData::get_instance()->database_.get(),
199-
details::StatisticsBackendData::get_instance()->entity_queue_,
200-
details::StatisticsBackendData::get_instance()->data_queue_);
201196
monitor->reader_listener = new subscriber::StatisticsReaderListener(
202197
details::StatisticsBackendData::get_instance()->data_queue_);
203198

@@ -269,6 +264,12 @@ EntityId create_and_register_monitor(
269264
monitor->id = domain->id;
270265
details::StatisticsBackendData::get_instance()->monitors_by_entity_[domain->id] = monitor;
271266

267+
monitor->participant_listener = new subscriber::StatisticsParticipantListener(
268+
domain->id,
269+
details::StatisticsBackendData::get_instance()->database_.get(),
270+
details::StatisticsBackendData::get_instance()->entity_queue_,
271+
details::StatisticsBackendData::get_instance()->data_queue_);
272+
272273
details::StatisticsBackendData::get_instance()->unlock();
273274
return domain->id;
274275
}

test/unittest/StatisticsBackend/InitMonitorFactoryFailsTests.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,22 +343,34 @@ TEST_F(init_monitor_factory_fails_tests, init_monitor_topic_exists)
343343
EXPECT_CALL(domain_participant_, create_topic(_, _, _, _)).Times(0);
344344
EXPECT_CALL(domain_participant_, create_topic(_, _, _)).Times(0);
345345

346-
EXPECT_NO_THROW(StatisticsBackend::init_monitor(
346+
EntityId monitor1;
347+
EXPECT_NO_THROW(monitor1 = StatisticsBackend::init_monitor(
347348
domain_id,
348349
&domain_listener,
349350
all_callback_mask_,
350351
all_datakind_mask_));
351-
EXPECT_NO_THROW(StatisticsBackend::init_monitor(
352+
353+
EntityId monitor2;
354+
EXPECT_NO_THROW(monitor2 = StatisticsBackend::init_monitor(
352355
server_locators,
353356
&domain_listener,
354357
all_callback_mask_,
355358
all_datakind_mask_));
356-
EXPECT_NO_THROW(StatisticsBackend::init_monitor(
359+
360+
EntityId monitor3;
361+
EXPECT_NO_THROW(monitor3 = StatisticsBackend::init_monitor(
357362
server_guid_prefix,
358363
server_locators,
359364
&domain_listener,
360365
all_callback_mask_,
361366
all_datakind_mask_));
367+
368+
// IMPORTANT: It is required to stop monitors.
369+
// Otherwise, they will be stopped in Singleton destruction, what implies that are destructed after test
370+
// destruction, and thus the mock instances does not longer exist, so SEGFAULT served.
371+
StatisticsBackend::stop_monitor(monitor1);
372+
StatisticsBackend::stop_monitor(monitor2);
373+
StatisticsBackend::stop_monitor(monitor3);
362374
}
363375

364376
TEST_F(init_monitor_factory_fails_tests, init_monitor_topic_exists_with_another_type)

0 commit comments

Comments
 (0)