aboutsummaryrefslogtreecommitdiff
path: root/network/protocol/sideband64k/encoder_partial_write_test.go
blob: 97c8f762654601789210fe07f2ed0ef4c6edd2a1 (about) (plain) (blame)
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
package sideband64k_test

import (
	"errors"
	"io"
	"testing"

	"codeberg.org/lindenii/furgit/network/protocol/sideband64k"
)

func TestEncoderHandlesPartialWrites(t *testing.T) {
	t.Parallel()

	dst := &limitWriter{maxPerWrite: 2}
	enc := sideband64k.NewEncoder(dst)

	err := enc.WriteProgress([]byte("abc"))
	if err != nil {
		t.Fatalf("WriteProgress: %v", err)
	}

	err = enc.WriteFlushPacketAndFlush()
	if err != nil {
		t.Fatalf("WriteFlushPacketAndFlush: %v", err)
	}

	if got, want := dst.buf.String(), "0008\x02abc0000"; got != want {
		t.Fatalf("got %q, want %q", got, want)
	}

	if dst.flushes != 1 {
		t.Fatalf("flushes=%d, want 1", dst.flushes)
	}
}

func TestEncoderReturnsShortWrite(t *testing.T) {
	t.Parallel()

	dst := &limitWriter{shortWrite: true}
	enc := sideband64k.NewEncoder(dst)

	err := enc.WriteData([]byte("x"))
	if !errors.Is(err, io.ErrShortWrite) {
		t.Fatalf("got err %v, want io.ErrShortWrite", err)
	}
}