SIENTIAPDE-2202 Add gateway end-to-end test suite (e2e/) End-to-end suite at the repo root, following the Laborious/Orchestrator pattern: numbered scenarios per topic in e2e/scenarios.md (1:1 with test_scenario_* functions), scenario inputs as JSON, Postgres DDL mirrored from production, `integration` marker, excluded from the default pytest run. Every dependency runs for real: MongoDB, Redis, PostgreSQL, MinIO and NATS via testcontainers, OPC UA servers in process (asyncua). Pods are built from the environment like ingestor/app.py and driven one loop iteration at a time. 69 scenarios across 7 topics: slot leasing and failover, subscription reads, NATS writes and write_status (incl. the SIENTIAPDE-2202 timestamp/quality matrix, checked on the server and on the wire), gRPC ReadTag, active reads, client certificates/security, pod lifecycle. Replaces tests/functional (legacy slot v1 tests, fully commented out) and tests/functional/test_write_e2e.py (now scenarios 3.1.x). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
34 lines
1.6 KiB
SQL
34 lines
1.6 KiB
SQL
-- =============================================================================
|
|
-- E2E test database schema for the ``sientia_data`` namespace.
|
|
--
|
|
-- Mirrors the production DDL one-to-one so any change in production can be
|
|
-- pasted directly into this file. The conftest fixture drops the schema and
|
|
-- loads this SQL into the testcontainers Postgres before every test.
|
|
--
|
|
-- The gateway only touches ``sientia_data.predictions``: it updates
|
|
-- ``write_status`` (contract C3, SIENTIAPDE-1975) on the row the Laborious
|
|
-- inserted. Same DDL as ``sientia-dataops-laborious/e2e/db_schema.sql``.
|
|
-- =============================================================================
|
|
|
|
CREATE SCHEMA IF NOT EXISTS sientia_data;
|
|
|
|
-- -----------------------------------------------------------------------------
|
|
-- sientia_data.predictions
|
|
-- -----------------------------------------------------------------------------
|
|
CREATE TABLE IF NOT EXISTS sientia_data.predictions (
|
|
model_id int4 NOT NULL,
|
|
prediction numeric NULL,
|
|
prediction_confidence numeric NOT NULL,
|
|
response_time numeric NOT NULL,
|
|
prediction_status text NOT NULL,
|
|
"timestamp" timestamptz NOT NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
"comments" text NULL,
|
|
metadata_id varchar(24) NULL,
|
|
write_status text NULL,
|
|
CONSTRAINT unique_model_id_timestamp
|
|
UNIQUE (model_id, "timestamp"),
|
|
CONSTRAINT chk_predictions_write_status
|
|
CHECK (write_status IN ('pending', 'ok', 'error', 'session_bad'))
|
|
);
|