forked from grafana/grafana
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbroadcast_test.go
87 lines (75 loc) · 2.37 KB
/
broadcast_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
package features
import (
"context"
"encoding/json"
"testing"
"github.com/golang/mock/gomock"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/services/live/model"
"github.com/grafana/grafana/pkg/services/user"
)
func TestNewBroadcastRunner(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
d := NewMockLiveMessageStore(mockCtrl)
br := NewBroadcastRunner(d)
require.NotNil(t, br)
}
func TestBroadcastRunner_OnSubscribe(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
mockDispatcher := NewMockLiveMessageStore(mockCtrl)
channel := "stream/channel/test"
data := json.RawMessage(`{}`)
mockDispatcher.EXPECT().GetLiveMessage(&model.GetLiveMessageQuery{
OrgID: 1,
Channel: channel,
}).DoAndReturn(func(query *model.GetLiveMessageQuery) (model.LiveMessage, bool, error) {
return model.LiveMessage{
Data: data,
}, true, nil
}).Times(1)
br := NewBroadcastRunner(mockDispatcher)
require.NotNil(t, br)
handler, err := br.GetHandlerForPath("test")
require.NoError(t, err)
reply, status, err := handler.OnSubscribe(
context.Background(),
&user.SignedInUser{OrgID: 1, UserID: 2},
model.SubscribeEvent{Channel: channel, Path: "test"},
)
require.NoError(t, err)
require.Equal(t, backend.SubscribeStreamStatusOK, status)
require.Equal(t, data, reply.Data)
require.True(t, reply.Presence)
require.True(t, reply.JoinLeave)
require.False(t, reply.Recover)
}
func TestBroadcastRunner_OnPublish(t *testing.T) {
mockCtrl := gomock.NewController(t)
defer mockCtrl.Finish()
mockDispatcher := NewMockLiveMessageStore(mockCtrl)
channel := "stream/channel/test"
data := json.RawMessage(`{}`)
var orgID int64 = 1
mockDispatcher.EXPECT().SaveLiveMessage(&model.SaveLiveMessageQuery{
OrgID: orgID,
Channel: channel,
Data: data,
}).DoAndReturn(func(query *model.SaveLiveMessageQuery) error {
return nil
}).Times(1)
br := NewBroadcastRunner(mockDispatcher)
require.NotNil(t, br)
handler, err := br.GetHandlerForPath("test")
require.NoError(t, err)
reply, status, err := handler.OnPublish(
context.Background(),
&user.SignedInUser{OrgID: 1, UserID: 2},
model.PublishEvent{Channel: channel, Path: "test", Data: data},
)
require.NoError(t, err)
require.Equal(t, backend.PublishStreamStatusOK, status)
require.Equal(t, data, reply.Data)
}