fix(tests): resolve unit test and benchmark failures
- Fix project_repository_steps session mismatch: use shared session for repos so context.pr_session.commit() commits flushed data - Fix cli_format_bench setup/teardown to accept fmt parameter for parameterized ASV benchmarks - Fix plan_model_bench PlanPhase.APPLIED -> PlanPhase.APPLY - Fix benchmark idempotency: use batch counters to generate unique IDs across repeated ASV iterations (plan_phase_migration_bench, project_migration_bench, resource_registry_migration_bench) - Fix uow_lifecycle_bench FK constraint by reusing pre-seeded action - Fix plan_lifecycle_persistence_bench to create fresh plan per iteration
This commit is contained in:
@@ -42,6 +42,8 @@ class ProjectInsert:
|
||||
"""Benchmark inserting project records."""
|
||||
|
||||
def setup(self) -> None:
|
||||
self._single_ctr = 0
|
||||
self._batch_ctr = 0
|
||||
self.engine = create_engine("sqlite:///:memory:")
|
||||
event.listen(self.engine, "connect", _set_sqlite_pragma)
|
||||
with self.engine.connect() as conn:
|
||||
@@ -54,9 +56,10 @@ class ProjectInsert:
|
||||
self.engine.dispose()
|
||||
|
||||
def time_insert_single_project(self) -> None:
|
||||
self._single_ctr += 1
|
||||
session = self.session_factory()
|
||||
proj = NamespacedProjectModel(
|
||||
namespaced_name="bench/single-project",
|
||||
namespaced_name=f"bench/single-project-{self._single_ctr}",
|
||||
namespace="bench",
|
||||
tags_json="[]",
|
||||
created_at=_now_iso(),
|
||||
@@ -67,13 +70,16 @@ class ProjectInsert:
|
||||
session.close()
|
||||
|
||||
def time_insert_100_projects(self) -> None:
|
||||
offset = self._batch_ctr * 100
|
||||
self._batch_ctr += 1
|
||||
session = self.session_factory()
|
||||
for i in range(100):
|
||||
uid = offset + i
|
||||
proj = NamespacedProjectModel(
|
||||
namespaced_name=f"bench/project-{i}",
|
||||
namespaced_name=f"bench/project-{uid}",
|
||||
namespace="bench",
|
||||
description=f"Project {i}",
|
||||
tags_json=json.dumps([f"tag-{i}"]),
|
||||
description=f"Project {uid}",
|
||||
tags_json=json.dumps([f"tag-{uid}"]),
|
||||
created_at=_now_iso(),
|
||||
updated_at=_now_iso(),
|
||||
)
|
||||
@@ -86,6 +92,7 @@ class ProjectLinkInsert:
|
||||
"""Benchmark inserting project resource link records."""
|
||||
|
||||
def setup(self) -> None:
|
||||
self._batch_ctr = 0
|
||||
self.engine = create_engine("sqlite:///:memory:")
|
||||
event.listen(self.engine, "connect", _set_sqlite_pragma)
|
||||
with self.engine.connect() as conn:
|
||||
@@ -115,8 +122,8 @@ class ProjectLinkInsert:
|
||||
)
|
||||
session.add(proj)
|
||||
|
||||
# Create 50 resources
|
||||
for i in range(50):
|
||||
# Create resources (large pool so repeated iterations can use unique ones)
|
||||
for i in range(5000):
|
||||
r = ResourceModel()
|
||||
r.resource_id = _make_ulid(i)
|
||||
r.type_name = "bench/git-checkout"
|
||||
@@ -132,12 +139,15 @@ class ProjectLinkInsert:
|
||||
self.engine.dispose()
|
||||
|
||||
def time_insert_50_links(self) -> None:
|
||||
offset = self._batch_ctr * 50
|
||||
self._batch_ctr += 1
|
||||
session = self.session_factory()
|
||||
for i in range(50):
|
||||
uid = offset + i
|
||||
link = ProjectResourceLinkModel(
|
||||
link_id=_make_ulid(1000 + i),
|
||||
link_id=_make_ulid(10_000 + uid),
|
||||
project_name="bench/link-project",
|
||||
resource_id=_make_ulid(i),
|
||||
resource_id=_make_ulid(uid),
|
||||
read_only=i % 2 == 0,
|
||||
created_at=_now_iso(),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user