2019-01-02 22:33:56 +00:00
|
|
|
package event
|
|
|
|
|
|
|
|
import (
|
2020-02-10 22:09:24 +00:00
|
|
|
"git.openprivacy.ca/openprivacy/log"
|
2019-01-02 22:33:56 +00:00
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Most basic Manager Test, Initialize, Subscribe, Publish, Receive
|
|
|
|
func TestEventManager(t *testing.T) {
|
2019-06-05 20:40:55 +00:00
|
|
|
eventManager := NewEventManager()
|
2019-01-02 22:33:56 +00:00
|
|
|
|
|
|
|
// We need to make this buffer at least 1, otherwise we will log an error!
|
2022-04-14 20:18:08 +00:00
|
|
|
simpleQueue := NewQueue()
|
2019-08-14 20:56:45 +00:00
|
|
|
eventManager.Subscribe("TEST", simpleQueue)
|
2019-01-21 18:47:07 +00:00
|
|
|
eventManager.Publish(Event{EventType: "TEST", Data: map[Field]string{"Value": "Hello World"}})
|
2019-01-02 22:33:56 +00:00
|
|
|
|
2022-04-14 20:56:24 +00:00
|
|
|
event := simpleQueue.Next()
|
2019-01-04 21:44:21 +00:00
|
|
|
if event.EventType == "TEST" && event.Data["Value"] == "Hello World" {
|
2019-01-02 22:33:56 +00:00
|
|
|
|
|
|
|
} else {
|
|
|
|
t.Errorf("Received Invalid Event")
|
|
|
|
}
|
|
|
|
|
|
|
|
eventManager.Shutdown()
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestEventManagerMultiple(t *testing.T) {
|
|
|
|
log.SetLevel(log.LevelDebug)
|
2019-06-05 20:40:55 +00:00
|
|
|
eventManager := NewEventManager()
|
2019-01-02 22:33:56 +00:00
|
|
|
|
2019-08-14 20:56:45 +00:00
|
|
|
groupEventQueue := NewQueue()
|
|
|
|
peerEventQueue := NewQueue()
|
|
|
|
allEventQueue := NewQueue()
|
2019-01-02 22:33:56 +00:00
|
|
|
|
2019-08-14 20:56:45 +00:00
|
|
|
eventManager.Subscribe("PeerEvent", peerEventQueue)
|
|
|
|
eventManager.Subscribe("GroupEvent", groupEventQueue)
|
|
|
|
eventManager.Subscribe("PeerEvent", allEventQueue)
|
|
|
|
eventManager.Subscribe("GroupEvent", allEventQueue)
|
|
|
|
eventManager.Subscribe("ErrorEvent", allEventQueue)
|
2019-01-02 22:33:56 +00:00
|
|
|
|
2019-01-21 18:47:07 +00:00
|
|
|
eventManager.Publish(Event{EventType: "PeerEvent", Data: map[Field]string{"Value": "Hello World Peer"}})
|
|
|
|
eventManager.Publish(Event{EventType: "GroupEvent", Data: map[Field]string{"Value": "Hello World Group"}})
|
|
|
|
eventManager.Publish(Event{EventType: "PeerEvent", Data: map[Field]string{"Value": "Hello World Peer"}})
|
|
|
|
eventManager.Publish(Event{EventType: "ErrorEvent", Data: map[Field]string{"Value": "Hello World Error"}})
|
2023-04-17 19:05:02 +00:00
|
|
|
eventManager.Publish(Event{EventType: "NobodyIsSubscribedToThisEvent", Data: map[Field]string{"Value": "No one should see this!"}})
|
2019-01-02 22:33:56 +00:00
|
|
|
|
|
|
|
assertLength := func(len int, expected int, label string) {
|
|
|
|
if len != expected {
|
|
|
|
t.Errorf("Expected %s to be %v was %v", label, expected, len)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
time.Sleep(time.Second)
|
|
|
|
|
2019-08-14 20:56:45 +00:00
|
|
|
assertLength(groupEventQueue.Len(), 1, "Group Event Queue Length")
|
|
|
|
assertLength(peerEventQueue.Len(), 2, "Peer Event Queue Length")
|
|
|
|
assertLength(allEventQueue.Len(), 4, "All Event Queue Length")
|
2019-01-02 22:33:56 +00:00
|
|
|
|
2019-01-04 21:44:21 +00:00
|
|
|
checkEvent := func(eventType Type, expected Type, label string) {
|
2019-01-02 22:33:56 +00:00
|
|
|
if eventType != expected {
|
|
|
|
t.Errorf("Expected %s to be %v was %v", label, expected, eventType)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
event := groupEventQueue.Next()
|
|
|
|
checkEvent(event.EventType, "GroupEvent", "First Group Event")
|
|
|
|
|
|
|
|
event = peerEventQueue.Next()
|
|
|
|
checkEvent(event.EventType, "PeerEvent", "First Peer Event")
|
|
|
|
event = peerEventQueue.Next()
|
|
|
|
checkEvent(event.EventType, "PeerEvent", "Second Peer Event")
|
|
|
|
|
|
|
|
event = allEventQueue.Next()
|
|
|
|
checkEvent(event.EventType, "PeerEvent", "ALL: First Peer Event")
|
|
|
|
event = allEventQueue.Next()
|
|
|
|
checkEvent(event.EventType, "GroupEvent", "ALL: First Group Event")
|
|
|
|
event = allEventQueue.Next()
|
|
|
|
checkEvent(event.EventType, "PeerEvent", "ALL: Second Peer Event")
|
|
|
|
event = allEventQueue.Next()
|
|
|
|
checkEvent(event.EventType, "ErrorEvent", "ALL: First Error Event")
|
|
|
|
|
|
|
|
eventManager.Shutdown()
|
|
|
|
groupEventQueue.Shutdown()
|
|
|
|
peerEventQueue.Shutdown()
|
|
|
|
allEventQueue.Shutdown()
|
|
|
|
|
|
|
|
// Reading from a closed queue should result in an instant return and an empty event
|
|
|
|
event = groupEventQueue.Next()
|
|
|
|
checkEvent(event.EventType, "", "Test Next() on Empty Queue")
|
|
|
|
}
|