ref: 79c40dcb08f0d512bd6d75d5e2acd3ddceec4530
dir: /receivepack/service/service_test.go/
package service_test
import (
"context"
"io/fs"
"os"
"strings"
"testing"
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/objectstore/memory"
"codeberg.org/lindenii/furgit/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))
}
})
}