161 auto& rbac = rbac_manager::instance();
162 auto& logger = context_->get_audit_logger();
165 std::string user_id =
"integration.user";
168 bool can_read = rbac.check_permission(user_id,
"user.read");
169 bool can_create = rbac.check_permission(user_id,
"user.create");
171 EXPECT_TRUE(can_read);
172 EXPECT_FALSE(can_create);
176 entity.username =
"test_user";
177 entity.email =
"test@example.com";
178 entity.role =
"user";
182 event.event_type = audit_event_type::data_access;
183 event.user_id = user_id;
184 event.event_description =
"Entity creation attempt";
185 event.success = can_create;
186 event.timestamp = std::chrono::system_clock::now();
187 event.resource_accessed =
"integration_users";
189 logger.log_event(event);
192 auto events = logger.get_events_by_user(user_id);
193 EXPECT_GT(events.size(), 0);
197 EXPECT_EQ(metadata.table_name(),
"integration_users");
206 auto& executor = async_executor::instance();
209 std::vector<std::future<query_result>> futures;
211 for (
int i = 0; i < 10; ++i) {
212 auto future = executor.execute_async([i, &monitor]() -> query_result {
213 auto start_time = std::chrono::high_resolution_clock::now();
216 std::this_thread::sleep_for(std::chrono::milliseconds(50 + (i * 10)));
218 auto end_time = std::chrono::high_resolution_clock::now();
219 auto execution_time = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
223 metrics.query_type =
"SELECT";
227 metrics.timestamp = start_time;
229 monitor.record_query_execution(metrics);
233 result.execution_time = execution_time;
234 result.rows_affected = i + 1;
239 futures.push_back(std::move(future));
243 for (
auto& future : futures) {
244 auto result = future.get();
245 EXPECT_TRUE(result.success);
246 EXPECT_GT(result.execution_time.count(), 0);
250 const auto& stats = monitor.get_query_statistics();
251 EXPECT_GE(stats.total_queries, 10);
252 EXPECT_GT(stats.average_execution_time.count(), 0);
260 auto& rbac = rbac_manager::instance();
261 auto& logger = context_->get_audit_logger();
264 std::vector<std::tuple<std::string, std::string, std::string>> test_users = {
265 {
"admin.user",
"admin@test.com",
"admin"},
266 {
"normal.user",
"normal@test.com",
"user"},
267 {
"unauthorized.user",
"unauthorized@test.com",
"user"}
270 for (
const auto& [username, email, role] : test_users) {
271 rbac_user user(username, email);
272 rbac.create_user(user);
273 rbac.assign_role_to_user(username, role);
277 std::vector<std::string> operations = {
278 "user.read",
"user.create",
"user.update",
"user.delete"
281 for (
const auto& [username, email, role] : test_users) {
282 for (
const auto& operation : operations) {
283 auto start_time = std::chrono::high_resolution_clock::now();
288 auto end_time = std::chrono::high_resolution_clock::now();
289 auto check_time = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
293 event.event_type = audit_event_type::authorization;
294 event.user_id = username;
295 event.event_description =
"Permission check: " + operation;
297 event.timestamp = start_time;
298 event.resource_accessed = operation;
300 logger.log_event(event);
304 metrics.query_type =
"SECURITY_CHECK";
305 metrics.
execution_time = std::chrono::duration_cast<std::chrono::milliseconds>(check_time);
308 metrics.timestamp = start_time;
310 monitor.record_query_execution(metrics);
315 auto admin_events = logger.get_events_by_user(
"admin.user");
316 auto normal_events = logger.get_events_by_user(
"normal.user");
317 auto unauthorized_events = logger.get_events_by_user(
"unauthorized.user");
319 EXPECT_EQ(admin_events.size(), 4);
320 EXPECT_EQ(normal_events.size(), 4);
321 EXPECT_EQ(unauthorized_events.size(), 4);
324 const auto& stats = monitor.get_query_statistics();
325 EXPECT_GT(stats.total_queries, 12);
333 auto& rbac = rbac_manager::instance();
334 auto& logger = context_->get_audit_logger();
335 auto& executor = async_executor::instance();
336 auto& entity_mgr = context_->get_entity_manager();
339 std::string admin_user =
"system.admin";
340 rbac_user admin(admin_user,
"admin@system.com");
341 rbac.create_user(admin);
342 rbac.assign_role_to_user(admin_user,
"admin");
345 auto workflow_future = executor.execute_async([&]() ->
bool {
346 auto start_time = std::chrono::high_resolution_clock::now();
349 bool can_create = rbac.check_permission(admin_user,
"user.create");
351 audit_event denied_event;
352 denied_event.event_type = audit_event_type::authorization;
353 denied_event.user_id = admin_user;
354 denied_event.event_description =
"Access denied for user creation";
355 denied_event.success =
false;
356 denied_event.timestamp = std::chrono::system_clock::now();
357 logger.log_event(denied_event);
362 std::vector<IntegrationTestUser> users;
363 for (
int i = 0; i < 5; ++i) {
365 user.username =
"workflow_user_" + std::to_string(i);
366 user.email =
"workflow" + std::to_string(i) +
"@test.com";
367 user.role = (i % 2 == 0) ?
"admin" :
"user";
368 users.push_back(std::move(user));
372 for (
const auto& user : users) {
373 audit_event create_event;
374 create_event.event_type = audit_event_type::data_access;
375 create_event.user_id = admin_user;
376 create_event.event_description =
"Created user: " + user.username.get();
377 create_event.success =
true;
378 create_event.timestamp = std::chrono::system_clock::now();
379 create_event.resource_accessed =
"integration_users";
380 logger.log_event(create_event);
383 auto end_time = std::chrono::high_resolution_clock::now();
384 auto workflow_time = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
388 metrics.query_type =
"WORKFLOW";
392 metrics.timestamp = start_time;
393 monitor.record_query_execution(metrics);
399 bool workflow_success = workflow_future.get();
400 EXPECT_TRUE(workflow_success);
403 auto admin_events = logger.get_events_by_user(admin_user);
404 EXPECT_GT(admin_events.size(), 5);
406 const auto& perf_stats = monitor.get_query_statistics();
407 EXPECT_GT(perf_stats.total_queries, 0);
411 EXPECT_EQ(user_metadata.table_name(),
"integration_users");
419 auto& rbac = rbac_manager::instance();
420 auto& logger = context_->get_audit_logger();
421 auto& executor = async_executor::instance();
424 rbac_user limited_user(
"limited.user",
"limited@test.com");
425 rbac.create_user(limited_user);
426 rbac.assign_role_to_user(
"limited.user",
"user");
429 auto error_test_future = executor.execute_async([&]() ->
bool {
430 std::string user_id =
"limited.user";
433 bool can_delete = rbac.check_permission(user_id,
"user.delete");
436 audit_event auth_event;
437 auth_event.event_type = audit_event_type::authorization;
438 auth_event.user_id = user_id;
439 auth_event.event_description =
"Attempted unauthorized delete operation";
440 auth_event.success = can_delete;
441 auth_event.timestamp = std::chrono::system_clock::now();
442 logger.log_event(auth_event);
445 auto start_time = std::chrono::high_resolution_clock::now();
448 std::this_thread::sleep_for(std::chrono::milliseconds(10));
450 auto end_time = std::chrono::high_resolution_clock::now();
451 auto failed_time = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
455 failed_metrics.query_type =
"DELETE";
457 failed_metrics.
success =
false;
459 failed_metrics.timestamp = start_time;
460 monitor.record_query_execution(failed_metrics);
465 bool error_handling_success = error_test_future.get();
466 EXPECT_TRUE(error_handling_success);
469 auto failed_events = logger.get_failed_events();
470 EXPECT_GT(failed_events.size(), 0);
472 const auto& stats = monitor.get_query_statistics();
473 EXPECT_GT(stats.failed_queries, 0);
474 EXPECT_LT(stats.successful_queries /
static_cast<double>(stats.total_queries), 1.0);
482 auto& rbac = rbac_manager::instance();
483 auto& logger = context_->get_audit_logger();
484 auto& executor = async_executor::instance();
487 std::vector<std::string> user_ids;
488 for (
int i = 0; i < 10; ++i) {
489 std::string user_id =
"concurrent_user_" + std::to_string(i);
490 rbac_user user(user_id, user_id +
"@test.com");
491 rbac.create_user(user);
492 rbac.assign_role_to_user(user_id, (i % 2 == 0) ?
"admin" :
"user");
493 user_ids.push_back(user_id);
497 std::vector<std::future<bool>> operation_futures;
499 for (
const auto& user_id : user_ids) {
500 auto future = executor.execute_async([&, user_id]() ->
bool {
502 std::vector<std::string> operations = {
"user.read",
"user.create",
"user.update"};
503 bool all_successful =
true;
505 for (
const auto& operation : operations) {
506 auto start_time = std::chrono::high_resolution_clock::now();
510 auto end_time = std::chrono::high_resolution_clock::now();
511 auto op_time = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
515 event.event_type = audit_event_type::authorization;
516 event.user_id = user_id;
517 event.event_description =
"Concurrent operation: " + operation;
519 event.timestamp = start_time;
520 logger.log_event(event);
524 metrics.query_type =
"CONCURRENT_" + operation;
528 metrics.timestamp = start_time;
529 monitor.record_query_execution(metrics);
532 all_successful =
false;
536 return all_successful;
539 operation_futures.push_back(std::move(future));
543 int successful_operations = 0;
544 for (
auto& future : operation_futures) {
546 successful_operations++;
551 EXPECT_GT(successful_operations, 0);
554 const auto& stats = monitor.get_query_statistics();
555 EXPECT_GE(stats.total_queries, user_ids.size() * 3);
558 size_t total_events = 0;
559 for (
const auto& user_id : user_ids) {
560 auto events = logger.get_events_by_user(user_id);
561 total_events += events.size();
563 EXPECT_GE(total_events, user_ids.size() * 3);
Dependency injection container for database system components.