make listener configurable - and use for delaying client access in tests
This commit is contained in:
parent
eef9fba161
commit
a8e266e039
5 changed files with 43 additions and 25 deletions
|
@ -42,11 +42,15 @@ func (cfg *defcfg) Add(c ...lib.Config) {
|
||||||
cfg.children = append(cfg.children, c...)
|
cfg.children = append(cfg.children, c...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *defcfg) Starter() lib.StartProc {
|
func (cfg *defcfg) Starter() lib.Proc {
|
||||||
return DefaultStart
|
return DefaultStart
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *defcfg) Step() lib.StepProc {
|
func (cfg *defcfg) Listener() lib.Proc {
|
||||||
|
return DefaultListen
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cfg *defcfg) Step() lib.Step {
|
||||||
return DefaultStep
|
return DefaultStep
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +58,7 @@ func (cfg *defcfg) MessageHandler() lib.MessageHandler {
|
||||||
return DefaultMsgHandler
|
return DefaultMsgHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *defcfg) DoneHandler() lib.StepProc {
|
func (cfg *defcfg) DoneHandler() lib.Step {
|
||||||
return DefaultDoneHandler
|
return DefaultDoneHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,17 +74,22 @@ type BaseCfg = base
|
||||||
|
|
||||||
type base struct {
|
type base struct {
|
||||||
*defcfg
|
*defcfg
|
||||||
starter lib.StartProc
|
starter lib.Proc
|
||||||
step lib.StepProc
|
listener lib.Proc
|
||||||
|
step lib.Step
|
||||||
msgHandler lib.MessageHandler
|
msgHandler lib.MessageHandler
|
||||||
doneHandler lib.StepProc
|
doneHandler lib.Step
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *base) Starter() lib.StartProc {
|
func (cfg *base) Starter() lib.Proc {
|
||||||
return cfg.starter
|
return cfg.starter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *base) Step() lib.StepProc {
|
func (cfg *base) Listener() lib.Proc {
|
||||||
|
return cfg.listener
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cfg *base) Step() lib.Step {
|
||||||
return cfg.step
|
return cfg.step
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,13 +97,18 @@ func (cfg *base) MessageHandler() lib.MessageHandler {
|
||||||
return cfg.msgHandler
|
return cfg.msgHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *base) DoneHandler() lib.StepProc {
|
func (cfg *base) DoneHandler() lib.Step {
|
||||||
return cfg.doneHandler
|
return cfg.doneHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
// implementation-specific methods and functions
|
// implementation-specific methods and functions
|
||||||
|
|
||||||
func (cfg *base) WithStep(step lib.StepProc) *base {
|
func (cfg *base) WithListener(listener lib.Proc) *base {
|
||||||
|
cfg.listener = listener
|
||||||
|
return cfg
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cfg *base) WithStep(step lib.Step) *base {
|
||||||
cfg.step = step
|
cfg.step = step
|
||||||
return cfg
|
return cfg
|
||||||
}
|
}
|
||||||
|
@ -104,17 +118,18 @@ func (cfg *base) WithMessageHandler(hdlr lib.MessageHandler) *base {
|
||||||
return cfg
|
return cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *base) WithDoneHandler(hdlr lib.StepProc) *base {
|
func (cfg *base) WithDoneHandler(hdlr lib.Step) *base {
|
||||||
cfg.doneHandler = hdlr
|
cfg.doneHandler = hdlr
|
||||||
return cfg
|
return cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
func Base(name string, starter lib.StartProc) *base {
|
func Base(name string, starter lib.Proc) *base {
|
||||||
return &base{
|
return &base{
|
||||||
defcfg: &defcfg{
|
defcfg: &defcfg{
|
||||||
name: name,
|
name: name,
|
||||||
},
|
},
|
||||||
starter: starter,
|
starter: starter,
|
||||||
|
listener: DefaultListen,
|
||||||
step: DefaultStep,
|
step: DefaultStep,
|
||||||
msgHandler: DefaultMsgHandler,
|
msgHandler: DefaultMsgHandler,
|
||||||
doneHandler: DefaultDoneHandler,
|
doneHandler: DefaultDoneHandler,
|
||||||
|
@ -122,10 +137,11 @@ func Base(name string, starter lib.StartProc) *base {
|
||||||
}
|
}
|
||||||
|
|
||||||
// will be set by core.init()
|
// will be set by core.init()
|
||||||
var DefaultStart lib.StartProc
|
var DefaultStart lib.Proc
|
||||||
var DefaultStep lib.StepProc
|
var DefaultListen lib.Proc
|
||||||
|
var DefaultStep lib.Step
|
||||||
var DefaultMsgHandler lib.MessageHandler
|
var DefaultMsgHandler lib.MessageHandler
|
||||||
var DefaultDoneHandler lib.StepProc
|
var DefaultDoneHandler lib.Step
|
||||||
|
|
||||||
// action configuration
|
// action configuration
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ import (
|
||||||
|
|
||||||
func Delayed(proc lib.Proc, delay time.Duration) lib.Proc {
|
func Delayed(proc lib.Proc, delay time.Duration) lib.Proc {
|
||||||
return func(ctx lib.Context) {
|
return func(ctx lib.Context) {
|
||||||
logging.Debug(ctx).Int("delay", int(delay)).Msg("lib.Delayed")
|
logging.Debug(ctx).Int("delay", int(delay)).Msg("core.Delayed")
|
||||||
time.Sleep(delay * time.Millisecond)
|
time.Sleep(delay * time.Millisecond)
|
||||||
proc(ctx)
|
proc(ctx)
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ func None(_ lib.Context) {}
|
||||||
|
|
||||||
func Start(ctx lib.Context) {
|
func Start(ctx lib.Context) {
|
||||||
logging.Debug(ctx).Msg("core.Start")
|
logging.Debug(ctx).Msg("core.Start")
|
||||||
lib.RunCtx(ctx, Listen)
|
lib.RunCtx(ctx, ctx.Config().Listener())
|
||||||
}
|
}
|
||||||
|
|
||||||
func Listen(ctx lib.Context) {
|
func Listen(ctx lib.Context) {
|
||||||
|
@ -72,6 +72,7 @@ func Recover(ctx lib.Context, txt string) interface{} {
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
config.DefaultStart = Start // avoid import cycle
|
config.DefaultStart = Start // avoid import cycle
|
||||||
|
config.DefaultListen = Listen
|
||||||
config.DefaultStep = Step
|
config.DefaultStep = Step
|
||||||
config.DefaultMsgHandler = HandleMessage
|
config.DefaultMsgHandler = HandleMessage
|
||||||
config.DefaultDoneHandler = HandleDone
|
config.DefaultDoneHandler = HandleDone
|
||||||
|
|
10
scopes.go
10
scopes.go
|
@ -90,8 +90,7 @@ type ActionSpec interface {
|
||||||
// procedures and handlers
|
// procedures and handlers
|
||||||
|
|
||||||
type Proc = func(Context)
|
type Proc = func(Context)
|
||||||
type StartProc = Proc
|
type Step = func(Context) bool
|
||||||
type StepProc = func(Context) bool
|
|
||||||
type MessageHandler = func(Context, Message) bool
|
type MessageHandler = func(Context, Message) bool
|
||||||
type ActionHandler = func(Action) bool
|
type ActionHandler = func(Action) bool
|
||||||
|
|
||||||
|
@ -100,10 +99,11 @@ type ActionHandler = func(Action) bool
|
||||||
type Config interface {
|
type Config interface {
|
||||||
Name() string
|
Name() string
|
||||||
SetName(string)
|
SetName(string)
|
||||||
Starter() StartProc
|
Starter() Proc
|
||||||
Step() StepProc
|
Listener() Proc
|
||||||
|
Step() Step
|
||||||
MessageHandler() MessageHandler
|
MessageHandler() MessageHandler
|
||||||
DoneHandler() StepProc
|
DoneHandler() Step
|
||||||
Actions() []ActionConfig
|
Actions() []ActionConfig
|
||||||
AddAction(string, ...ActionSpec)
|
AddAction(string, ...ActionSpec)
|
||||||
Children() []Config
|
Children() []Config
|
||||||
|
|
|
@ -45,7 +45,7 @@ func Serve(ctx lib.Context) {
|
||||||
}
|
}
|
||||||
srv := &http.Server{Addr: cfg.Addr, Handler: r}
|
srv := &http.Server{Addr: cfg.Addr, Handler: r}
|
||||||
ctx.WithState(&ServerState{server: srv})
|
ctx.WithState(&ServerState{server: srv})
|
||||||
logging.Debug(ctx).Str("addr", cfg.Addr).Msg("server.Serve")
|
logging.Info(ctx).Str("addr", cfg.Addr).Msg("server.Serve")
|
||||||
lib.RunCtx(ctx, func(ctx lib.Context) {
|
lib.RunCtx(ctx, func(ctx lib.Context) {
|
||||||
srv.ListenAndServe()
|
srv.ListenAndServe()
|
||||||
})
|
})
|
||||||
|
|
|
@ -35,8 +35,9 @@ func Config() lib.Config {
|
||||||
server_c.AddRoute("/api", server.MsgHandler("demo", nil, "test-receiver"))
|
server_c.AddRoute("/api", server.MsgHandler("demo", nil, "test-receiver"))
|
||||||
|
|
||||||
test_client := &client.Cfg{
|
test_client := &client.Cfg{
|
||||||
BaseCfg: b("test-client", core.Delayed(core.Start, 50)),
|
BaseCfg: b("test-client", core.Start).
|
||||||
Url: ovr("http://localhost:8123/api", SERVER_URL),
|
WithListener(core.Delayed(core.Listen, 50)),
|
||||||
|
Url: ovr("http://localhost:8123/api", SERVER_URL),
|
||||||
}
|
}
|
||||||
test_client.AddAction("demo", action.Base(client.Send))
|
test_client.AddAction("demo", action.Base(client.Send))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue