shithub: furgit

ref: 27ef9a7e1f2589d1a0eeee4cd6d36d1926989cf2
dir: /format/sideband64k/decoder_resync_after_over_max_data_test.go/

View raw version
package sideband64k_test

import (
	"bufio"
	"bytes"
	"errors"
	"testing"

	"codeberg.org/lindenii/furgit/format/sideband64k"
)

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

	var b bytes.Buffer

	bw := bufio.NewWriter(&b)
	enc := sideband64k.NewEncoder(bw)

	err := enc.WriteData([]byte("abcd"))
	if err != nil {
		t.Fatalf("WriteData #1: %v", err)
	}

	err = enc.WriteData([]byte("z"))
	if err != nil {
		t.Fatalf("WriteData #2: %v", err)
	}

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

	dec := sideband64k.NewDecoder(bytes.NewReader(b.Bytes()), sideband64k.ReadOptions{})
	dec.SetMaxData(1)

	_, err = dec.ReadFrame()
	if !errors.Is(err, sideband64k.ErrTooLarge) {
		t.Fatalf("got err %v, want ErrTooLarge", err)
	}

	f, err := dec.ReadFrame()
	if err != nil {
		t.Fatalf("ReadFrame #2: %v", err)
	}

	if f.Type != sideband64k.FrameData || string(f.Payload) != "z" {
		t.Fatalf("got frame %#v, want data z", f)
	}
}