This repository has been archived by the owner on Nov 7, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathnotify_test.go
93 lines (78 loc) · 1.83 KB
/
notify_test.go
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package spoe
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestNotify(t *testing.T) {
data := make([]byte, maxFrameSize)
f := Frame{
data: data,
originalData: data,
}
m := 0
n, err := encodeString(f.data[m:], "message-1")
m += n
f.data[m] = 2
m++
n, err = encodeKV(f.data[m:], "key-1", "value1")
require.NoError(t, err)
m += n
n, err = encodeKV(f.data[m:], "key-2", 360)
require.NoError(t, err)
m += n
n, err = encodeString(f.data[m:], "message-2")
m += n
f.data[m] = 2
m++
n, err = encodeKV(f.data[m:], "key2-1", "value21")
require.NoError(t, err)
m += n
n, err = encodeKV(f.data[m:], "key2-2", 362)
require.NoError(t, err)
m += n
f.data = f.data[:m]
handlerCalled := false
actions := []Action{
ActionSetVar{
Name: "set-var-1",
Scope: VarScopeSession,
Value: make([]byte, 1000),
},
ActionSetVar{
Name: "set-var-2",
Scope: VarScopeSession,
Value: make([]byte, 1500),
},
}
conn := &conn{
frameSize: maxFrameSize,
handler: func(msgs *MessageIterator) ([]Action, error) {
ok := msgs.Next()
require.True(t, ok)
require.Equal(t, "message-1", msgs.Message.Name)
require.Equal(t, 2, msgs.Message.Args.Count())
args := msgs.Message.Args.Map()
require.Equal(t, map[string]interface{}{
"key-1": "value1",
"key-2": 360,
}, args)
ok = msgs.Next()
require.True(t, ok)
require.Equal(t, "message-2", msgs.Message.Name)
require.Equal(t, 2, msgs.Message.Args.Count())
args = msgs.Message.Args.Map()
require.Equal(t, map[string]interface{}{
"key2-1": "value21",
"key2-2": 362,
}, args)
require.False(t, msgs.Next())
require.NoError(t, msgs.Error())
handlerCalled = true
return actions, nil
},
}
out := make(chan Frame, 1)
err = conn.handleNotify(f, out)
require.Nil(t, err)
require.True(t, handlerCalled)
}