|
13 | 13 | import os |
14 | 14 | import shutil |
15 | 15 | import sys |
| 16 | +import tarfile |
16 | 17 | import tempfile |
17 | 18 | from pathlib import Path |
18 | 19 | from unittest.mock import MagicMock, patch |
@@ -566,6 +567,38 @@ async def test_math_correctness(row: EvaluationRow) -> EvaluationRow: |
566 | 567 | shutil.rmtree(test_project_dir, ignore_errors=True) |
567 | 568 |
|
568 | 569 |
|
| 570 | +def test_create_tar_includes_dockerignored_files(tmp_path): |
| 571 | + from eval_protocol.evaluation import Evaluator |
| 572 | + |
| 573 | + project_dir = tmp_path / "project" |
| 574 | + project_dir.mkdir() |
| 575 | + (project_dir / "requirements.txt").write_text("") |
| 576 | + (project_dir / "Dockerfile").write_text("FROM python:3.11\n") |
| 577 | + (project_dir / ".dockerignore").write_text("Dockerfile\nignored_dir/\n") |
| 578 | + |
| 579 | + ignored_dir = project_dir / "ignored_dir" |
| 580 | + ignored_dir.mkdir() |
| 581 | + (ignored_dir / "data.txt").write_text("package me\n") |
| 582 | + |
| 583 | + tar_path = tmp_path / "archive.tar.gz" |
| 584 | + archive_size = Evaluator._create_tar_gz_with_ignores(str(tar_path), str(project_dir)) |
| 585 | + |
| 586 | + assert archive_size > 0 |
| 587 | + with tarfile.open(tar_path, "r:gz") as tar: |
| 588 | + names = tar.getnames() |
| 589 | + |
| 590 | + project_prefix = project_dir.name |
| 591 | + expected_paths = [ |
| 592 | + f"{project_prefix}/Dockerfile", |
| 593 | + f"{project_prefix}/.dockerignore", |
| 594 | + f"{project_prefix}/ignored_dir/data.txt", |
| 595 | + f"{project_prefix}/requirements.txt", |
| 596 | + ] |
| 597 | + |
| 598 | + for expected_path in expected_paths: |
| 599 | + assert expected_path in names, f"Expected {expected_path} in archive" |
| 600 | + |
| 601 | + |
569 | 602 | def test_ep_upload_force_flag_triggers_delete_flow( |
570 | 603 | mock_env_variables, |
571 | 604 | mock_gcs_upload, |
|
0 commit comments