Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
test_database_coordinator.cpp File Reference

Unit tests for database_coordinator (Phase 5) More...

Include dependency graph for test_database_coordinator.cpp:

Go to the source code of this file.

Macros

#define TEST(name)
 
#define RUN_TEST(name)
 
#define ASSERT_TRUE(condition)
 
#define ASSERT_FALSE(condition)
 

Functions

void test_basic_initialization_and_shutdown ()
 
void test_adapter_access ()
 
void test_logger_functionality ()
 
void test_monitoring_functionality ()
 
void test_thread_pool_functionality ()
 
void test_health_check ()
 
void test_statistics ()
 
void test_double_initialization ()
 
void test_shutdown_without_initialization ()
 
void test_automatic_shutdown_in_destructor ()
 
void test_full_integration ()
 
int main ()
 

Variables

int tests_passed = 0
 
int tests_failed = 0
 

Detailed Description

Unit tests for database_coordinator (Phase 5)

Tests the coordinator's ability to:

  • Initialize and shutdown adapters in correct order
  • Provide access to initialized adapters
  • Handle initialization failures gracefully
  • Perform aggregate health checks
  • Report statistics

Definition in file test_database_coordinator.cpp.

Macro Definition Documentation

◆ ASSERT_FALSE

#define ASSERT_FALSE ( condition)

◆ ASSERT_TRUE

#define ASSERT_TRUE ( condition)
Value:
if (!(condition)) { \
throw std::runtime_error("Assertion failed: " #condition); \
}

Definition at line 46 of file test_database_coordinator.cpp.

46#define ASSERT_TRUE(condition) \
47 if (!(condition)) { \
48 throw std::runtime_error("Assertion failed: " #condition); \
49 }

Referenced by test_adapter_access(), test_automatic_shutdown_in_destructor(), test_basic_initialization_and_shutdown(), test_double_initialization(), test_full_integration(), test_health_check(), test_logger_functionality(), test_monitoring_functionality(), test_shutdown_without_initialization(), test_statistics(), and test_thread_pool_functionality().

◆ RUN_TEST

#define RUN_TEST ( name)
Value:
do { \
std::cout << "Running test: " << #name << " ... "; \
try { \
test_##name(); \
std::cout << "PASSED\n"; \
} catch (const std::exception &e) { \
std::cout << "FAILED: " << e.what() << "\n"; \
} \
} while (0)

Definition at line 33 of file test_database_coordinator.cpp.

33#define RUN_TEST(name) \
34 do { \
35 std::cout << "Running test: " << #name << " ... "; \
36 try { \
37 test_##name(); \
38 std::cout << "PASSED\n"; \
39 tests_passed++; \
40 } catch (const std::exception &e) { \
41 std::cout << "FAILED: " << e.what() << "\n"; \
42 tests_failed++; \
43 } \
44 } while (0)

Referenced by main().

◆ TEST

#define TEST ( name)
Value:
void test_##name()

Definition at line 32 of file test_database_coordinator.cpp.

Function Documentation

◆ main()

int main ( )

Definition at line 330 of file test_database_coordinator.cpp.

330 {
331 std::cout << "=== Database Coordinator Tests (Phase 5) ===\n\n";
332
333 RUN_TEST(basic_initialization_and_shutdown);
334 RUN_TEST(adapter_access);
335 RUN_TEST(logger_functionality);
336 RUN_TEST(monitoring_functionality);
337 RUN_TEST(thread_pool_functionality);
339 RUN_TEST(statistics);
340 RUN_TEST(double_initialization);
341 RUN_TEST(shutdown_without_initialization);
342 RUN_TEST(automatic_shutdown_in_destructor);
343 RUN_TEST(full_integration);
344
345 std::cout << "\n=== Test Summary ===\n";
346 std::cout << "Passed: " << tests_passed << "\n";
347 std::cout << "Failed: " << tests_failed << "\n";
348
349 if (tests_failed == 0) {
350 std::cout << "=== All tests passed! ✓ ===\n";
351 return 0;
352 } else {
353 std::cout << "=== Some tests failed! ✗ ===\n";
354 return 1;
355 }
356}
#define RUN_TEST(name)

References RUN_TEST, tests_failed, and tests_passed.

◆ test_adapter_access()

void test_adapter_access ( )

Definition at line 79 of file test_database_coordinator.cpp.

79 {
80 unified_db_config config;
81 // config.logger.enable_console_logging does not exist
82 config.monitoring.enable_metrics = true;
83 config.thread.thread_count = 2;
84
85 database_coordinator coordinator(config);
86
87 // Before initialization, adapters should be nullptr
88 ASSERT_TRUE(coordinator.get_logger() == nullptr);
89 ASSERT_TRUE(coordinator.get_monitor() == nullptr);
90 ASSERT_TRUE(coordinator.get_thread_pool() == nullptr);
91
92 // Initialize
93 auto init_result = coordinator.initialize();
94 ASSERT_TRUE(init_result.is_ok());
95
96 // After initialization, adapters should be accessible
97 ASSERT_TRUE(coordinator.get_logger() != nullptr);
98 ASSERT_TRUE(coordinator.get_monitor() != nullptr);
99 ASSERT_TRUE(coordinator.get_thread_pool() != nullptr);
100
101 // Shutdown
102 coordinator.shutdown();
103}
Manages lifecycle and coordination of all database system adapters.
bool enable_metrics
Enable metrics collection.
std::size_t thread_count
Number of worker threads (0 = auto-detect from hardware)
db_monitoring_config monitoring
Monitoring configuration.
db_thread_config thread
Thread pool configuration.

References ASSERT_TRUE, database::integrated::db_monitoring_config::enable_metrics, database::integrated::database_coordinator::get_logger(), database::integrated::database_coordinator::get_monitor(), database::integrated::database_coordinator::get_thread_pool(), database::integrated::database_coordinator::initialize(), database::integrated::unified_db_config::monitoring, database::integrated::database_coordinator::shutdown(), database::integrated::unified_db_config::thread, and database::integrated::db_thread_config::thread_count.

Here is the call graph for this function:

◆ test_automatic_shutdown_in_destructor()

void test_automatic_shutdown_in_destructor ( )

Definition at line 260 of file test_database_coordinator.cpp.

260 {
261 unified_db_config config;
262 // config.logger.enable_console_logging does not exist
263
264 {
265 database_coordinator coordinator(config);
266 coordinator.initialize();
267 // Destructor will call shutdown automatically
268 }
269
270 // If we get here without crash, test passed
271 ASSERT_TRUE(true);
272}

References ASSERT_TRUE, and database::integrated::database_coordinator::initialize().

Here is the call graph for this function:

◆ test_basic_initialization_and_shutdown()

void test_basic_initialization_and_shutdown ( )

Definition at line 54 of file test_database_coordinator.cpp.

54 {
55 unified_db_config config;
56 config.logger.min_log_level = db_log_level::info;
57 // enable_console_logging does not exist
58 config.logger.enable_file_logging = false;
59 config.monitoring.enable_metrics = true;
60 config.thread.thread_count = 2;
61
62 database_coordinator coordinator(config);
63
64 // Should not be initialized yet
65 ASSERT_FALSE(coordinator.is_initialized());
66
67 // Initialize
68 auto init_result = coordinator.initialize();
69 ASSERT_TRUE(init_result.is_ok());
70 ASSERT_TRUE(coordinator.is_initialized());
71
72 // Shutdown
73 auto shutdown_result = coordinator.shutdown();
74 ASSERT_TRUE(shutdown_result.is_ok());
75 ASSERT_FALSE(coordinator.is_initialized());
76}
bool enable_file_logging
Enable logging to file (in addition to console)
db_log_level min_log_level
Minimum log level to output.
db_logger_config logger
Logger configuration.
#define ASSERT_FALSE(condition)

References ASSERT_FALSE, ASSERT_TRUE, database::integrated::db_logger_config::enable_file_logging, database::integrated::db_monitoring_config::enable_metrics, database::integrated::database_coordinator::initialize(), database::integrated::database_coordinator::is_initialized(), database::integrated::unified_db_config::logger, database::integrated::db_logger_config::min_log_level, database::integrated::unified_db_config::monitoring, database::integrated::database_coordinator::shutdown(), database::integrated::unified_db_config::thread, and database::integrated::db_thread_config::thread_count.

Here is the call graph for this function:

◆ test_double_initialization()

void test_double_initialization ( )

Definition at line 232 of file test_database_coordinator.cpp.

232 {
233 unified_db_config config;
234 // config.logger.enable_console_logging does not exist
235
236 database_coordinator coordinator(config);
237
238 // First initialization should succeed
239 auto init1 = coordinator.initialize();
240 ASSERT_TRUE(init1.is_ok());
241
242 // Second initialization should fail
243 auto init2 = coordinator.initialize();
244 ASSERT_FALSE(init2.is_ok());
245
246 coordinator.shutdown();
247}

References ASSERT_FALSE, ASSERT_TRUE, database::integrated::database_coordinator::initialize(), and database::integrated::database_coordinator::shutdown().

Here is the call graph for this function:

◆ test_full_integration()

void test_full_integration ( )

Definition at line 275 of file test_database_coordinator.cpp.

275 {
276 unified_db_config config;
277 config.logger.min_log_level = db_log_level::info;
278 // config.logger.enable_console_logging does not exist
279 config.monitoring.enable_metrics = true;
280 config.monitoring.enable_profiling = true;
281 config.thread.thread_count = 4;
282
283 database_coordinator coordinator(config);
284 coordinator.initialize();
285
286 // Get all adapters
287 auto *logger = coordinator.get_logger();
288 auto *monitor = coordinator.get_monitor();
289 auto *thread_pool = coordinator.get_thread_pool();
290
291 ASSERT_TRUE(logger != nullptr);
292 ASSERT_TRUE(monitor != nullptr);
293 ASSERT_TRUE(thread_pool != nullptr);
294
295 // Simulate database operations
296 logger->log(db_log_level::info, "Starting database operations");
297
298 // Submit async query simulation
299 auto query_future = thread_pool->submit([&]() {
300 // Yield to allow simulated query execution
301 std::this_thread::yield();
302
303 // Record metrics
304 monitor->record_query_execution(std::chrono::microseconds(100), true);
305
306 logger->log(db_log_level::debug, "Query executed successfully");
307
308 return true;
309 });
310
311 ASSERT_TRUE(query_future.get() == true);
312
313 // Check health
314 auto health = coordinator.check_health();
315 ASSERT_TRUE(health.is_ok());
316 ASSERT_TRUE(health.value());
317
318 // Get metrics
319 auto metrics = monitor->get_database_metrics();
320 ASSERT_TRUE(metrics.is_ok());
321 ASSERT_TRUE(metrics.value().total_queries == 1);
322 ASSERT_TRUE(metrics.value().successful_queries == 1);
323
324 logger->log(db_log_level::info, "All operations completed");
325
326 coordinator.shutdown();
327}
bool enable_profiling
Enable performance profiling.

References ASSERT_TRUE, database::integrated::database_coordinator::check_health(), database::integrated::db_monitoring_config::enable_metrics, database::integrated::db_monitoring_config::enable_profiling, database::integrated::database_coordinator::get_logger(), database::integrated::database_coordinator::get_monitor(), database::integrated::database_coordinator::get_thread_pool(), database::integrated::database_coordinator::initialize(), database::integrated::unified_db_config::logger, database::integrated::db_logger_config::min_log_level, database::integrated::unified_db_config::monitoring, database::integrated::database_coordinator::shutdown(), database::integrated::unified_db_config::thread, and database::integrated::db_thread_config::thread_count.

Here is the call graph for this function:

◆ test_health_check()

void test_health_check ( )

Definition at line 178 of file test_database_coordinator.cpp.

178 {
179 unified_db_config config;
180 // config.logger.enable_console_logging does not exist
181 config.monitoring.enable_health_checks = true;
182 config.thread.thread_count = 2;
183
184 database_coordinator coordinator(config);
185
186 // Health check before initialization should fail
187 auto health_before = coordinator.check_health();
188 ASSERT_FALSE(health_before.is_ok());
189
190 // Initialize
191 coordinator.initialize();
192
193 // Health check after initialization should succeed
194 auto health_after = coordinator.check_health();
195 ASSERT_TRUE(health_after.is_ok());
196 ASSERT_TRUE(health_after.value()); // Should be healthy
197
198 coordinator.shutdown();
199}
bool enable_health_checks
Enable health check endpoints.

References ASSERT_FALSE, ASSERT_TRUE, database::integrated::database_coordinator::check_health(), database::integrated::db_monitoring_config::enable_health_checks, database::integrated::database_coordinator::initialize(), database::integrated::unified_db_config::monitoring, database::integrated::database_coordinator::shutdown(), database::integrated::unified_db_config::thread, and database::integrated::db_thread_config::thread_count.

Here is the call graph for this function:

◆ test_logger_functionality()

void test_logger_functionality ( )

Definition at line 106 of file test_database_coordinator.cpp.

106 {
107 unified_db_config config;
108 config.logger.min_log_level = db_log_level::debug;
109 // config.logger.enable_console_logging does not exist
110
111 database_coordinator coordinator(config);
112 coordinator.initialize();
113
114 auto *logger = coordinator.get_logger();
115 ASSERT_TRUE(logger != nullptr);
116
117 // Log various levels
118 logger->log(db_log_level::debug, "Debug message from coordinator test");
119 logger->log(db_log_level::info, "Info message from coordinator test");
120 logger->log(db_log_level::warning, "Warning message from coordinator test");
121
122 coordinator.shutdown();
123}

References ASSERT_TRUE, database::integrated::database_coordinator::get_logger(), database::integrated::database_coordinator::initialize(), database::integrated::unified_db_config::logger, database::integrated::db_logger_config::min_log_level, and database::integrated::database_coordinator::shutdown().

Here is the call graph for this function:

◆ test_monitoring_functionality()

void test_monitoring_functionality ( )

Definition at line 126 of file test_database_coordinator.cpp.

126 {
127 unified_db_config config;
128 // config.logger.enable_console_logging does not exist
129 config.monitoring.enable_metrics = true;
130 config.monitoring.enable_profiling = true;
131
132 database_coordinator coordinator(config);
133 coordinator.initialize();
134
135 auto *monitor = coordinator.get_monitor();
136 ASSERT_TRUE(monitor != nullptr);
137
138 // Record some metrics
139 monitor->record_connection_acquired();
140 monitor->record_query_execution(std::chrono::microseconds(100), true);
141 monitor->update_pool_stats(1, 5, 10);
142
143 // Get metrics
144 auto metrics_result = monitor->get_database_metrics();
145 ASSERT_TRUE(metrics_result.is_ok());
146 ASSERT_TRUE(metrics_result.value().active_connections == 1);
147
148 coordinator.shutdown();
149}

References ASSERT_TRUE, database::integrated::db_monitoring_config::enable_metrics, database::integrated::db_monitoring_config::enable_profiling, database::integrated::database_coordinator::get_monitor(), database::integrated::database_coordinator::initialize(), database::integrated::unified_db_config::monitoring, and database::integrated::database_coordinator::shutdown().

Here is the call graph for this function:

◆ test_shutdown_without_initialization()

void test_shutdown_without_initialization ( )

Definition at line 250 of file test_database_coordinator.cpp.

250 {
251 unified_db_config config;
252 database_coordinator coordinator(config);
253
254 // Shutdown without initialize should succeed (no-op)
255 auto result = coordinator.shutdown();
256 ASSERT_TRUE(result.is_ok());
257}

References ASSERT_TRUE, and database::integrated::database_coordinator::shutdown().

Here is the call graph for this function:

◆ test_statistics()

void test_statistics ( )

Definition at line 202 of file test_database_coordinator.cpp.

202 {
203 unified_db_config config;
204 // config.logger.enable_console_logging does not exist
205
206 database_coordinator coordinator(config);
207
208 // Get stats before initialization
209 auto stats_before = coordinator.get_stats();
210 ASSERT_TRUE(stats_before.is_ok());
211 ASSERT_FALSE(stats_before.value().is_initialized);
212 ASSERT_TRUE(stats_before.value().uptime.count() == 0);
213
214 // Initialize
215 coordinator.initialize();
216 // Need actual time to pass for uptime measurement test
217 std::this_thread::sleep_for(std::chrono::milliseconds(10));
218
219 // Get stats after initialization
220 auto stats_after = coordinator.get_stats();
221 ASSERT_TRUE(stats_after.is_ok());
222 ASSERT_TRUE(stats_after.value().is_initialized);
223 ASSERT_TRUE(stats_after.value().logger_healthy);
224 ASSERT_TRUE(stats_after.value().monitoring_healthy);
225 ASSERT_TRUE(stats_after.value().thread_pool_healthy);
226 ASSERT_TRUE(stats_after.value().uptime.count() > 0);
227
228 coordinator.shutdown();
229}

References ASSERT_FALSE, ASSERT_TRUE, database::integrated::database_coordinator::get_stats(), database::integrated::database_coordinator::initialize(), and database::integrated::database_coordinator::shutdown().

Here is the call graph for this function:

◆ test_thread_pool_functionality()

void test_thread_pool_functionality ( )

Definition at line 152 of file test_database_coordinator.cpp.

152 {
153 unified_db_config config;
154 // config.logger.enable_console_logging does not exist
155 config.thread.thread_count = 2;
156
157 database_coordinator coordinator(config);
158 coordinator.initialize();
159
160 auto *thread_pool = coordinator.get_thread_pool();
161 ASSERT_TRUE(thread_pool != nullptr);
162
163 // Submit a simple task
164 std::atomic<bool> task_executed{false};
165 auto future = thread_pool->submit([&task_executed]() {
166 task_executed = true;
167 return 42;
168 });
169
170 auto value = future.get();
171 ASSERT_TRUE(value == 42);
172 ASSERT_TRUE(task_executed);
173
174 coordinator.shutdown();
175}

References ASSERT_TRUE, database::integrated::database_coordinator::get_thread_pool(), database::integrated::database_coordinator::initialize(), database::integrated::database_coordinator::shutdown(), database::integrated::unified_db_config::thread, and database::integrated::db_thread_config::thread_count.

Here is the call graph for this function:

Variable Documentation

◆ tests_failed

int tests_failed = 0

Definition at line 30 of file test_database_coordinator.cpp.

Referenced by main().

◆ tests_passed

int tests_passed = 0

Definition at line 29 of file test_database_coordinator.cpp.

Referenced by main().