forked from HuaweiTech/gorouter
/
fake_event_emitter.go
67 lines (55 loc) · 1.24 KB
/
fake_event_emitter.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
package fake
import (
"github.com/cloudfoundry/dropsonde/events"
"sync"
)
type envelope struct {
Event events.Event
Origin string
}
type FakeEventEmitter struct {
ReturnError error
Messages []envelope
mutex *sync.RWMutex
Origin string
isClosed bool
}
func NewFakeEventEmitter(origin string) *FakeEventEmitter {
return &FakeEventEmitter{mutex: new(sync.RWMutex), Origin: origin}
}
func (f *FakeEventEmitter) Emit(e events.Event) error {
f.mutex.Lock()
defer f.mutex.Unlock()
if f.ReturnError != nil {
err := f.ReturnError
f.ReturnError = nil
return err
}
f.Messages = append(f.Messages, envelope{e, f.Origin})
return nil
}
func (f *FakeEventEmitter) GetMessages() (messages []envelope) {
f.mutex.Lock()
defer f.mutex.Unlock()
messages = make([]envelope, len(f.Messages))
copy(messages, f.Messages)
return
}
func (f *FakeEventEmitter) GetEvents() []events.Event {
messages := f.GetMessages()
events := []events.Event{}
for _, msg := range messages {
events = append(events, msg.Event)
}
return events
}
func (f *FakeEventEmitter) Close() {
f.mutex.Lock()
defer f.mutex.Unlock()
f.isClosed = true
}
func (f *FakeEventEmitter) IsClosed() bool {
f.mutex.RLock()
defer f.mutex.RUnlock()
return f.isClosed
}