2121
2222#include " bucket_logger.h"
2323#include " bucket_logger_test.h"
24+ #include " fakes/fake_executorpool.h"
2425#include " item.h"
2526#include " memory_tracker.h"
2627#include " objectregistry.h"
3435class ObjectRegistryTest : virtual public ::testing::Test {
3536protected:
3637 void SetUp () override {
37- ObjectRegistry::onSwitchThread (&engine);
38+ SingleThreadedExecutorPool::replaceExecutorPoolWithFake ();
39+ engine = SynchronousEPEngine::build ({});
3840 }
41+
3942 void TearDown () override {
40- ObjectRegistry::onSwitchThread (nullptr );
43+ destroy_mock_event_callbacks ();
44+ engine.reset ();
45+ ExecutorPool::shutdown ();
4146 }
4247
43- SynchronousEPEngine engine;
48+ SynchronousEPEngineUniquePtr engine;
4449};
4550
4651// Check that constructing & destructing an Item is correctly tracked in
4752// EpStats::numItem via ObjectRegistry::on{Create,Delete}Item.
4853TEST_F (ObjectRegistryTest, NumItem) {
49- ASSERT_EQ (0 , engine. getEpStats ().getNumItem ());
54+ ASSERT_EQ (0 , engine-> getEpStats ().getNumItem ());
5055
5156 {
5257 auto item = make_item (Vbid (0 ), makeStoredDocKey (" key" ), " value" );
53- EXPECT_EQ (1 , engine. getEpStats ().getNumItem ());
58+ EXPECT_EQ (1 , engine-> getEpStats ().getNumItem ());
5459 }
55- EXPECT_EQ (0 , engine. getEpStats ().getNumItem ());
60+ EXPECT_EQ (0 , engine-> getEpStats ().getNumItem ());
5661}
5762
5863// Check that constructing & destructing an Item is correctly tracked in
5964// EpStats::memOverhead via ObjectRegistry::on{Create,Delete}Item.
6065TEST_F (ObjectRegistryTest, MemOverhead) {
61- ASSERT_EQ ( 0 , engine. getEpStats ().getMemOverhead () );
66+ auto baseline = engine-> getEpStats ().getMemOverhead ();
6267
6368 {
6469 auto item = make_item (Vbid (0 ), makeStoredDocKey (" key" ), " value" );
6570 // Currently just checking the overhead is non-zero; could expand
6671 // to calculate expected size based on the Item's size.
67- EXPECT_NE (0 , engine. getEpStats ().getMemOverhead ());
72+ EXPECT_NE (baseline , engine-> getEpStats ().getMemOverhead ());
6873 }
69- EXPECT_EQ (0 , engine. getEpStats ().getMemOverhead ());
74+ EXPECT_EQ (baseline , engine-> getEpStats ().getMemOverhead ());
7075}
7176
7277/* *
@@ -100,15 +105,16 @@ class ObjectRegistrySpdlogTest : public BucketLoggerTest,
100105
101106 // Enable memory tracking hooks
102107 MemoryTracker::getInstance (*get_mock_server_api ()->alloc_hooks );
103- engine. getEpStats ().memoryTrackerEnabled .store (true );
108+ engine-> getEpStats ().memoryTrackerEnabled .store (true );
104109 }
105110
106111 void TearDown () override {
107112 MemoryTracker::destroyInstance ();
108113
109114 // Parent classes TearDown methods are sufficient here.
110- ObjectRegistryTest::TearDown ();
111115 BucketLoggerTest::TearDown ();
116+ // called last so that the engine is destroyed last
117+ ObjectRegistryTest::TearDown ();
112118 }
113119};
114120
@@ -119,13 +125,13 @@ TEST_F(ObjectRegistrySpdlogTest, SpdlogMemoryTrackedCorrectly) {
119125 ::testing::UnitTest::GetInstance ()->current_test_info()->name();
120126
121127 // const char* - uses the single argument overload of warn().
122- auto baselineMemory = engine. getEpStats ().getPreciseTotalMemoryUsed ();
128+ auto baselineMemory = engine-> getEpStats ().getPreciseTotalMemoryUsed ();
123129 {
124130 auto logger = BucketLogger::createBucketLogger (testName);
125131 logger->log (spdlog::level::warn, " const char* message" );
126132 logger->flush ();
127133 }
128- EXPECT_EQ (baselineMemory, engine. getEpStats ().getPreciseTotalMemoryUsed ());
134+ EXPECT_EQ (baselineMemory, engine-> getEpStats ().getPreciseTotalMemoryUsed ());
129135
130136 // multiple arguments using format string, with a short (< sizeof(sync_msg)
131137 // log string.
@@ -146,25 +152,25 @@ TEST_F(ObjectRegistrySpdlogTest, SpdlogMemoryTrackedCorrectly) {
146152 std::string (asyncMsgCapacity, ' s' ));
147153 logger->flush ();
148154 }
149- EXPECT_EQ (baselineMemory, engine. getEpStats ().getPreciseTotalMemoryUsed ());
155+ EXPECT_EQ (baselineMemory, engine-> getEpStats ().getPreciseTotalMemoryUsed ());
150156
151157 // As previous, but looping with multiple warn() calls - check that we
152158 // correctly account even when multiple messages are created & destroyed.
153159 {
154160 auto logger = BucketLogger::createBucketLogger (testName);
155161 auto afterLoggerMemory =
156- engine. getEpStats ().getPreciseTotalMemoryUsed ();
162+ engine-> getEpStats ().getPreciseTotalMemoryUsed ();
157163
158164 for (int i = 0 ; i < 100 ; i++) {
159165 logger->warn (" short+variable loop ({}) {} " ,
160166 i,
161167 std::string (asyncMsgCapacity, ' s' ));
162168 logger->flush ();
163169 EXPECT_EQ (afterLoggerMemory,
164- engine. getEpStats ().getPreciseTotalMemoryUsed ());
170+ engine-> getEpStats ().getPreciseTotalMemoryUsed ());
165171 }
166172 }
167- EXPECT_EQ (baselineMemory, engine. getEpStats ().getPreciseTotalMemoryUsed ());
173+ EXPECT_EQ (baselineMemory, engine-> getEpStats ().getPreciseTotalMemoryUsed ());
168174
169175 // Multiple arguments with a very long string (greater than
170176 // asyncMsgCapacity)
@@ -178,23 +184,23 @@ TEST_F(ObjectRegistrySpdlogTest, SpdlogMemoryTrackedCorrectly) {
178184 std::string (asyncMsgCapacity * 2 , ' x' ));
179185 logger->flush ();
180186 }
181- EXPECT_EQ (baselineMemory, engine. getEpStats ().getPreciseTotalMemoryUsed ());
187+ EXPECT_EQ (baselineMemory, engine-> getEpStats ().getPreciseTotalMemoryUsed ());
182188
183189 // Multiple log messages; each with a log string - check that we correctly
184190 // account even when multiple messages are created & destroyed.
185191 {
186192 auto logger = BucketLogger::createBucketLogger (testName);
187193 auto afterLoggerMemory =
188- engine. getEpStats ().getPreciseTotalMemoryUsed ();
194+ engine-> getEpStats ().getPreciseTotalMemoryUsed ();
189195
190196 for (int i = 0 ; i < 100 ; i++) {
191197 logger->warn (" long+variable loop ({}) {}" ,
192198 i,
193199 std::string (asyncMsgCapacity * 2 , ' x' ));
194200 logger->flush ();
195201 EXPECT_EQ (afterLoggerMemory,
196- engine. getEpStats ().getPreciseTotalMemoryUsed ());
202+ engine-> getEpStats ().getPreciseTotalMemoryUsed ());
197203 }
198204 }
199- EXPECT_EQ (baselineMemory, engine. getEpStats ().getPreciseTotalMemoryUsed ());
205+ EXPECT_EQ (baselineMemory, engine-> getEpStats ().getPreciseTotalMemoryUsed ());
200206}
0 commit comments