aboutsummaryrefslogtreecommitdiff
path: root/network/receivepack/int_test.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-30 19:51:58 +0000
committerGravatar Runxi Yu2026-03-30 19:57:33 +0000
commitda621b97d0aa209e7e502e9e898e0a7a89857216 (patch)
treec1484d878f85216ebf108e1e72136ccdabe4156f /network/receivepack/int_test.go
parentrepository: Use dual (diff)
signatureNo signature
network/receivepack: Use dual
Diffstat (limited to 'network/receivepack/int_test.go')
-rw-r--r--network/receivepack/int_test.go76
1 files changed, 62 insertions, 14 deletions
diff --git a/network/receivepack/int_test.go b/network/receivepack/int_test.go
index 79662bc1..352bbe7b 100644
--- a/network/receivepack/int_test.go
+++ b/network/receivepack/int_test.go
@@ -15,6 +15,10 @@ import (
receivepack "codeberg.org/lindenii/furgit/network/receivepack"
receivepackhooks "codeberg.org/lindenii/furgit/network/receivepack/hooks"
objectid "codeberg.org/lindenii/furgit/object/id"
+ objectstore "codeberg.org/lindenii/furgit/object/store"
+ objectdual "codeberg.org/lindenii/furgit/object/store/dual"
+ objectloose "codeberg.org/lindenii/furgit/object/store/loose"
+ objectpacked "codeberg.org/lindenii/furgit/object/store/packed"
)
func TestReceivePackDeleteOnlyAtomicDeleteSucceeds(t *testing.T) {
@@ -301,7 +305,7 @@ func testReceivePackProtocolFallback(t *testing.T, gitProtocol string) {
})
}
-func TestReceivePackPackRequestWithoutObjectsRootReportsNotConfigured(t *testing.T) {
+func TestReceivePackPackRequestWithoutObjectIngressReportsNotConfigured(t *testing.T) {
t.Parallel()
//nolint:thelper
@@ -334,7 +338,7 @@ func TestReceivePackPackRequestWithoutObjectsRootReportsNotConfigured(t *testing
}
got := output.String()
- if !strings.Contains(got, "unpack objects root not configured\n") {
+ if !strings.Contains(got, "unpack object ingress not configured\n") {
t.Fatalf("unexpected receive-pack output %q", got)
}
})
@@ -352,7 +356,7 @@ func TestReceivePackPackCreatePromotesObjectsAndUpdatesRef(t *testing.T) {
receiver := testgit.NewRepo(t, testgit.RepoOptions{ObjectFormat: algo, Bare: true})
repo := receiver.OpenRepository(t)
- objectsRoot := receiver.OpenObjectsRoot(t)
+ objectIngress := openReceivePackIngress(t, receiver, algo)
packStream := sender.PackObjectsReader(t, []string{commitID.String()}, false)
t.Cleanup(func() {
@@ -377,7 +381,7 @@ func TestReceivePackPackCreatePromotesObjectsAndUpdatesRef(t *testing.T) {
Algorithm: algo,
Refs: repo.Refs(),
ExistingObjects: repo.Objects(),
- ObjectsRoot: objectsRoot,
+ ObjectIngress: objectIngress,
},
)
if err != nil {
@@ -423,7 +427,7 @@ func TestReceivePackHookSeesQuarantinedObjectsAndCanRejectBeforePromotion(t *tes
receiver := testgit.NewRepo(t, testgit.RepoOptions{ObjectFormat: algo, Bare: true})
repo := receiver.OpenRepository(t)
- objectsRoot := receiver.OpenObjectsRoot(t)
+ objectIngress := openReceivePackIngress(t, receiver, algo)
packStream := sender.PackObjectsReader(t, []string{commitID.String()}, false)
t.Cleanup(func() {
@@ -449,7 +453,7 @@ func TestReceivePackHookSeesQuarantinedObjectsAndCanRejectBeforePromotion(t *tes
Algorithm: algo,
Refs: repo.Refs(),
ExistingObjects: repo.Objects(),
- ObjectsRoot: objectsRoot,
+ ObjectIngress: objectIngress,
Hook: func(ctx context.Context, req receivepack.HookRequest) ([]receivepack.UpdateDecision, error) {
hookCalled = true
@@ -658,7 +662,7 @@ func TestReceivePackPredefinedRejectForcePushHookRejectsNonFastForward(t *testin
testRepo.UpdateRef(t, "refs/heads/main", currentID)
repo := testRepo.OpenRepository(t)
- objectsRoot := testRepo.OpenObjectsRoot(t)
+ objectIngress := openReceivePackIngress(t, testRepo, algo)
packStream := testRepo.PackObjectsReader(t, []string{forcedID.String(), "^" + currentID.String()}, false)
t.Cleanup(func() {
_ = packStream.Close()
@@ -682,7 +686,7 @@ func TestReceivePackPredefinedRejectForcePushHookRejectsNonFastForward(t *testin
Algorithm: algo,
Refs: repo.Refs(),
ExistingObjects: repo.Objects(),
- ObjectsRoot: objectsRoot,
+ ObjectIngress: objectIngress,
Hook: receivepackhooks.RejectForcePush(),
},
)
@@ -765,7 +769,7 @@ func TestReceivePackGitPushCreatesBranch(t *testing.T) {
receiver := testgit.NewRepo(t, testgit.RepoOptions{ObjectFormat: algo, Bare: true})
repo := receiver.OpenRepository(t)
- objectsRoot := receiver.OpenObjectsRoot(t)
+ objectIngress := openReceivePackIngress(t, receiver, algo)
stdout, stderr, clientErr, serverErr := runGitPushFD(
t,
@@ -774,7 +778,7 @@ func TestReceivePackGitPushCreatesBranch(t *testing.T) {
Algorithm: algo,
Refs: repo.Refs(),
ExistingObjects: repo.Objects(),
- ObjectsRoot: objectsRoot,
+ ObjectIngress: objectIngress,
},
"push", "--porcelain", "fd::3,4/test", "refs/heads/main:refs/heads/main",
)
@@ -815,7 +819,7 @@ func TestReceivePackGitPushRefUpdateWithoutNewObjectsSucceeds(t *testing.T) {
receiver.UpdateRef(t, "refs/heads/main", commitID)
repo := receiver.OpenRepository(t)
- objectsRoot := receiver.OpenObjectsRoot(t)
+ objectIngress := openReceivePackIngress(t, receiver, algo)
stdout, stderr, clientErr, serverErr := runGitPushFD(
t,
@@ -824,7 +828,7 @@ func TestReceivePackGitPushRefUpdateWithoutNewObjectsSucceeds(t *testing.T) {
Algorithm: algo,
Refs: repo.Refs(),
ExistingObjects: repo.Objects(),
- ObjectsRoot: objectsRoot,
+ ObjectIngress: objectIngress,
},
"push", "--porcelain", "fd::3,4/test", "refs/heads/main:refs/heads/topic",
)
@@ -911,7 +915,7 @@ func TestReceivePackGitPushRejectsForcedUpdateViaHook(t *testing.T) {
receiver.UpdateRef(t, "refs/heads/main", currentID)
repo := receiver.OpenRepository(t)
- objectsRoot := receiver.OpenObjectsRoot(t)
+ objectIngress := openReceivePackIngress(t, receiver, algo)
stdout, stderr, clientErr, serverErr := runGitPushFD(
t,
@@ -920,7 +924,7 @@ func TestReceivePackGitPushRejectsForcedUpdateViaHook(t *testing.T) {
Algorithm: algo,
Refs: repo.Refs(),
ExistingObjects: repo.Objects(),
- ObjectsRoot: objectsRoot,
+ ObjectIngress: objectIngress,
Hook: receivepackhooks.RejectForcePush(),
},
"push", "--porcelain", "--force", "fd::3,4/test", "refs/heads/main:refs/heads/main",
@@ -960,6 +964,50 @@ func pktlineData(payload string) string {
return fmt.Sprintf("%04x%s", len(payload)+4, payload)
}
+func openReceivePackIngress(
+ tb testing.TB,
+ testRepo *testgit.TestRepo,
+ algo objectid.Algorithm,
+) objectstore.Quarantiner {
+ tb.Helper()
+
+ objectsRoot := testRepo.OpenObjectsRoot(tb)
+
+ err := objectsRoot.Mkdir("pack", 0o755)
+ if err != nil && !os.IsExist(err) {
+ tb.Fatalf("Mkdir(pack): %v", err)
+ }
+
+ packRoot, err := objectsRoot.OpenRoot("pack")
+ if err != nil {
+ tb.Fatalf("OpenRoot(pack): %v", err)
+ }
+
+ tb.Cleanup(func() {
+ _ = packRoot.Close()
+ })
+
+ looseStore, err := objectloose.New(objectsRoot, algo)
+ if err != nil {
+ tb.Fatalf("loose.New: %v", err)
+ }
+
+ tb.Cleanup(func() {
+ _ = looseStore.Close()
+ })
+
+ packedStore, err := objectpacked.New(packRoot, algo, objectpacked.Options{WriteRev: true})
+ if err != nil {
+ tb.Fatalf("packed.New: %v", err)
+ }
+
+ tb.Cleanup(func() {
+ _ = packedStore.Close()
+ })
+
+ return objectdual.New(looseStore, packedStore)
+}
+
type fileWriteFlusher struct {
*os.File
}