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
}
}
|