DEVX-62: feat: weighted LPT distribution, workflow fixes, decouple vikunja/sync-wiki from release
This commit is contained in:
@@ -7,6 +7,7 @@ from click.testing import CliRunner
|
||||
|
||||
from devx.ci.distribute_files import (
|
||||
DEFAULT_MAX_RUNNERS,
|
||||
_file_weight,
|
||||
discover_files,
|
||||
distribute,
|
||||
files_for_runner,
|
||||
@@ -169,3 +170,46 @@ def test_main_module_block() -> None:
|
||||
import devx.ci.distribute_files as mod
|
||||
|
||||
assert hasattr(mod, "main")
|
||||
|
||||
|
||||
class TestFileWeight:
|
||||
def test_weight_based_on_size(self, tmp_path: Path) -> None:
|
||||
f = tmp_path / "test_big.py"
|
||||
f.write_text("x" * 5000)
|
||||
assert _file_weight(str(f)) == 5000
|
||||
|
||||
def test_min_weight_is_1(self, tmp_path: Path) -> None:
|
||||
f = tmp_path / "empty.py"
|
||||
f.write_text("")
|
||||
assert _file_weight(str(f)) == 1
|
||||
|
||||
def test_nonexistent_file_returns_1(self) -> None:
|
||||
assert _file_weight("/nonexistent/file.py") == 1
|
||||
|
||||
|
||||
class TestDistributeLpt:
|
||||
def test_large_files_on_different_runners(self, tmp_path: Path) -> None:
|
||||
"""Two large files should go to different runners."""
|
||||
big1 = tmp_path / "test_big1.py"
|
||||
big2 = tmp_path / "test_big2.py"
|
||||
small1 = tmp_path / "test_small1.py"
|
||||
small2 = tmp_path / "test_small2.py"
|
||||
big1.write_text("x" * 10000)
|
||||
big2.write_text("x" * 10000)
|
||||
small1.write_text("x")
|
||||
small2.write_text("x")
|
||||
files = [str(big1), str(big2), str(small1), str(small2)]
|
||||
groups = distribute(files, 2)
|
||||
runner_0 = groups[0]
|
||||
runner_1 = groups[1]
|
||||
# Big files should be on different runners
|
||||
assert not (str(big1) in runner_0 and str(big2) in runner_0)
|
||||
assert not (str(big1) in runner_1 and str(big2) in runner_1)
|
||||
|
||||
def test_all_files_preserved(self, tmp_path: Path) -> None:
|
||||
for i in range(5):
|
||||
(tmp_path / f"test_{i}.py").write_text(f"content {i}" * (i + 1))
|
||||
files = [str(tmp_path / f"test_{i}.py") for i in range(5)]
|
||||
groups = distribute(files, 3)
|
||||
flat = sorted(f for group in groups for f in group)
|
||||
assert flat == sorted(files)
|
||||
|
||||
Reference in New Issue
Block a user