fix: add missing validations/unit-tests.yaml example
CI / lint (pull_request) Successful in 39s
CI / helm (pull_request) Successful in 32s
CI / build (pull_request) Successful in 32s
CI / push-validation (pull_request) Successful in 31s
CI / quality (pull_request) Successful in 1m0s
CI / security (pull_request) Successful in 1m2s
CI / typecheck (pull_request) Successful in 1m40s
CI / unit_tests (pull_request) Successful in 6m25s
CI / docker (pull_request) Successful in 1m27s
CI / coverage (pull_request) Successful in 10m51s
CI / integration_tests (pull_request) Successful in 22m36s
CI / status-check (pull_request) Successful in 3s
CI / lint (pull_request) Successful in 39s
CI / helm (pull_request) Successful in 32s
CI / build (pull_request) Successful in 32s
CI / push-validation (pull_request) Successful in 31s
CI / quality (pull_request) Successful in 1m0s
CI / security (pull_request) Successful in 1m2s
CI / typecheck (pull_request) Successful in 1m40s
CI / unit_tests (pull_request) Successful in 6m25s
CI / docker (pull_request) Successful in 1m27s
CI / coverage (pull_request) Successful in 10m51s
CI / integration_tests (pull_request) Successful in 22m36s
CI / status-check (pull_request) Successful in 3s
Add the missing workflow validation example and keep the #1039 TDD regression active by removing the expected-fail tag and updating scenario narrative.\n\nTo satisfy the required full quality gates, stabilize flaky integration behavior encountered during this issue run: use a shared SQLAlchemy session in resource DAG scripts, isolate RxPY validation temp paths per test run, extend transient subprocess timeouts/retry behavior, and clear stale pabot worker artifacts before integration runs so repeated nox executions are reliable.\n\nISSUES CLOSED: #1039
This commit is contained in:
@@ -8,6 +8,7 @@ Library indentation_library.py
|
||||
Resource ${CURDIR}/common.resource
|
||||
|
||||
*** Variables ***
|
||||
${PYTHON} python
|
||||
${TEST_PROJECT_NAME} test-db-project
|
||||
${TEST_PLAN_NAME} test-plan
|
||||
${TEST_FILE} test_file.py
|
||||
@@ -759,12 +760,18 @@ Run Python Script
|
||||
${temp_file}= Evaluate (lambda t: (__import__('os').close(t[0]), t[1])[-1])(__import__('tempfile').mkstemp(suffix='.py', dir='/tmp'))
|
||||
Create File ${temp_file} ${full_code}
|
||||
${result}= Run Process ${PYTHON} ${temp_file} timeout=180s stderr=STDOUT env:PYTHONWARNINGS=ignore env:PYTHONDONTWRITEBYTECODE=1
|
||||
Remove File ${temp_file}
|
||||
# Check if process failed and log stderr if present
|
||||
# Retry once for transient worker pressure (e.g. SIGTERM under heavy CI load)
|
||||
IF ${result.rc} != 0
|
||||
Log Process failed with rc=${result.rc} stdout: ${result.stdout} WARN
|
||||
Fail Python script execution failed (rc=${result.rc}): ${result.stdout}
|
||||
Log First Python script attempt failed with rc=${result.rc}; retrying once. Output: ${result.stdout} WARN
|
||||
${retry}= Run Process ${PYTHON} ${temp_file} timeout=180s stderr=STDOUT env:PYTHONWARNINGS=ignore env:PYTHONDONTWRITEBYTECODE=1
|
||||
IF ${retry.rc} == 0
|
||||
${result}= Set Variable ${retry}
|
||||
ELSE
|
||||
Remove File ${temp_file}
|
||||
Fail Python script execution failed after retry (rc=${retry.rc}): ${retry.stdout}
|
||||
END
|
||||
END
|
||||
Remove File ${temp_file}
|
||||
# Extract just the number from the output (last line)
|
||||
${lines}= Split String ${result.stdout} \n
|
||||
${filtered_lines}= Create List
|
||||
|
||||
@@ -82,7 +82,7 @@ def _run_error_script(python_path: str, script: str) -> dict[str, object]:
|
||||
[python_path, "-c", script],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=90,
|
||||
timeout=120,
|
||||
)
|
||||
return {
|
||||
"rc": result.returncode,
|
||||
|
||||
@@ -10,13 +10,14 @@ Link Child And Verify Tree
|
||||
... import json
|
||||
... from datetime import datetime, UTC
|
||||
... from sqlalchemy import create_engine, event
|
||||
... from sqlalchemy.pool import StaticPool
|
||||
... from sqlalchemy.orm import sessionmaker
|
||||
... from sqlalchemy.pool import StaticPool
|
||||
... from cleveragents.infrastructure.database.models import Base
|
||||
... from cleveragents.infrastructure.database.repositories import ResourceTypeRepository, ResourceRepository
|
||||
... from cleveragents.domain.models.core.resource_type import ResourceTypeSpec, ResourceKind, SandboxStrategy
|
||||
... from cleveragents.domain.models.core.resource import Resource, PhysVirt, ResourceCapabilities
|
||||
... engine = create_engine("sqlite:///:memory:", poolclass=StaticPool, connect_args={"check_same_thread": False})
|
||||
... engine = create_engine("sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool)
|
||||
... @event.listens_for(engine, "connect")
|
||||
... def _fk(conn, _): conn.cursor().execute("PRAGMA foreign_keys=ON")
|
||||
... Base.metadata.create_all(engine)
|
||||
@@ -47,13 +48,14 @@ Cycle Detection Rejects A To B To A
|
||||
${script}= Catenate SEPARATOR=\n
|
||||
... from datetime import datetime, UTC
|
||||
... from sqlalchemy import create_engine, event
|
||||
... from sqlalchemy.pool import StaticPool
|
||||
... from sqlalchemy.orm import sessionmaker
|
||||
... from sqlalchemy.pool import StaticPool
|
||||
... from cleveragents.infrastructure.database.models import Base
|
||||
... from cleveragents.infrastructure.database.repositories import ResourceTypeRepository, ResourceRepository, CycleDetectedError
|
||||
... from cleveragents.domain.models.core.resource_type import ResourceTypeSpec, ResourceKind, SandboxStrategy
|
||||
... from cleveragents.domain.models.core.resource import Resource, PhysVirt, ResourceCapabilities
|
||||
... engine = create_engine("sqlite:///:memory:", poolclass=StaticPool, connect_args={"check_same_thread": False})
|
||||
... engine = create_engine("sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool)
|
||||
... @event.listens_for(engine, "connect")
|
||||
... def _fk(conn, _): conn.cursor().execute("PRAGMA foreign_keys=ON")
|
||||
... Base.metadata.create_all(engine)
|
||||
@@ -87,13 +89,14 @@ Auto Discover Children
|
||||
... import json
|
||||
... from datetime import datetime, UTC
|
||||
... from sqlalchemy import create_engine, event
|
||||
... from sqlalchemy.pool import StaticPool
|
||||
... from sqlalchemy.orm import sessionmaker
|
||||
... from sqlalchemy.pool import StaticPool
|
||||
... from cleveragents.infrastructure.database.models import Base
|
||||
... from cleveragents.infrastructure.database.repositories import ResourceTypeRepository, ResourceRepository
|
||||
... from cleveragents.domain.models.core.resource_type import ResourceTypeSpec, ResourceKind, SandboxStrategy
|
||||
... from cleveragents.domain.models.core.resource import Resource, PhysVirt, ResourceCapabilities
|
||||
... engine = create_engine("sqlite:///:memory:", poolclass=StaticPool, connect_args={"check_same_thread": False})
|
||||
... engine = create_engine("sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool)
|
||||
... @event.listens_for(engine, "connect")
|
||||
... def _fk(conn, _): conn.cursor().execute("PRAGMA foreign_keys=ON")
|
||||
... Base.metadata.create_all(engine)
|
||||
|
||||
@@ -180,12 +180,21 @@ Test Context File Not Created On Multiple Runs
|
||||
*** Keywords ***
|
||||
Setup Test Environment
|
||||
[Documentation] Setup test environment
|
||||
Create Directory ${TEST_DIR}
|
||||
Create Directory ${CONTEXT_DIR}
|
||||
|
||||
# Generate unique ID for this test run
|
||||
# Generate unique ID for this test run first, then scope all temp paths
|
||||
# to that ID so parallel suites cannot collide on shared temp files.
|
||||
${timestamp} = Get Time epoch
|
||||
Set Suite Variable ${UNIQUE_ID} ${timestamp}
|
||||
${test_dir} = Set Variable ${TEMPDIR}/rxpy_validation_test_${timestamp}
|
||||
${rxpy_config} = Set Variable ${test_dir}/rxpy_config.yaml
|
||||
${langgraph_config} = Set Variable ${test_dir}/langgraph_config.yaml
|
||||
${context_dir} = Set Variable ${test_dir}/test_contexts
|
||||
Set Suite Variable ${TEST_DIR} ${test_dir}
|
||||
Set Suite Variable ${RXPY_CONFIG} ${rxpy_config}
|
||||
Set Suite Variable ${LANGGRAPH_CONFIG} ${langgraph_config}
|
||||
Set Suite Variable ${CONTEXT_DIR} ${context_dir}
|
||||
|
||||
Create Directory ${TEST_DIR}
|
||||
Create Directory ${CONTEXT_DIR}
|
||||
|
||||
Cleanup Test Environment
|
||||
[Documentation] Clean up test environment
|
||||
|
||||
Reference in New Issue
Block a user