summaryrefslogtreecommitdiff
path: root/internal/packet/framer_test.go
blob: 41a4396e410f6bb3ca85e3c56443a7d170f74c02 (plain)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package packet

import (
	"context"
	"io"
	"testing"
	"time"
)

type TestIoReader struct {
	data []byte
	len  int
}

func (r *TestIoReader) Read(data []byte) (int, error) {
	if len(r.data) <= r.len {
		// log.Println("RETURNING EOF:", len(data), r.len)
		return 0, io.EOF
	}
	n := copy(data, r.data[r.len:])
	r.len += n
	// log.Println("RETURNING N:", len(r.data), r.len)
	return n, nil
}

func (r *TestIoReader) start(msg TypedMessage, t *testing.T) {
	encoder, err := NewMsgPackEncoder(msg)
	if err != nil {
		t.Errorf("encoding error: %v", err)
		return
	}
	r.data = NewPacket(encoder).data
	// log.Println("LEN:", len(r.data))
}

func TestPacketFramer(t *testing.T) {
	reader := &TestIoReader{}

	// Long msg to test multiple
	msg := EkoMessage{"Testing FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting FramerTesting Framer"}
	reader.start(&msg, t)

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	out, outErr := RunFramer(ctx, reader)

	var message EkoMessage
	select {
	case packet := <-out:
		if err := packet.DecodePayload(&message); err != nil {
			t.Errorf("error decoding response: %v", err)
			return
		}
		if msg.Message != message.Message {
			t.Errorf("%v != %v", msg.Message, message.Message)
			return
		}

	case err := <-outErr:
		t.Errorf("error receiving packet: %v", err)
		return
	}
}