aboutsummaryrefslogtreecommitdiff
path: root/network/receivepack/service/service_test.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-26 09:14:59 +0000
committerGravatar Runxi Yu2026-03-26 09:14:59 +0000
commit3d25bda9d5da6814661828adabe8a09f9d01aefb (patch)
treed034e28079333f85e5d7b96d921282eddd4798d6 /network/receivepack/service/service_test.go
parentobject/id: Empty tree (diff)
signatureNo signature
network/receivepack: Rename from receivepack
Diffstat (limited to 'network/receivepack/service/service_test.go')
-rw-r--r--network/receivepack/service/service_test.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/network/receivepack/service/service_test.go b/network/receivepack/service/service_test.go
new file mode 100644
index 00000000..e59113be
--- /dev/null
+++ b/network/receivepack/service/service_test.go
@@ -0,0 +1,99 @@
+package service_test
+
+import (
+ "context"
+ "io/fs"
+ "os"
+ "strings"
+ "testing"
+
+ "codeberg.org/lindenii/furgit/internal/testgit"
+ objectid "codeberg.org/lindenii/furgit/object/id"
+ "codeberg.org/lindenii/furgit/object/storer/memory"
+ "codeberg.org/lindenii/furgit/network/receivepack/service"
+)
+
+func TestExecutePackExpectedWithoutObjectsRoot(t *testing.T) {
+ t.Parallel()
+
+ //nolint:thelper
+ testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) {
+ t.Parallel()
+
+ store := memory.New(algo)
+ svc := service.New(service.Options{
+ Algorithm: algo,
+ ExistingObjects: store,
+ })
+
+ result, err := svc.Execute(context.Background(), &service.Request{
+ Commands: []service.Command{{
+ Name: "refs/heads/main",
+ OldID: objectid.Zero(algo),
+ NewID: objectid.Zero(algo),
+ }},
+ PackExpected: true,
+ Pack: strings.NewReader("not a pack"),
+ })
+ if err != nil {
+ t.Fatalf("Execute: %v", err)
+ }
+
+ if result.UnpackError != "objects root not configured" {
+ t.Fatalf("unexpected unpack error %q", result.UnpackError)
+ }
+ })
+}
+
+func TestExecuteRemovesDerivedQuarantineAfterIngestFailure(t *testing.T) {
+ t.Parallel()
+
+ //nolint:thelper
+ testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) {
+ t.Parallel()
+
+ store := memory.New(algo)
+ objectsDir := t.TempDir()
+
+ objectsRoot, err := os.OpenRoot(objectsDir)
+ if err != nil {
+ t.Fatalf("os.OpenRoot: %v", err)
+ }
+
+ t.Cleanup(func() {
+ _ = objectsRoot.Close()
+ })
+
+ svc := service.New(service.Options{
+ Algorithm: algo,
+ ExistingObjects: store,
+ ObjectsRoot: objectsRoot,
+ })
+
+ result, err := svc.Execute(context.Background(), &service.Request{
+ Commands: []service.Command{{
+ Name: "refs/heads/main",
+ OldID: objectid.Zero(algo),
+ NewID: objectid.Zero(algo),
+ }},
+ PackExpected: true,
+ Pack: strings.NewReader("not a pack"),
+ })
+ if err != nil {
+ t.Fatalf("Execute: %v", err)
+ }
+
+ if result.UnpackError == "" {
+ t.Fatal("Execute returned empty unpack error for invalid pack")
+ }
+
+ entries, err := fs.ReadDir(objectsRoot.FS(), ".")
+ if err != nil {
+ t.Fatalf("fs.ReadDir: %v", err)
+ }
+
+ if len(entries) != 0 {
+ t.Fatalf("objects root still has entries after failed ingest: %d", len(entries))
+ }
+ })
+}