test_t3_performance.py
python
sha256:fc4c9ad652d1fff3dc508cb6ea02ee710ee6dfc4cb3761291d9900b5e029ea8a
feat(slice-7): T3 dataset review lifecycle, job queue, prov…
Human
minor
⚠ breaking
42 days ago
| 1 | """Performance tier tests — T3 queue operations and dataset lookup under load.""" |
| 2 | |
| 3 | from __future__ import annotations |
| 4 | |
| 5 | import time |
| 6 | import unittest |
| 7 | |
| 8 | from scooling_lab_helpers import valid_payload |
| 9 | |
| 10 | from scooling_lab.dataset_review import DatasetStore, RejectionReasonCode |
| 11 | from scooling_lab.service import TrainingApiService |
| 12 | from scooling_lab.store import TrainingJobStore |
| 13 | |
| 14 | |
| 15 | class T3PerformanceTests(unittest.TestCase): |
| 16 | """Performance tests with generous wall-clock thresholds for CI robustness.""" |
| 17 | |
| 18 | def test_performance_t3_dataset_store_lookups_are_constant_time(self) -> None: |
| 19 | """10 000 is_approved checks complete under 1 second.""" |
| 20 | |
| 21 | ds_store = DatasetStore() |
| 22 | start = time.monotonic() |
| 23 | for _ in range(10_000): |
| 24 | ds_store.is_approved("fixture:synthetic-tiny-v1") |
| 25 | elapsed = time.monotonic() - start |
| 26 | self.assertLess( |
| 27 | elapsed, 1.0, msg=f"10 000 is_approved calls took {elapsed:.3f}s" |
| 28 | ) |
| 29 | |
| 30 | def test_performance_t3_queue_state_is_fast_under_large_backlog(self) -> None: |
| 31 | """queue_state call with 200 completed jobs finishes under 0.5 seconds.""" |
| 32 | |
| 33 | service = TrainingApiService(TrainingJobStore(queue_limit=256)) |
| 34 | for index in range(200): |
| 35 | service.create_training_job(valid_payload(f"perf-backlog-{index}")) |
| 36 | |
| 37 | start = time.monotonic() |
| 38 | for _ in range(500): |
| 39 | service.get_queue_state() |
| 40 | elapsed = time.monotonic() - start |
| 41 | self.assertLess( |
| 42 | elapsed, 0.5, msg=f"500 queue_state calls took {elapsed:.3f}s" |
| 43 | ) |
| 44 | |
| 45 | def test_performance_t3_bulk_dataset_register_review_is_bounded(self) -> None: |
| 46 | """Registering and reviewing 500 datasets completes under 3 seconds.""" |
| 47 | |
| 48 | ds_store = DatasetStore() |
| 49 | dataset_ids = [f"perf-ds-{i:05d}" for i in range(500)] |
| 50 | start = time.monotonic() |
| 51 | for did in dataset_ids: |
| 52 | ds_store.register(did) |
| 53 | ds_store.submit_for_review(did) |
| 54 | ds_store.approve(did) |
| 55 | elapsed = time.monotonic() - start |
| 56 | self.assertLess( |
| 57 | elapsed, 3.0, msg=f"500 register+review cycles took {elapsed:.3f}s" |
| 58 | ) |
| 59 | for did in dataset_ids: |
| 60 | self.assertTrue(ds_store.is_approved(did)) |
| 61 | |
| 62 | def test_performance_t3_rejected_dataset_lookup_is_bounded(self) -> None: |
| 63 | """1 000 is_approved calls on a rejected dataset finish under 0.2 seconds.""" |
| 64 | |
| 65 | ds_store = DatasetStore() |
| 66 | ds_store.register("perf-rejected-ds") |
| 67 | ds_store.submit_for_review("perf-rejected-ds") |
| 68 | ds_store.reject("perf-rejected-ds", RejectionReasonCode.POLICY_VIOLATION) |
| 69 | |
| 70 | start = time.monotonic() |
| 71 | for _ in range(1_000): |
| 72 | ds_store.is_approved("perf-rejected-ds") |
| 73 | elapsed = time.monotonic() - start |
| 74 | self.assertLess( |
| 75 | elapsed, 0.2, msg=f"1 000 rejected checks took {elapsed:.3f}s" |
| 76 | ) |
| 77 | |
| 78 | |
| 79 | if __name__ == "__main__": |
| 80 | unittest.main() |
File History
1 commit
sha256:fc4c9ad652d1fff3dc508cb6ea02ee710ee6dfc4cb3761291d9900b5e029ea8a
feat(slice-7): T3 dataset review lifecycle, job queue, prov…
Human
minor
⚠
42 days ago