Luigit
repositories / bugabinga.net

bugabinga.net

personal infrastructure for bugabinga!

owned by admin

services/luci/internal/lifecycle/lifecycle_test.go

Raw
package lifecycle

import (
	"os"
	"path/filepath"
	"testing"

	"bugabinga.net/luci/internal/history"
)

func TestRunLockRejectsDeleteWhileProcessing(t *testing.T) {
	data := t.TempDir()
	processing, err := TryLockRun(data, "42", true)
	if err != nil {
		t.Fatal(err)
	}
	defer processing.Close()
	if _, err := TryLockRun(data, "42", false); err == nil {
		t.Fatal("exclusive delete lock acquired while run lock is held")
	}
}

func TestDeleteTombstonesAndRetriesLegacyCleanup(t *testing.T) {
	data := t.TempDir()
	events := []history.Event{{RunID: "42", ChildID: "legacy-001", Job: "check", Status: "success"}, {RunID: "42", ChildID: "run", Job: "push", Status: "success"}}
	log := filepath.Join(data, "logs", "42-check.log.zst")
	artifact := filepath.Join(data, "artifacts", "42", "001", "result")
	for path := range map[string]bool{log: true, artifact: true} {
		if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
			t.Fatal(err)
		}
		if err := os.WriteFile(path, []byte("x"), 0o644); err != nil {
			t.Fatal(err)
		}
	}
	preview, err := PreviewRun(data, "42", events)
	if err != nil || preview.Bytes != 2 || len(preview.Files) != 2 {
		t.Fatalf("preview=%+v err=%v", preview, err)
	}
	if err := Delete(data, preview); err != nil {
		t.Fatal(err)
	}
	if deleted, err := Deleted(data, "42"); err != nil || !deleted {
		t.Fatalf("deleted=%v err=%v", deleted, err)
	}
	if _, err := os.Stat(log); !os.IsNotExist(err) {
		t.Fatalf("log remains: %v", err)
	}
	if err := Delete(data, preview); err != nil {
		t.Fatalf("retry: %v", err)
	}
	filtered, err := Filter(data, append([]history.Event(nil), events...))
	if err != nil || len(filtered) != 0 {
		t.Fatalf("filtered=%v err=%v", filtered, err)
	}
}