1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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)
}
})
}
|