diff options
Diffstat (limited to 'pkg/hooks/1.0.0')
-rw-r--r-- | pkg/hooks/1.0.0/hook.go | 6 | ||||
-rw-r--r-- | pkg/hooks/1.0.0/hook_test.go | 34 |
2 files changed, 29 insertions, 11 deletions
diff --git a/pkg/hooks/1.0.0/hook.go b/pkg/hooks/1.0.0/hook.go index cf623ee42..77fbab5aa 100644 --- a/pkg/hooks/1.0.0/hook.go +++ b/pkg/hooks/1.0.0/hook.go @@ -31,7 +31,7 @@ func Read(content []byte) (hook *Hook, err error) { } // Validate performs load-time hook validation. -func (hook *Hook) Validate() (err error) { +func (hook *Hook) Validate(extensionStages []string) (err error) { if hook == nil { return errors.New("nil hook") } @@ -68,6 +68,10 @@ func (hook *Hook) Validate() (err error) { } validStages := map[string]bool{"prestart": true, "poststart": true, "poststop": true} + for _, stage := range extensionStages { + validStages[stage] = true + } + for _, stage := range hook.Stages { if !validStages[stage] { return fmt.Errorf("unknown stage %q", stage) diff --git a/pkg/hooks/1.0.0/hook_test.go b/pkg/hooks/1.0.0/hook_test.go index 003be34bb..bd6d6b654 100644 --- a/pkg/hooks/1.0.0/hook_test.go +++ b/pkg/hooks/1.0.0/hook_test.go @@ -51,7 +51,7 @@ func TestGoodValidate(t *testing.T) { }, Stages: []string{"prestart"}, } - err := hook.Validate() + err := hook.Validate([]string{}) if err != nil { t.Fatal(err) } @@ -59,7 +59,7 @@ func TestGoodValidate(t *testing.T) { func TestNilValidation(t *testing.T) { var hook *Hook - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } @@ -68,7 +68,7 @@ func TestNilValidation(t *testing.T) { func TestWrongVersion(t *testing.T) { hook := Hook{Version: "0.1.0"} - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } @@ -80,7 +80,7 @@ func TestNoHookPath(t *testing.T) { Version: "1.0.0", Hook: rspec.Hook{}, } - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } @@ -94,7 +94,7 @@ func TestUnknownHookPath(t *testing.T) { Path: filepath.Join("does", "not", "exist"), }, } - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } @@ -111,7 +111,7 @@ func TestNoStages(t *testing.T) { Path: path, }, } - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } @@ -126,13 +126,27 @@ func TestInvalidStage(t *testing.T) { }, Stages: []string{"does-not-exist"}, } - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } assert.Regexp(t, "^unknown stage \"does-not-exist\"$", err.Error()) } +func TestExtensionStage(t *testing.T) { + hook := Hook{ + Version: "1.0.0", + Hook: rspec.Hook{ + Path: path, + }, + Stages: []string{"prestart", "b"}, + } + err := hook.Validate([]string{"a", "b", "c"}) + if err != nil { + t.Fatal(err) + } +} + func TestInvalidAnnotationKey(t *testing.T) { hook := Hook{ Version: "1.0.0", @@ -146,7 +160,7 @@ func TestInvalidAnnotationKey(t *testing.T) { }, Stages: []string{"prestart"}, } - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } @@ -166,7 +180,7 @@ func TestInvalidAnnotationValue(t *testing.T) { }, Stages: []string{"prestart"}, } - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } @@ -184,7 +198,7 @@ func TestInvalidCommand(t *testing.T) { }, Stages: []string{"prestart"}, } - err := hook.Validate() + err := hook.Validate([]string{}) if err == nil { t.Fatal("unexpected success") } |