package pktline import ( "bytes" "errors" "strings" "testing" ) func TestRoundTrip(t *testing.T) { var buf bytes.Buffer w := NewWriter(&buf) for _, s := range []string{"version=1", "ok refs/proposals/47", strings.Repeat("x", 1000)} { if err := w.Write(s); err != nil { t.Fatal(err) } } if err := w.Flush(); err != nil { t.Fatal(err) } r := NewReader(&buf) for _, want := range []string{"version=1", "ok refs/proposals/47", strings.Repeat("x", 1000)} { got, err := r.Read() if err != nil || got != want { t.Fatalf("Read = %q, %v; want %q", got, err, want) } } if _, err := r.Read(); !errors.Is(err, ErrFlush) { t.Errorf("expected a flush packet, got %v", err) } } // The exact framing matters: git is on the other end of it. func TestFraming(t *testing.T) { var buf bytes.Buffer NewWriter(&buf).Write("a") if got := buf.String(); got != "0006a\n" { t.Errorf("wrote %q, want %q", got, "0006a\n") } } func TestReadRejectsGarbage(t *testing.T) { for _, in := range []string{"", "zzzz", "0003", "0010short"} { if _, err := NewReader(strings.NewReader(in)).Read(); err == nil { t.Errorf("Read(%q) returned no error", in) } } }