diff options
Diffstat (limited to 'pkg/hooks/0.1.0/hook_test.go')
-rw-r--r-- | pkg/hooks/0.1.0/hook_test.go | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/pkg/hooks/0.1.0/hook_test.go b/pkg/hooks/0.1.0/hook_test.go new file mode 100644 index 000000000..44cb21e3a --- /dev/null +++ b/pkg/hooks/0.1.0/hook_test.go @@ -0,0 +1,182 @@ +package hook + +import ( + "testing" + + rspec "github.com/opencontainers/runtime-spec/specs-go" + current "github.com/projectatomic/libpod/pkg/hooks/1.0.0" + "github.com/stretchr/testify/assert" +) + +func TestGood(t *testing.T) { + hook, err := read([]byte("{\"hook\": \"/a/b/c\", \"stages\": [\"prestart\"], \"cmds\": [\"sh\"]}")) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, ¤t.Hook{ + Version: current.Version, + Hook: rspec.Hook{ + Path: "/a/b/c", + }, + When: current.When{ + Commands: []string{"sh"}, + Or: true, + }, + Stages: []string{"prestart"}, + }, hook) +} + +func TestInvalidJSON(t *testing.T) { + _, err := read([]byte("{")) + if err == nil { + t.Fatal("unexpected success") + } + assert.Regexp(t, "^unexpected end of JSON input$", err.Error()) +} + +func TestArguments(t *testing.T) { + hook, err := read([]byte("{\"hook\": \"/a/b/c\", \"arguments\": [\"d\", \"e\"], \"stages\": [\"prestart\"], \"cmds\": [\"sh\"]}")) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, ¤t.Hook{ + Version: current.Version, + Hook: rspec.Hook{ + Path: "/a/b/c", + Args: []string{"/a/b/c", "d", "e"}, + }, + When: current.When{ + Commands: []string{"sh"}, + Or: true, + }, + Stages: []string{"prestart"}, + }, hook) +} + +func TestEmptyObject(t *testing.T) { + _, err := read([]byte("{}")) + if err == nil { + t.Fatal("unexpected success") + } + assert.Regexp(t, "^missing required property: hook$", err.Error()) +} + +func TestNoStages(t *testing.T) { + _, err := read([]byte("{\"hook\": \"/a/b/c\"}")) + if err == nil { + t.Fatal("unexpected success") + } + assert.Regexp(t, "^missing required property: stages$", err.Error()) +} + +func TestStage(t *testing.T) { + hook, err := read([]byte("{\"hook\": \"/a/b/c\", \"stage\": [\"prestart\"]}")) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, ¤t.Hook{ + Version: current.Version, + Hook: rspec.Hook{ + Path: "/a/b/c", + }, + When: current.When{Or: true}, + Stages: []string{"prestart"}, + }, hook) +} + +func TestStagesAndStage(t *testing.T) { + _, err := read([]byte("{\"hook\": \"/a/b/c\", \"stages\": [\"prestart\"], \"stage\": [\"prestart\"]}")) + if err == nil { + t.Fatal("unexpected success") + } + assert.Regexp(t, "^cannot set both 'stage' and 'stages'$", err.Error()) +} + +func TestCmd(t *testing.T) { + hook, err := read([]byte("{\"hook\": \"/a/b/c\", \"stage\": [\"prestart\"], \"cmd\": [\"sh\"]}")) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, ¤t.Hook{ + Version: current.Version, + Hook: rspec.Hook{ + Path: "/a/b/c", + }, + When: current.When{ + Commands: []string{"sh"}, + Or: true, + }, + Stages: []string{"prestart"}, + }, hook) +} + +func TestCmdsAndCmd(t *testing.T) { + _, err := read([]byte("{\"hook\": \"/a/b/c\", \"stages\": [\"prestart\"], \"cmds\": [\"sh\"], \"cmd\": [\"true\"]}")) + if err == nil { + t.Fatal("unexpected success") + } + assert.Regexp(t, "^cannot set both 'cmd' and 'cmds'$", err.Error()) +} + +func TestAnnotations(t *testing.T) { + hook, err := read([]byte("{\"hook\": \"/a/b/c\", \"stage\": [\"prestart\"], \"annotations\": [\"a\", \"b\"]}")) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, ¤t.Hook{ + Version: current.Version, + Hook: rspec.Hook{ + Path: "/a/b/c", + }, + When: current.When{ + Annotations: map[string]string{".*": "a|b"}, + Or: true, + }, + Stages: []string{"prestart"}, + }, hook) +} + +func TestAnnotation(t *testing.T) { + hook, err := read([]byte("{\"hook\": \"/a/b/c\", \"stage\": [\"prestart\"], \"annotation\": [\"a\", \"b\"]}")) + if err != nil { + t.Fatal(err) + } + assert.Equal(t, ¤t.Hook{ + Version: current.Version, + Hook: rspec.Hook{ + Path: "/a/b/c", + }, + When: current.When{ + Annotations: map[string]string{".*": "a|b"}, + Or: true, + }, + Stages: []string{"prestart"}, + }, hook) +} + +func TestAnnotationsAndAnnotation(t *testing.T) { + _, err := read([]byte("{\"hook\": \"/a/b/c\", \"stages\": [\"prestart\"], \"annotations\": [\"a\"], \"annotation\": [\"b\"]}")) + if err == nil { + t.Fatal("unexpected success") + } + assert.Regexp(t, "^cannot set both 'annotation' and 'annotations'$", err.Error()) +} + +func TestHasBindMounts(t *testing.T) { + hook, err := read([]byte("{\"hook\": \"/a/b/c\", \"stage\": [\"prestart\"], \"hasbindmounts\": true}")) + if err != nil { + t.Fatal(err) + } + hasBindMounts := true + assert.Equal(t, ¤t.Hook{ + Version: current.Version, + Hook: rspec.Hook{ + Path: "/a/b/c", + }, + When: current.When{ + HasBindMounts: &hasBindMounts, + Or: true, + }, + Stages: []string{"prestart"}, + }, hook) +} |