// SPDX-License-Identifier: GPL-3.0-or-later package assurance import ( "os" "path/filepath" "testing" "time" ) func TestAppendBuildsDurableLinkedRecords(t *testing.T) { directory := t.TempDir() chain, err := New(directory) if err != nil { t.Fatal(err) } firstPath := filepath.Join(directory, "first.json") secondPath := filepath.Join(directory, "second.log") os.WriteFile(firstPath, []byte("first"), 0o600) os.WriteFile(secondPath, []byte("second"), 0o600) first, err := chain.Append("snapshot-json", firstPath, time.Unix(1000, 0)) if err != nil { t.Fatal(err) } second, err := chain.Append("snapshot-log", secondPath, time.Unix(1001, 0)) if err != nil { t.Fatal(err) } if first.ChainHash == "" || second.PrevHash != first.ChainHash || second.ChainHash == first.ChainHash { t.Fatalf("first=%#v second=%#v", first, second) } records, err := ReadAll(chain.Path) if err != nil || len(records) != 2 { t.Fatalf("records=%#v err=%v", records, err) } info, err := os.Stat(chain.Path) if err != nil || info.Mode().Perm() != 0o600 { t.Fatalf("chain mode info=%v err=%v", info, err) } } func TestAppendUnavailableArtifactMatchesPythonFailOpenRecord(t *testing.T) { chain, err := New(t.TempDir()) if err != nil { t.Fatal(err) } record, err := chain.Append("missing", "/definitely/missing", time.Unix(1, 0)) if err != nil { t.Fatal(err) } if record.Size != 0 || record.SHA256 != "" || record.ChainHash == "" { t.Fatalf("record=%#v", record) } }