test_t3_performance.py python
80 lines 2.9 KB
Raw
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