| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- from __future__ import annotations
- import json
- from pathlib import Path
- from scripts.validation.rule_execution_capacity import (
- CapacityLimits,
- CapacityObservation,
- assert_capacity_within_limits,
- write_capacity_evidence,
- )
- def test_capacity_evidence_is_recalculable_and_fails_closed(tmp_path):
- limits = CapacityLimits(
- runner_memory_bytes=512 * 1024 * 1024,
- datasource_pool_budget=4,
- artifact_bytes=128 * 1024 * 1024,
- )
- observations = [
- CapacityObservation(
- backend="sql_pushdown",
- rows=100_000,
- elapsed_seconds=2.0,
- peak_memory_bytes=64 * 1024 * 1024,
- pool_peak=2,
- artifact_bytes=0,
- node_durations_seconds=(1.8, 2.0, 2.2),
- ),
- CapacityObservation(
- backend="polars_batch",
- rows=100_000,
- elapsed_seconds=4.0,
- peak_memory_bytes=128 * 1024 * 1024,
- pool_peak=1,
- artifact_bytes=8 * 1024 * 1024,
- node_durations_seconds=(3.8, 4.0, 4.2),
- ),
- ]
- for observation in observations:
- assert_capacity_within_limits(observation, limits)
- output = tmp_path / "capacity.json"
- write_capacity_evidence(
- output,
- observations=observations,
- limits=limits,
- machine={"source": "pytest", "logical_cpu_count": 8},
- )
- evidence = json.loads(output.read_text(encoding="utf-8"))
- assert evidence["schema_version"] == "1.0"
- assert evidence["limits"]["datasource_pool_budget"] == 4
- assert evidence["observations"][0]["throughput_rows_per_second"] == 50_000
- assert evidence["observations"][0]["p95_node_seconds"] == 2.2
- assert evidence["evidence_sha256"] == (
- write_capacity_evidence.digest_payload(evidence)
- )
- def test_capacity_gate_rejects_runner_pool_and_artifact_overruns():
- limits = CapacityLimits(
- runner_memory_bytes=100,
- datasource_pool_budget=2,
- artifact_bytes=100,
- )
- cases = [
- CapacityObservation(
- "polars_batch", 100, 1.0, 101, 1, 10, (1.0,)
- ),
- CapacityObservation(
- "sql_pushdown", 100, 1.0, 10, 3, 0, (1.0,)
- ),
- CapacityObservation(
- "polars_batch", 100, 1.0, 10, 1, 101, (1.0,)
- ),
- ]
- for observation in cases:
- try:
- assert_capacity_within_limits(observation, limits)
- except ValueError as exc:
- assert "capacity limit exceeded" in str(exc)
- else:
- raise AssertionError("capacity overrun was accepted")
- def test_capacity_targets_declare_100k_1m_and_10m_or_hardware_limit():
- manifest = Path("docs/validation/data-rule-m5-capacity-targets.json")
- assert manifest.is_file()
- payload = json.loads(manifest.read_text(encoding="utf-8"))
- assert payload["requested_rows"] == [100_000, 1_000_000, 10_000_000]
- assert payload["hardware_limit"]["maximum_measured_rows"] >= 100_000
- if payload["hardware_limit"]["maximum_measured_rows"] < 10_000_000:
- assert payload["hardware_limit"]["reason"]
|