aboutsummaryrefslogtreecommitdiff
path: root/objectstore/loose/helpers_test.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-22 17:27:37 +0000
committerGravatar Runxi Yu2026-03-22 17:27:37 +0000
commit8f577284f47f699855dcb3ceda21aa9d8be77c2f (patch)
tree36f8d47a1584bd80e9e114d5c68ad5ec6c333b88 /objectstore/loose/helpers_test.go
parentinternal/testgit: why not make it more annoying to use ambient authority (diff)
signatureNo signature
objectstore{,/loose}: Document contracts more clearly
Diffstat (limited to 'objectstore/loose/helpers_test.go')
-rw-r--r--objectstore/loose/helpers_test.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/objectstore/loose/helpers_test.go b/objectstore/loose/helpers_test.go
index 6cc50163..f4c8dbb3 100644
--- a/objectstore/loose/helpers_test.go
+++ b/objectstore/loose/helpers_test.go
@@ -2,6 +2,7 @@ package loose_test
import (
"io"
+ "os"
"testing"
"codeberg.org/lindenii/furgit/internal/testgit"
@@ -65,3 +66,41 @@ func expectedRawObject(t *testing.T, testRepo *testgit.TestRepo, id objectid.Obj
return ty, body, raw
}
+
+func corruptLooseObjectTrailer(t *testing.T, testRepo *testgit.TestRepo, id objectid.ObjectID) {
+ t.Helper()
+
+ root := testRepo.OpenObjectsRoot(t)
+
+ hex := id.String()
+ relPath := hex[:2] + "/" + hex[2:]
+
+ file, err := root.OpenFile(relPath, os.O_RDWR, 0)
+ if err != nil {
+ t.Fatalf("OpenFile(%q): %v", relPath, err)
+ }
+
+ defer func() { _ = file.Close() }()
+
+ info, err := file.Stat()
+ if err != nil {
+ t.Fatalf("Stat(%q): %v", relPath, err)
+ }
+
+ if info.Size() == 0 {
+ t.Fatalf("corrupt trailer on empty file %q", relPath)
+ }
+
+ last := make([]byte, 1)
+ _, err = file.ReadAt(last, info.Size()-1)
+ if err != nil {
+ t.Fatalf("ReadAt(%q): %v", relPath, err)
+ }
+
+ last[0] ^= 0xff
+
+ _, err = file.WriteAt(last, info.Size()-1)
+ if err != nil {
+ t.Fatalf("WriteAt(%q): %v", relPath, err)
+ }
+}