diff options
| author | 2026-03-07 14:24:05 +0800 | |
|---|---|---|
| committer | 2026-03-07 17:01:46 +0800 | |
| commit | 4b8d39764f9b54ea3090d0fea92a23025dbea30d (patch) | |
| tree | caa6e408c4ea625afcbb1b4aa4fb9e945f46994b /protocol/v0v1/server/advertise_test.go | |
| parent | refstore: Split files (diff) | |
| signature | No signature | |
protocol: Add v0v1 server protocol and its receivepack subprotocol
Diffstat (limited to 'protocol/v0v1/server/advertise_test.go')
| -rw-r--r-- | protocol/v0v1/server/advertise_test.go | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/protocol/v0v1/server/advertise_test.go b/protocol/v0v1/server/advertise_test.go new file mode 100644 index 00000000..91526617 --- /dev/null +++ b/protocol/v0v1/server/advertise_test.go @@ -0,0 +1,101 @@ +package server_test + +import ( + "strings" + "testing" + + "codeberg.org/lindenii/furgit/internal/testgit" + "codeberg.org/lindenii/furgit/objectid" + server "codeberg.org/lindenii/furgit/protocol/v0v1/server" +) + +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) + } + }) +} |
