mirror of
https://github.com/jwetzell/showbridge-go.git
synced 2026-09-10 15:39:25 +00:00
start working on startup tests for modules
This commit is contained in:
@@ -113,7 +113,6 @@ func (ns *NATSServer) Start(ctx context.Context, router common.RouteIO) error {
|
|||||||
if !natsServer.ReadyForConnections(5 * time.Second) {
|
if !natsServer.ReadyForConnections(5 * time.Second) {
|
||||||
return errors.New("nats.server failed to start")
|
return errors.New("nats.server failed to start")
|
||||||
}
|
}
|
||||||
ns.logger.Info("NATS server started", "client_url", natsServer.ClientURL())
|
|
||||||
|
|
||||||
<-ns.ctx.Done()
|
<-ns.ctx.Done()
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package module_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jwetzell/showbridge-go/internal/config"
|
"github.com/jwetzell/showbridge-go/internal/config"
|
||||||
"github.com/jwetzell/showbridge-go/internal/module"
|
"github.com/jwetzell/showbridge-go/internal/module"
|
||||||
@@ -34,6 +35,51 @@ func TestDbSqliteFromRegistry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoodDbSqlite(t *testing.T) {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
params map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "in memory db",
|
||||||
|
params: map[string]any{
|
||||||
|
"dsn": ":memory:",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
registration, ok := module.ModuleRegistry["db.sqlite"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("db.sqlite module not registered")
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleInstance, err := registration.New(config.ModuleConfig{
|
||||||
|
Id: "test",
|
||||||
|
Type: "db.sqlite",
|
||||||
|
Params: test.params,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("db.sqlite failed to create module: %s", err)
|
||||||
|
}
|
||||||
|
// TODO(jwetzell) this is kind of hacky
|
||||||
|
go func() {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
moduleInstance.Stop()
|
||||||
|
}()
|
||||||
|
err = moduleInstance.Start(t.Context(), nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("db.sqlite failed to start: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadDbSqlite(t *testing.T) {
|
func TestBadDbSqlite(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package module_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jwetzell/showbridge-go/internal/config"
|
"github.com/jwetzell/showbridge-go/internal/config"
|
||||||
"github.com/jwetzell/showbridge-go/internal/module"
|
"github.com/jwetzell/showbridge-go/internal/module"
|
||||||
@@ -34,6 +35,52 @@ func TestHTTPServerFromRegistry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoodHTTPServer(t *testing.T) {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
params map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "minimal config",
|
||||||
|
params: map[string]any{
|
||||||
|
"port": 8000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
registration, ok := module.ModuleRegistry["http.server"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("http.server module not registered")
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleInstance, err := registration.New(config.ModuleConfig{
|
||||||
|
Id: "test",
|
||||||
|
Type: "http.server",
|
||||||
|
Params: test.params,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("http.server failed to create module: %s", err)
|
||||||
|
}
|
||||||
|
// TODO(jwetzell) this is kind of hacky
|
||||||
|
go func() {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
moduleInstance.Stop()
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = moduleInstance.Start(t.Context(), nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("http.server failed to start: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadHTTPServer(t *testing.T) {
|
func TestBadHTTPServer(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package module_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jwetzell/showbridge-go/internal/config"
|
"github.com/jwetzell/showbridge-go/internal/config"
|
||||||
"github.com/jwetzell/showbridge-go/internal/module"
|
"github.com/jwetzell/showbridge-go/internal/module"
|
||||||
@@ -35,6 +36,52 @@ func TestNATSServerFromRegistry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoodNATSServer(t *testing.T) {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
params map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "minimal config",
|
||||||
|
params: map[string]any{
|
||||||
|
"port": 4222,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
registration, ok := module.ModuleRegistry["nats.server"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("nats.server module not registered")
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleInstance, err := registration.New(config.ModuleConfig{
|
||||||
|
Id: "test",
|
||||||
|
Type: "nats.server",
|
||||||
|
Params: test.params,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("nats.server failed to create module: %s", err)
|
||||||
|
}
|
||||||
|
// TODO(jwetzell) this is kind of hacky
|
||||||
|
go func() {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
moduleInstance.Stop()
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = moduleInstance.Start(t.Context(), nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("nats.server failed to start: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadNATSServer(t *testing.T) {
|
func TestBadNATSServer(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package module_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jwetzell/showbridge-go/internal/config"
|
"github.com/jwetzell/showbridge-go/internal/config"
|
||||||
"github.com/jwetzell/showbridge-go/internal/module"
|
"github.com/jwetzell/showbridge-go/internal/module"
|
||||||
@@ -35,6 +36,52 @@ func TestTCPServerFromRegistry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoodTCPServer(t *testing.T) {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
params map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "minimal config",
|
||||||
|
params: map[string]any{
|
||||||
|
"port": 8000,
|
||||||
|
"framing": "LF",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
registration, ok := module.ModuleRegistry["net.tcp.server"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("net.tcp.server module not registered")
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleInstance, err := registration.New(config.ModuleConfig{
|
||||||
|
Id: "test",
|
||||||
|
Type: "net.tcp.server",
|
||||||
|
Params: test.params,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("net.tcp.server failed to create module: %s", err)
|
||||||
|
}
|
||||||
|
// TODO(jwetzell) this is kind of hacky
|
||||||
|
go func() {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
moduleInstance.Stop()
|
||||||
|
}()
|
||||||
|
err = moduleInstance.Start(t.Context(), nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("net.tcp.server failed to start: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadTCPServer(t *testing.T) {
|
func TestBadTCPServer(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package module_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jwetzell/showbridge-go/internal/config"
|
"github.com/jwetzell/showbridge-go/internal/config"
|
||||||
"github.com/jwetzell/showbridge-go/internal/module"
|
"github.com/jwetzell/showbridge-go/internal/module"
|
||||||
@@ -34,6 +35,51 @@ func TestTimeIntervalFromRegistry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoodTimeInterval(t *testing.T) {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
params map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "minimal config",
|
||||||
|
params: map[string]any{
|
||||||
|
"duration": 1000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
registration, ok := module.ModuleRegistry["time.interval"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("time.interval module not registered")
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleInstance, err := registration.New(config.ModuleConfig{
|
||||||
|
Id: "test",
|
||||||
|
Type: "time.interval",
|
||||||
|
Params: test.params,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("time.interval failed to create module: %s", err)
|
||||||
|
}
|
||||||
|
// TODO(jwetzell) this is kind of hacky
|
||||||
|
go func() {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
moduleInstance.Stop()
|
||||||
|
}()
|
||||||
|
err = moduleInstance.Start(t.Context(), nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("time.interval failed to start: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadTimeInterval(t *testing.T) {
|
func TestBadTimeInterval(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package module_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jwetzell/showbridge-go/internal/config"
|
"github.com/jwetzell/showbridge-go/internal/config"
|
||||||
"github.com/jwetzell/showbridge-go/internal/module"
|
"github.com/jwetzell/showbridge-go/internal/module"
|
||||||
@@ -34,6 +35,51 @@ func TestTimeTimerFromRegistry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoodTimeTimer(t *testing.T) {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
params map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "minimal config",
|
||||||
|
params: map[string]any{
|
||||||
|
"duration": 2000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
registration, ok := module.ModuleRegistry["time.timer"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("time.timer module not registered")
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleInstance, err := registration.New(config.ModuleConfig{
|
||||||
|
Id: "test",
|
||||||
|
Type: "time.timer",
|
||||||
|
Params: test.params,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("time.timer failed to create module: %s", err)
|
||||||
|
}
|
||||||
|
// TODO(jwetzell) this is kind of hacky
|
||||||
|
go func() {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
moduleInstance.Stop()
|
||||||
|
}()
|
||||||
|
err = moduleInstance.Start(t.Context(), nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("time.timer failed to start: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadTimeTimer(t *testing.T) {
|
func TestBadTimeTimer(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package module_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jwetzell/showbridge-go/internal/config"
|
"github.com/jwetzell/showbridge-go/internal/config"
|
||||||
"github.com/jwetzell/showbridge-go/internal/module"
|
"github.com/jwetzell/showbridge-go/internal/module"
|
||||||
@@ -36,6 +37,53 @@ func TestUDPClientFromRegistry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoodUDPClient(t *testing.T) {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
params map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "minimal config",
|
||||||
|
params: map[string]any{
|
||||||
|
"host": "localhost",
|
||||||
|
"port": 8000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
registration, ok := module.ModuleRegistry["net.udp.client"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("net.udp.client module not registered")
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleInstance, err := registration.New(config.ModuleConfig{
|
||||||
|
Id: "test",
|
||||||
|
Type: "net.udp.client",
|
||||||
|
Params: test.params,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("net.udp.client failed to create module: %s", err)
|
||||||
|
}
|
||||||
|
// TODO(jwetzell) this is kind of hacky
|
||||||
|
go func() {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
moduleInstance.Stop()
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = moduleInstance.Start(t.Context(), nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("net.udp.client failed to start: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadUDPClient(t *testing.T) {
|
func TestBadUDPClient(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package module_test
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/jwetzell/showbridge-go/internal/config"
|
"github.com/jwetzell/showbridge-go/internal/config"
|
||||||
"github.com/jwetzell/showbridge-go/internal/module"
|
"github.com/jwetzell/showbridge-go/internal/module"
|
||||||
@@ -34,6 +35,52 @@ func TestUDPServerFromRegistry(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGoodUDPServer(t *testing.T) {
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
params map[string]any
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "minimal config",
|
||||||
|
params: map[string]any{
|
||||||
|
"port": 8000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range testCases {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
|
||||||
|
registration, ok := module.ModuleRegistry["net.udp.server"]
|
||||||
|
if !ok {
|
||||||
|
t.Fatalf("net.udp.server module not registered")
|
||||||
|
}
|
||||||
|
|
||||||
|
moduleInstance, err := registration.New(config.ModuleConfig{
|
||||||
|
Id: "test",
|
||||||
|
Type: "net.udp.server",
|
||||||
|
Params: test.params,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("net.udp.server failed to create module: %s", err)
|
||||||
|
}
|
||||||
|
// TODO(jwetzell) this is kind of hacky
|
||||||
|
go func() {
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
moduleInstance.Stop()
|
||||||
|
}()
|
||||||
|
|
||||||
|
err = moduleInstance.Start(t.Context(), nil)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("net.udp.server failed to start: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestBadUDPServer(t *testing.T) {
|
func TestBadUDPServer(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
@@ -242,16 +242,6 @@ func TestBadDbQuery(t *testing.T) {
|
|||||||
wrappedPayloadModules: map[string]common.Module{},
|
wrappedPayloadModules: map[string]common.Module{},
|
||||||
errorString: "db.query unable to find module with id: test",
|
errorString: "db.query unable to find module with id: test",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "module not found in context",
|
|
||||||
payload: test.TestStruct{Data: "hello"},
|
|
||||||
params: map[string]any{
|
|
||||||
"module": "test",
|
|
||||||
"query": "select * from test;",
|
|
||||||
},
|
|
||||||
wrappedPayloadModules: map[string]common.Module{},
|
|
||||||
errorString: "db.query unable to find module with id: test",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "module not a DatabseModule",
|
name: "module not a DatabseModule",
|
||||||
payload: test.TestStruct{Data: "hello"},
|
payload: test.TestStruct{Data: "hello"},
|
||||||
|
|||||||
Reference in New Issue
Block a user