ref: af5073e78472e5e25ce893aa8c33356996ff8d09
parent: af1e21afd6885bca2b2670af09a73e0ba59b1342
author: Runxi Yu <me@runxiyu.org>
date: Sat Mar 7 21:58:28 EST 2026
protocol/v0v1/server/receivepack: Test 64K
--- a/protocol/v0v1/server/receivepack/report_status_test.go
+++ b/protocol/v0v1/server/receivepack/report_status_test.go
@@ -2,6 +2,7 @@
import (
"errors"
+ "io"
"strings"
"testing"
@@ -206,4 +207,87 @@
if !errors.Is(err, common.ErrSideBandNotEnabled) { t.Fatalf("WriteProgress error = %v, want %v", err, common.ErrSideBandNotEnabled)}
+}
+
+func TestProgressWriterDiscardsWithoutSideBand64K(t *testing.T) {+ t.Parallel()
+
+ var out bufferWriteFlusher
+
+ base := common.NewSession(strings.NewReader(""), &out, common.Options{})+ session := receivepack.NewSession(base, receivepack.Capabilities{})+
+ n, err := io.WriteString(session.ProgressWriter(), "progress line\n")
+ if err != nil {+ t.Fatalf("ProgressWriter.Write: %v", err)+ }
+
+ if n != len("progress line\n") {+ t.Fatalf("ProgressWriter.Write n = %d, want %d", n, len("progress line\n"))+ }
+
+ if out.String() != "" {+ t.Fatalf("unexpected wire output without side-band-64k: %q", out.String())+ }
+}
+
+func TestProgressWriterUsesSideBand64KWhenNegotiated(t *testing.T) {+ t.Parallel()
+
+ //nolint:thelper
+ testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) {+ t.Parallel()
+
+ var requestWire bufferWriteFlusher
+
+ requestEnc := pktline.NewEncoder(&requestWire)
+
+ err := requestEnc.WriteData([]byte(
+ objectid.Zero(algo).String() + " " + mustHexID(t, algo, "1").String() + " refs/heads/main\x00report-status side-band-64k object-format=" + algo.String() + "\n",
+ ))
+ if err != nil {+ t.Fatalf("WriteData(request): %v", err)+ }
+
+ err = requestEnc.WriteFlush()
+ if err != nil {+ t.Fatalf("WriteFlush(request): %v", err)+ }
+
+ var out bufferWriteFlusher
+
+ base := common.NewSession(strings.NewReader(requestWire.String()), &out, common.Options{+ Algorithm: algo,
+ })
+ session := receivepack.NewSession(base, receivepack.Capabilities{+ ReportStatus: true,
+ SideBand64K: true,
+ ObjectFormat: algo,
+ })
+
+ _, err = session.ReadRequest()
+ if err != nil {+ t.Fatalf("ReadRequest: %v", err)+ }
+
+ _, err = io.WriteString(session.ProgressWriter(), "remote: stage 1\r")
+ if err != nil {+ t.Fatalf("ProgressWriter.Write: %v", err)+ }
+
+ dec := sideband64k.NewDecoder(strings.NewReader(out.String()), sideband64k.ReadOptions{})+
+ frame, err := dec.ReadFrame()
+ if err != nil {+ t.Fatalf("ReadFrame(progress): %v", err)+ }
+
+ if frame.Type != sideband64k.FrameProgress {+ t.Fatalf("frame.Type = %v, want FrameProgress", frame.Type)+ }
+
+ if string(frame.Payload) != "remote: stage 1\r" {+ t.Fatalf("frame.Payload = %q, want %q", frame.Payload, "remote: stage 1\r")+ }
+ })
}
--
⑨