From 55fcd2938cec28e34f439dd5c2699ac91436bf1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=A1?= =?UTF-8?q?=D0=B0=D1=84=D1=80=D0=BE=D0=BD=D0=BE=D0=B2?= Date: Wed, 20 May 2026 18:25:24 +0000 Subject: [PATCH] Upload files to "tests" --- tests/integration.lua | 149 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 tests/integration.lua diff --git a/tests/integration.lua b/tests/integration.lua new file mode 100644 index 0000000..8ec635c --- /dev/null +++ b/tests/integration.lua @@ -0,0 +1,149 @@ +-- ============================================================================ +-- test_integration.lua - Интеграционный тест +-- ============================================================================ +-- Назначение: Проверка взаимодействия между компонентами системы +-- Покрывает: API + Storage + Cluster + Transactions + Triggers + Indexes + +local function test_api_storage_integration() + print("[Integration] API + Storage integration...") + + -- Create document via API + local api_insert = http.request("POST", "http://localhost:8080/api/db/integration_test/orders", + {["X-Session-ID"] = "test_session"}, + {order_id = "ORD-001", amount = 1500, status = "pending"} + ) + assert(api_insert.success, "Integration: API insert failed") + + -- Verify direct storage access (simulated) + local storage_verify = http.request("GET", "http://localhost:8080/api/db/integration_test/orders/ORD-001", + {["X-Session-ID"] = "test_session"} + ) + assert(storage_verify.success and storage_verify.data.fields.amount == 1500, + "Integration: API-Storage consistency failed") + + print(" ✓ API -> Storage data flow") + return true +end + +local function test_transaction_index_integration() + print("[Integration] Transactions + Indexes integration...") + + -- Start transaction + local session_resp = http.request("POST", "http://localhost:8080/api/webui/transactions", + {["X-Session-ID"] = "test_session"}, + {action = "start_transaction"} + ) + + -- Create index within transaction + local idx_resp = http.request("POST", "http://localhost:8080/api/index/integration_test/orders/create", + {["X-Session-ID"] = "test_session"}, + {name = "order_amount_idx", fields = {"amount"}, unique = false} + ) + + -- Insert data + local insert_resp = http.request("POST", "http://localhost:8080/api/db/integration_test/orders", + {["X-Session-ID"] = "test_session"}, + {order_id = "ORD-002", amount = 2500, status = "processing"} + ) + + -- Commit + local commit_resp = http.request("POST", "http://localhost:8080/api/webui/transaction/commit", + {["X-Session-ID"] = "test_session"} + ) + + -- Query by index after commit + local query_resp = http.request("GET", "http://localhost:8080/api/db/integration_test/orders?index=order_amount_idx&value=2500", + {["X-Session-ID"] = "test_session"} + ) + print(" ✓ Transaction + Indexes integration") + + return true +end + +local function test_acl_trigger_integration() + print("[Integration] ACL + Triggers integration...") + + -- Create role with specific permissions + local role_resp = http.request("POST", "http://localhost:8080/api/webui/acl/role/analyst", + {["X-Session-ID"] = "admin_session"} + ) + + -- Grant read permission on integration_test + local grant_resp = http.request("POST", "http://localhost:8080/api/webui/acl/role/analyst/grant/integration_test.*:read", + {["X-Session-ID"] = "admin_session"} + ) + + -- Create trigger that logs read operations + local trigger_config = { + name = "read_logger", + event = "AFTER_UPDATE", + action = "log", + description = "Log all read operations" + } + + local trigger_resp = http.request("POST", "http://localhost:8080/api/webui/trigger/integration_test/orders/create", + {["X-Session-ID"] = "test_session"}, + trigger_config + ) + print(" ✓ ACL + Triggers integration") + + return true +end + +local function test_cluster_persistence_integration() + print("[Integration] Cluster + Persistence integration...") + + -- Get cluster status + local cluster_resp = http.request("GET", "http://localhost:8080/api/cluster/status", + {["X-Session-ID"] = "test_session"} + ) + + -- Create data that should be persisted across restarts + local persist_resp = http.request("POST", "http://localhost:8080/api/db/persistence_test/data", + {["X-Session-ID"] = "test_session"}, + {_id = "persist_001", data = "This should survive restart", created = os.time()} + ) + assert(persist_resp.success, "Integration: Persistence test insert failed") + + -- Force checkpoint creation + -- (In real scenario, we'd wait for checkpoint or trigger it manually) + print(" ✓ Cluster + Persistence ready") + print(" ⚠ Manual restart required to verify persistence") + + return true +end + +local function test_wal_recovery_integration() + print("[Integration] WAL + Recovery integration...") + + -- Create multiple updates to generate WAL entries + for i = 1, 10 do + local resp = http.request("PUT", "http://localhost:8080/api/db/wal_test/counter/doc_001", + {["X-Session-ID"] = "test_session"}, + {counter = i, update_time = os.time()} + ) + end + + -- Get transaction list to verify WAL + local tx_list = http.request("GET", "http://localhost:8080/api/webui/transactions", + {["X-Session-ID"] = "test_session"} + ) + + print(" ✓ WAL entries generated") + print(" ✓ WAL + Recovery integrated") + + return true +end + +-- Run integration tests +print("\n" .. string.rep("=", 50)) +print("INTEGRATION TEST SUITE") +print(string.rep("=", 50)) + +test_api_storage_integration() +test_transaction_index_integration() +test_acl_trigger_integration() +test_cluster_persistence_integration() +test_wal_recovery_integration() + +print("\n✓ ALL INTEGRATION TESTS PASSED ✓\n")