fetch_ml/tests/unit/worker/run_manifest_execution_test.go
Jeremie Fraeys fc2459977c
refactor(worker): update worker tests and native bridge
**Worker Refactoring:**
- Update internal/worker/factory.go, worker.go, snapshot_store.go
- Update native_bridge.go and native_bridge_nocgo.go for native library integration

**Test Updates:**
- Update all worker unit tests for new interfaces
- Update chaos tests
- Update container/podman_test.go
- Add internal/workertest/worker.go for shared test utilities

**Documentation:**
- Update native/README.md
2026-02-23 18:04:22 -05:00

90 lines
2.5 KiB
Go

package worker_test
import (
"context"
"os"
"path/filepath"
"testing"
"time"
"github.com/jfraeys/fetch_ml/internal/experiment"
"github.com/jfraeys/fetch_ml/internal/manifest"
"github.com/jfraeys/fetch_ml/internal/queue"
"github.com/jfraeys/fetch_ml/internal/worker"
"github.com/jfraeys/fetch_ml/internal/workertest"
)
func TestRunManifest_WrittenForLocalModeRun(t *testing.T) {
base := t.TempDir()
cfg := &worker.Config{
BasePath: base,
LocalMode: true,
TrainScript: "train.py",
PodmanImage: "python:3.11",
WorkerID: "worker-test",
}
w := workertest.NewTestWorker(cfg)
commitID := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" // 40 hex
expMgr := experiment.NewManager(base)
if err := expMgr.CreateExperiment(commitID); err != nil {
t.Fatalf("CreateExperiment: %v", err)
}
filesPath := expMgr.GetFilesPath(commitID)
if err := os.WriteFile(filepath.Join(filesPath, "train.py"), []byte("print('ok')\n"), 0600); err != nil {
t.Fatalf("write train.py: %v", err)
}
if err := os.WriteFile(filepath.Join(filesPath, "requirements.txt"), []byte("numpy==1.0.0\n"), 0600); err != nil {
t.Fatalf("write requirements.txt: %v", err)
}
man, err := expMgr.GenerateManifest(commitID)
if err != nil {
t.Fatalf("GenerateManifest: %v", err)
}
if err := expMgr.WriteManifest(man); err != nil {
t.Fatalf("WriteManifest: %v", err)
}
task := &queue.Task{
ID: "task-1234",
JobName: "job-1",
CreatedAt: time.Now().UTC(),
Metadata: map[string]string{
"commit_id": commitID,
"experiment_manifest_overall_sha": man.OverallSHA,
"deps_manifest_name": "requirements.txt",
"deps_manifest_sha256": "deadbeef",
},
}
if err := w.RunJob(context.Background(), task, ""); err != nil {
t.Fatalf("RunJob: %v", err)
}
finishedDir := filepath.Join(base, "finished", task.JobName)
loaded, err := manifest.LoadFromDir(finishedDir)
if err != nil {
t.Fatalf("LoadFromDir: %v", err)
}
if loaded.RunID == "" {
t.Fatalf("expected run_id")
}
if loaded.TaskID != task.ID {
t.Fatalf("task_id mismatch: got %q want %q", loaded.TaskID, task.ID)
}
if loaded.JobName != task.JobName {
t.Fatalf("job_name mismatch: got %q want %q", loaded.JobName, task.JobName)
}
if loaded.CommitID != commitID {
t.Fatalf("commit_id mismatch: got %q want %q", loaded.CommitID, commitID)
}
if loaded.DepsManifestName == "" {
t.Fatalf("expected deps_manifest_name")
}
if loaded.Command == "" {
t.Fatalf("expected command")
}
if loaded.ExitCode == nil {
t.Fatalf("expected exit_code")
}
}