package checkpoint import ( "os" "path/filepath" "testing" "gitea.maximumdirect.net/eric/notarius/internal/framework/pipeline" ) func TestRootBasedRecorderOutputIsReusable(t *testing.T) { root := t.TempDir() identity := testIdentity(t) recorder, err := NewFilesystemRecorder(root, identity) if err != nil { t.Fatal(err) } if err := recorder.ExtractSucceeded("lane", "module", nil, nil, nil, nil); err != nil { t.Fatal(err) } loader, err := NewFilesystemLoader(root, identity) if err != nil { t.Fatal(err) } result, decision := loader.Extract("lane", "module", nil) if !decision.Reused || len(result.Outputs) != 0 { t.Fatalf("load result=%#v decision=%#v", result, decision) } relative, err := identity.RelativePath() if err != nil { t.Fatal(err) } if _, err := os.Stat(filepath.Join(root, relative, "extract", "lane", "manifest.json")); err != nil { t.Fatal(err) } } func TestStepAwareRecorderAndLoaderIsolateLaneState(t *testing.T) { root := t.TempDir() identity := testIdentity(t) recorder, err := NewFilesystemRecorder(root, identity) if err != nil { t.Fatal(err) } if err := recorder.(pipeline.StepCheckpointRecorder).ExtractSucceededForStep("step-a", "lane", "module", nil, nil, nil, nil); err != nil { t.Fatal(err) } loader, err := NewFilesystemLoader(root, identity) if err != nil { t.Fatal(err) } stepLoader := loader.(pipeline.StepCheckpointLoader) if _, decision := stepLoader.ExtractForStep("step-b", "lane", "module", nil); decision.Reused { t.Fatal("checkpoint from another step was reused") } loaded, decision := stepLoader.ExtractForStep("step-a", "lane", "module", nil) if !decision.Reused || len(loaded.Outputs) != 0 { t.Fatalf("step-aware load = %#v, decision=%#v", loaded, decision) } relative, err := identity.RelativePath() if err != nil { t.Fatal(err) } if _, err := os.Stat(filepath.Join(root, relative, "extract", "step-a", "lane", "manifest.json")); err != nil { t.Fatal(err) } } func TestCheckpointSchemaCompatibilityIdentifiers(t *testing.T) { if WorkspaceSchemaVersion != "notarius.workspace.v3" || WorkspaceSchemaVersionV2 != "notarius.workspace.v2" || WorkspaceSchemaVersionV1 != "notarius.workspace.v1" { t.Fatal("checkpoint schema identifiers are incorrect") } } func testIdentity(t *testing.T) Identity { t.Helper() identity, err := NewIdentity(IdentityInput{Pipeline: pipeline.ResolvedPipeline{ID: "pipeline", Digest: "sha256:aaaaaaaaaaaaaaaa", Input: pipeline.Binding("input")}, RawInputDigest: "sha256:bbbbbbbbbbbbbbbb"}) if err != nil { t.Fatal(err) } return identity }