aboutsummaryrefslogtreecommitdiff
path: root/network/protocol/v0v1/server/advertise_test.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-25 16:22:03 +0000
committerGravatar Runxi Yu2026-03-25 16:22:03 +0000
commit311edcd50f3a84f4b860bde3cb887451d74eaa11 (patch)
treebe7aa5e9a51e636358f33b1c90637b5024b70dc3 /network/protocol/v0v1/server/advertise_test.go
parentREADME: Split off contrib, benchmarks, remove history for now I guess, etc. (diff)
signatureNo signature
network/protocol: Rename from protocol v0.1.110
Diffstat (limited to 'network/protocol/v0v1/server/advertise_test.go')
-rw-r--r--network/protocol/v0v1/server/advertise_test.go101
1 files changed, 101 insertions, 0 deletions
diff --git a/network/protocol/v0v1/server/advertise_test.go b/network/protocol/v0v1/server/advertise_test.go
new file mode 100644
index 00000000..3aac7056
--- /dev/null
+++ b/network/protocol/v0v1/server/advertise_test.go
@@ -0,0 +1,101 @@
+package server_test
+
+import (
+ "strings"
+ "testing"
+
+ "codeberg.org/lindenii/furgit/internal/testgit"
+ server "codeberg.org/lindenii/furgit/network/protocol/v0v1/server"
+ objectid "codeberg.org/lindenii/furgit/object/id"
+)
+
+func TestAdvertiseRefsWritesVersionOneHeadCapsAndPeeledTag(t *testing.T) {
+ t.Parallel()
+
+ //nolint:thelper
+ testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) {
+ t.Parallel()
+
+ headID := mustHexID(t, algo, "1")
+ tagID := mustHexID(t, algo, "2")
+ peeledID := mustHexID(t, algo, "3")
+ mainID := mustHexID(t, algo, "4")
+
+ var out bufferWriteFlusher
+
+ session := server.NewSession(
+ strings.NewReader(""),
+ &out,
+ server.Options{
+ Version: server.Version1,
+ Algorithm: algo,
+ },
+ )
+
+ err := session.AdvertiseRefs(server.Advertisement{
+ Refs: []server.AdvertisedRef{
+ {Name: "refs/tags/v1", ID: tagID, Peeled: &peeledID},
+ {Name: "HEAD", ID: headID},
+ {Name: "refs/heads/main", ID: mainID},
+ },
+ }, []string{
+ "report-status",
+ "delete-refs",
+ "object-format=" + algo.String(),
+ "agent=furgit-test/1",
+ })
+ if err != nil {
+ t.Fatalf("AdvertiseRefs: %v", err)
+ }
+
+ got := out.String()
+ wantParts := []string{
+ "000eversion 1\n",
+ headID.String() + " HEAD\x00report-status delete-refs object-format=" + algo.String() + " agent=furgit-test/1\n",
+ mainID.String() + " refs/heads/main\n",
+ tagID.String() + " refs/tags/v1\n",
+ peeledID.String() + " refs/tags/v1^{}\n",
+ "0000",
+ }
+
+ for _, part := range wantParts {
+ if !strings.Contains(got, part) {
+ t.Fatalf("advertisement missing %q in %q", part, got)
+ }
+ }
+ })
+}
+
+func TestAdvertiseRefsWritesNoRefsCapabilitiesLine(t *testing.T) {
+ t.Parallel()
+
+ //nolint:thelper
+ testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) {
+ t.Parallel()
+
+ var out bufferWriteFlusher
+
+ session := server.NewSession(
+ strings.NewReader(""),
+ &out,
+ server.Options{
+ Algorithm: algo,
+ },
+ )
+
+ err := session.AdvertiseRefs(server.Advertisement{}, []string{
+ "report-status",
+ "object-format=" + algo.String(),
+ })
+ if err != nil {
+ t.Fatalf("AdvertiseRefs: %v", err)
+ }
+
+ got := out.String()
+
+ want := objectid.Zero(algo).String() + " capabilities^{}\x00report-status object-format=" + algo.String() + "\n"
+ if !strings.Contains(got, want) {
+ t.Fatalf("unexpected no-refs advertisement %q", got)
+ }
+ })
+}