Skip to content

Commit 66549b0

Browse files
committed
测试resource event
1 parent 4770d2b commit 66549b0

File tree

8 files changed

+187
-4
lines changed

8 files changed

+187
-4
lines changed

bus/broker/mock/mock.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package broker
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/infraboard/mcube/bus"
7+
"github.com/infraboard/mcube/bus/event"
8+
)
9+
10+
// NewBroker todo
11+
func NewBroker() bus.Publisher {
12+
return &mockBroker{}
13+
}
14+
15+
type mockBroker struct {
16+
}
17+
18+
func (m *mockBroker) Pub(topic string, e *event.Event) error {
19+
fmt.Println(topic, e)
20+
return nil
21+
}

bus/event/type.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
//go:generate mcube enum -m
2+
13
package event
24

35
const (
4-
// OperateEventType (operate_event) 资源操作事件
6+
// OperateEventType (operate) 资源操作事件
57
OperateEventType Type = iota
68
// AlertEventType (alert) 告警事件
79
AlertEventType

bus/event/type_generate.go

Lines changed: 66 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

http/response/event.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,29 @@ import (
77
// ResourceEvent 资源事件
88
type ResourceEvent interface {
99
ResourceType() string
10+
ResourceAction() string
11+
1012
ResourceUUID() string
1113
ResourceDomain() string
1214
ResourceNamespace() string
1315
ResourceName() string
14-
ResourceAction() string
1516
ResourceData() interface{}
1617
}
1718

18-
func newEvent(re ResourceEvent) *event.Event {
19+
func newResourceEvent(re ResourceEvent) *event.Event {
1920
e := event.NewEvent()
2021
e.Label["domain"] = re.ResourceDomain()
2122
e.Label["namespace"] = re.ResourceNamespace()
23+
e.Type = event.OperateEventType
24+
25+
body := &event.OperateEvent{
26+
ResourceType: re.ResourceType(),
27+
ResourceUUID: re.ResourceUUID(),
28+
ResourceName: re.ResourceName(),
29+
Action: re.ResourceAction(),
30+
Data: re.ResourceData(),
31+
}
32+
e.Body = body
33+
2234
return e
2335
}

http/response/reporter.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ func sendEvent(re ResourceEvent) {
3535
return
3636
}
3737

38-
if err := eReporter.Pub("xxx", newEvent(re)); err != nil {
38+
e := newResourceEvent(re)
39+
if err := eReporter.Pub(e.Type.String(), e); err != nil {
3940
getLog().Errorf("send event error, %s", err)
4041
return
4142
}

http/response/send.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,10 @@ func Success(w http.ResponseWriter, data interface{}) {
8080

8181
w.WriteHeader(http.StatusOK)
8282
w.Write(respBytes)
83+
84+
// 发送事件
85+
if re, ok := data.(ResourceEvent); HasEventReporter() && ok {
86+
sendEvent(re)
87+
}
8388
return
8489
}

http/router/entry.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ func (e *Entry) AddLabel(labels ...*Label) EntryDecorator {
3939
return e
4040
}
4141

42+
// GetLableValue 获取Lable的值
43+
func (e *Entry) GetLableValue(key string) string {
44+
v, ok := e.Labels[key]
45+
if ok {
46+
return v
47+
}
48+
return ""
49+
}
50+
4251
// EnableAuth 启动身份验证
4352
func (e *Entry) EnableAuth() EntryDecorator {
4453
e.AuthEnable = true

http/router/httprouter/httprouter_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import (
55
"net/http/httptest"
66
"testing"
77

8+
broker "github.com/infraboard/mcube/bus/broker/mock"
89
"github.com/infraboard/mcube/exception"
910
"github.com/infraboard/mcube/http/context"
11+
"github.com/infraboard/mcube/http/label"
1012
"github.com/infraboard/mcube/http/mock"
1113
"github.com/infraboard/mcube/http/response"
1214
"github.com/infraboard/mcube/http/router"
@@ -40,6 +42,56 @@ func WithContextHandler(w http.ResponseWriter, r *http.Request) {
4042
return
4143
}
4244

45+
func ResourceEventHandler(w http.ResponseWriter, r *http.Request) {
46+
rctx := context.GetContext(r)
47+
48+
if rctx.Entry == nil {
49+
response.Failed(w, exception.NewBadRequest("no entry"))
50+
}
51+
52+
data := &mockResourceEvent{entry: rctx.Entry}
53+
response.Success(w, data)
54+
return
55+
}
56+
57+
type mockResourceEvent struct {
58+
entry *router.Entry
59+
}
60+
61+
func (mre *mockResourceEvent) ResourceType() string {
62+
if mre.entry == nil {
63+
return ""
64+
}
65+
return mre.entry.Resource
66+
}
67+
68+
func (mre *mockResourceEvent) ResourceAction() string {
69+
if mre.entry == nil {
70+
return ""
71+
}
72+
return mre.entry.GetLableValue(label.ActionLableKey)
73+
}
74+
75+
func (mre *mockResourceEvent) ResourceUUID() string {
76+
return "mock-resource-event"
77+
}
78+
79+
func (mre *mockResourceEvent) ResourceDomain() string {
80+
return "mock-domain"
81+
}
82+
83+
func (mre *mockResourceEvent) ResourceNamespace() string {
84+
return "mock-namespace"
85+
}
86+
87+
func (mre *mockResourceEvent) ResourceName() string {
88+
return "mock-name"
89+
}
90+
91+
func (mre *mockResourceEvent) ResourceData() interface{} {
92+
return nil
93+
}
94+
4395
func TestBase(t *testing.T) {
4496
should := assert.New(t)
4597

@@ -166,3 +218,18 @@ func TestAPIRootOrderOK(t *testing.T) {
166218
should.Equal("/test3", es.Items[2].Path)
167219
}
168220
}
221+
222+
func TestResourceEventOk(t *testing.T) {
223+
should := assert.New(t)
224+
225+
response.SetEventReporter(broker.NewBroker())
226+
227+
r := httprouter.New()
228+
req, _ := http.NewRequest("GET", "/", nil)
229+
w := httptest.NewRecorder()
230+
231+
r.Handle("GET", "/", ResourceEventHandler)
232+
r.ServeHTTP(w, req)
233+
234+
should.Equal(200, w.Code)
235+
}

0 commit comments

Comments
 (0)