133728e barerepo 1mo
1
package pktline
133728e barerepo 1mo
3
import (
133728e barerepo 1mo
4
"bytes"
133728e barerepo 1mo
5
"errors"
133728e barerepo 1mo
6
"strings"
133728e barerepo 1mo
7
"testing"
133728e barerepo 1mo
10
func TestRoundTrip(t *testing.T) {
133728e barerepo 1mo
11
var buf bytes.Buffer
133728e barerepo 1mo
12
w := NewWriter(&buf)
133728e barerepo 1mo
13
for _, s := range []string{"version=1", "ok refs/proposals/47", strings.Repeat("x", 1000)} {
133728e barerepo 1mo
14
if err := w.Write(s); err != nil {
133728e barerepo 1mo
15
t.Fatal(err)
133728e barerepo 1mo
18
if err := w.Flush(); err != nil {
133728e barerepo 1mo
19
t.Fatal(err)
133728e barerepo 1mo
21
r := NewReader(&buf)
133728e barerepo 1mo
22
for _, want := range []string{"version=1", "ok refs/proposals/47", strings.Repeat("x", 1000)} {
133728e barerepo 1mo
23
got, err := r.Read()
133728e barerepo 1mo
24
if err != nil || got != want {
133728e barerepo 1mo
25
t.Fatalf("Read = %q, %v; want %q", got, err, want)
133728e barerepo 1mo
28
if _, err := r.Read(); !errors.Is(err, ErrFlush) {
133728e barerepo 1mo
29
t.Errorf("expected a flush packet, got %v", err)
133728e barerepo 1mo
33
// The exact framing matters: git is on the other end of it.
133728e barerepo 1mo
34
func TestFraming(t *testing.T) {
133728e barerepo 1mo
35
var buf bytes.Buffer
133728e barerepo 1mo
36
NewWriter(&buf).Write("a")
133728e barerepo 1mo
37
if got := buf.String(); got != "0006a\n" {
133728e barerepo 1mo
38
t.Errorf("wrote %q, want %q", got, "0006a\n")
133728e barerepo 1mo
42
func TestReadRejectsGarbage(t *testing.T) {
133728e barerepo 1mo
43
for _, in := range []string{"", "zzzz", "0003", "0010short"} {
133728e barerepo 1mo
44
if _, err := NewReader(strings.NewReader(in)).Read(); err == nil {
133728e barerepo 1mo
45
t.Errorf("Read(%q) returned no error", in)