Upgrade and add new testing functions
This commit is contained in:
parent
d12679df65
commit
9330ed8e74
13 changed files with 1867 additions and 130 deletions
|
|
@ -2,7 +2,12 @@ package core
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func TestNewEventsManager(t *testing.T) {
|
||||
|
|
@ -12,92 +17,171 @@ func TestNewEventsManager(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
// func TestResolveEventsManager(t *testing.T) {
|
||||
// NewEventsManager()
|
||||
// m := ResolveEventsManager()
|
||||
// if fmt.Sprintf("%T", m) != "*core.EventsManager" {
|
||||
// t.Errorf("failed testing new events manager")
|
||||
// }
|
||||
// }
|
||||
func TestResolveEventsManager(t *testing.T) {
|
||||
NewEventsManager()
|
||||
m := ResolveEventsManager()
|
||||
if fmt.Sprintf("%T", m) != "*core.EventsManager" {
|
||||
t.Errorf("failed testing resolve events manager")
|
||||
}
|
||||
}
|
||||
|
||||
// func TestEvents(t *testing.T) {
|
||||
// pwd, _ := os.Getwd()
|
||||
// const eventName1 string = "test-event-name1"
|
||||
// const eventName2 string = "test-event-name2"
|
||||
// var tmpDir string
|
||||
// if runtime.GOOS == "linux" {
|
||||
// tmpDir = t.TempDir()
|
||||
// } else {
|
||||
// tmpDir = filepath.Join(pwd, "/testingdata/tmp")
|
||||
// }
|
||||
// tmpFile1 := filepath.Join(tmpDir, uuid.NewString())
|
||||
// tmpFile2 := filepath.Join(tmpDir, uuid.NewString())
|
||||
// tmpFile3 := filepath.Join(tmpDir, uuid.NewString())
|
||||
// m := NewEventsManager()
|
||||
// m.Register(eventName1, func(event *Event, requestContext *Context) {
|
||||
// os.Create(tmpFile1)
|
||||
// f, err := os.Create(tmpFile1)
|
||||
// if err != nil {
|
||||
// t.Errorf("error testing register event: %v", err.Error())
|
||||
// }
|
||||
// f.WriteString(event.Name)
|
||||
// f.Close()
|
||||
// })
|
||||
// m.Register(eventName1, func(event *Event, requestContext *Context) {
|
||||
// os.Create(tmpFile3)
|
||||
// f, err := os.Create(tmpFile3)
|
||||
// if err != nil {
|
||||
// t.Errorf("error testing register event: %v", err.Error())
|
||||
// }
|
||||
// f.WriteString(event.Name)
|
||||
// f.Close()
|
||||
// })
|
||||
// m.Fire(&Event{Name: eventName1})
|
||||
// m.processFiredEvents()
|
||||
func TestEventsFireAndProcess(t *testing.T) {
|
||||
const eventName1 string = "test-event-name1"
|
||||
const eventName2 string = "test-event-name2"
|
||||
|
||||
// ff, err := os.Open(tmpFile1)
|
||||
// if err != nil {
|
||||
// t.Errorf("error testing register event : %v", err.Error())
|
||||
// }
|
||||
tmpDir := t.TempDir()
|
||||
tmpFile1 := filepath.Join(tmpDir, uuid.NewString())
|
||||
tmpFile2 := filepath.Join(tmpDir, uuid.NewString())
|
||||
tmpFile3 := filepath.Join(tmpDir, uuid.NewString())
|
||||
|
||||
// d, err := io.ReadAll(ff)
|
||||
// if string(d) != eventName1 {
|
||||
// t.Error("faild testing events")
|
||||
// }
|
||||
// ff.Close()
|
||||
// os.Remove(tmpFile1)
|
||||
m := NewEventsManager()
|
||||
|
||||
// ff, err = os.Open(tmpFile3)
|
||||
// if err != nil {
|
||||
// t.Errorf("error testing register event : %v", err.Error())
|
||||
// }
|
||||
// Two jobs registered on the same event must BOTH run.
|
||||
m.Register(eventName1, func(event *Event, requestContext *Context) {
|
||||
f, err := os.Create(tmpFile1)
|
||||
if err != nil {
|
||||
t.Errorf("error testing register event: %v", err.Error())
|
||||
return
|
||||
}
|
||||
f.WriteString(event.Name)
|
||||
f.Close()
|
||||
})
|
||||
m.Register(eventName1, func(event *Event, requestContext *Context) {
|
||||
f, err := os.Create(tmpFile3)
|
||||
if err != nil {
|
||||
t.Errorf("error testing register event: %v", err.Error())
|
||||
return
|
||||
}
|
||||
f.WriteString(event.Name)
|
||||
f.Close()
|
||||
})
|
||||
|
||||
// d, err = io.ReadAll(ff)
|
||||
// if string(d) != eventName1 {
|
||||
// t.Error("faild testing events")
|
||||
// }
|
||||
// ff.Close()
|
||||
// os.Remove(tmpFile3)
|
||||
if err := m.Fire(&Event{Name: eventName1}); err != nil {
|
||||
t.Fatalf("failed firing event: %v", err)
|
||||
}
|
||||
m.processFiredEvents()
|
||||
|
||||
// m.Register(eventName2, func(event *Event, requestContext *Context) {
|
||||
// f, err := os.Create(tmpFile2)
|
||||
// if err != nil {
|
||||
// t.Errorf("error testing register event: %v", err.Error())
|
||||
// }
|
||||
// f.WriteString(event.Name)
|
||||
// f.Close()
|
||||
// })
|
||||
// m.Fire(&Event{Name: eventName2})
|
||||
// m.processFiredEvents()
|
||||
for _, fp := range []string{tmpFile1, tmpFile3} {
|
||||
f, err := os.Open(fp)
|
||||
if err != nil {
|
||||
t.Errorf("error opening event file %v: %v", fp, err.Error())
|
||||
continue
|
||||
}
|
||||
d, err := io.ReadAll(f)
|
||||
if err != nil {
|
||||
t.Errorf("error reading event file %v: %v", fp, err.Error())
|
||||
}
|
||||
if string(d) != eventName1 {
|
||||
t.Errorf("failed testing events: expected %q, got %q", eventName1, string(d))
|
||||
}
|
||||
f.Close()
|
||||
}
|
||||
|
||||
// ff, err = os.Open(tmpFile2)
|
||||
// if err != nil {
|
||||
// t.Errorf("error testing register event : %v", err.Error())
|
||||
// }
|
||||
// A registered event with a distinct payload is processed independently.
|
||||
m.Register(eventName2, func(event *Event, requestContext *Context) {
|
||||
f, err := os.Create(tmpFile2)
|
||||
if err != nil {
|
||||
t.Errorf("error testing register event: %v", err.Error())
|
||||
return
|
||||
}
|
||||
f.WriteString(event.Name)
|
||||
f.Close()
|
||||
})
|
||||
if err := m.Fire(&Event{Name: eventName2}); err != nil {
|
||||
t.Fatalf("failed firing event: %v", err)
|
||||
}
|
||||
m.processFiredEvents()
|
||||
|
||||
// d, err = io.ReadAll(ff)
|
||||
// if string(d) != eventName2 {
|
||||
// t.Error("faild testing events")
|
||||
// }
|
||||
// ff.Close()
|
||||
// }
|
||||
f, err := os.Open(tmpFile2)
|
||||
if err != nil {
|
||||
t.Fatalf("error opening event file: %v", err.Error())
|
||||
}
|
||||
d, err := io.ReadAll(f)
|
||||
if err != nil {
|
||||
t.Errorf("error reading event file: %v", err.Error())
|
||||
}
|
||||
f.Close()
|
||||
if string(d) != eventName2 {
|
||||
t.Errorf("failed testing events: expected %q, got %q", eventName2, string(d))
|
||||
}
|
||||
}
|
||||
|
||||
func TestEventFireUnregistered(t *testing.T) {
|
||||
m := NewEventsManager()
|
||||
err := m.Fire(&Event{Name: "not-registered"})
|
||||
if err == nil {
|
||||
t.Errorf("expected error firing an unregistered event")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEventFireEmptyName(t *testing.T) {
|
||||
m := NewEventsManager()
|
||||
err := m.Fire(&Event{Name: ""})
|
||||
if err == nil {
|
||||
t.Errorf("expected error firing an event with an empty name")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEventRegisterEmptyNamePanics(t *testing.T) {
|
||||
m := NewEventsManager()
|
||||
defer func() {
|
||||
if r := recover(); r == nil {
|
||||
t.Errorf("expected panic registering an event with an empty name")
|
||||
}
|
||||
}()
|
||||
m.Register("", func(event *Event, requestContext *Context) {})
|
||||
}
|
||||
|
||||
func TestEventsProcessClearsFiredList(t *testing.T) {
|
||||
const eventName = "test-clear-fired"
|
||||
m := NewEventsManager()
|
||||
m.Register(eventName, func(event *Event, requestContext *Context) {})
|
||||
if err := m.Fire(&Event{Name: eventName}); err != nil {
|
||||
t.Fatalf("failed firing event: %v", err)
|
||||
}
|
||||
if len(m.firedEvents) != 1 {
|
||||
t.Fatalf("expected 1 fired event, got %d", len(m.firedEvents))
|
||||
}
|
||||
m.processFiredEvents()
|
||||
if len(m.firedEvents) != 0 {
|
||||
t.Errorf("expected fired events to be cleared after processing")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEventsDisabled(t *testing.T) {
|
||||
DisableEvents()
|
||||
defer EnableEvents()
|
||||
|
||||
const eventName = "test-disabled-event"
|
||||
m := NewEventsManager()
|
||||
m.Register(eventName, func(event *Event, requestContext *Context) {})
|
||||
// When disabled, Register is a no-op and Fire returns nil without recording.
|
||||
if len(m.eventsJobsList) != 0 {
|
||||
t.Errorf("expected no jobs registered while events are disabled")
|
||||
}
|
||||
if err := m.Fire(&Event{Name: eventName}); err != nil {
|
||||
t.Errorf("expected Fire to be a no-op while events are disabled, got: %v", err)
|
||||
}
|
||||
if len(m.firedEvents) != 0 {
|
||||
t.Errorf("expected no fired events while events are disabled")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEventsSetContextAndExecute(t *testing.T) {
|
||||
const eventName = "test-context-event"
|
||||
m := NewEventsManager()
|
||||
var receivedCtx *Context
|
||||
m.Register(eventName, func(event *Event, requestContext *Context) {
|
||||
receivedCtx = requestContext
|
||||
})
|
||||
|
||||
expected := &Context{}
|
||||
m.setContext(expected)
|
||||
if err := m.Fire(&Event{Name: eventName}); err != nil {
|
||||
t.Fatalf("failed firing event: %v", err)
|
||||
}
|
||||
m.processFiredEvents()
|
||||
if receivedCtx != expected {
|
||||
t.Errorf("expected the event job to receive the request context")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue