From de75af9fe2d91df7297e498d320b496addfb52f4 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Thu, 1 May 2014 16:10:20 -0700 Subject: [PATCH 1/2] engine: catchall handler is shadowed by specific handlers This allows using `Engine.Register` and `Engine.RegisterCatchall` on the same engine without the catchall hiding all other handlers. Docker-DCO-1.1-Signed-off-by: Solomon Hykes (github: shykes) --- engine/engine.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/engine/engine.go b/engine/engine.go index dc1984ccb5..6f80e54b7e 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -118,13 +118,12 @@ func (eng *Engine) Job(name string, args ...string) *Job { if eng.Logging { job.Stderr.Add(utils.NopWriteCloser(eng.Stderr)) } - if eng.catchall != nil { + + // Catchall is shadowed by specific Register. + if handler, exists := eng.handlers[name]; exists { + job.handler = handler + } else if eng.catchall != nil { job.handler = eng.catchall - } else { - handler, exists := eng.handlers[name] - if exists { - job.handler = handler - } } return job } From 3b73c26194836c1e2b737146a5b0c840226c65d2 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Thu, 1 May 2014 18:39:46 -0700 Subject: [PATCH 2/2] Engine: empty job names are illegal, catchall or not Docker-DCO-1.1-Signed-off-by: Solomon Hykes (github: shykes) --- engine/engine.go | 3 ++- engine/engine_test.go | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/engine/engine.go b/engine/engine.go index 6f80e54b7e..58b43eca04 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -122,7 +122,8 @@ func (eng *Engine) Job(name string, args ...string) *Job { // Catchall is shadowed by specific Register. if handler, exists := eng.handlers[name]; exists { job.handler = handler - } else if eng.catchall != nil { + } else if eng.catchall != nil && name != "" { + // empty job names are illegal, catchall or not. job.handler = eng.catchall } return job diff --git a/engine/engine_test.go b/engine/engine_test.go index 8023bd58f3..de7f74012e 100644 --- a/engine/engine_test.go +++ b/engine/engine_test.go @@ -133,3 +133,19 @@ func TestParseJob(t *testing.T) { t.Fatalf("Job was not called") } } + +func TestCatchallEmptyName(t *testing.T) { + eng := New() + var called bool + eng.RegisterCatchall(func(job *Job) Status { + called = true + return StatusOK + }) + err := eng.Job("").Run() + if err == nil { + t.Fatalf("Engine.Job(\"\").Run() should return an error") + } + if called { + t.Fatalf("Engine.Job(\"\").Run() should return an error") + } +}