mirror of
https://github.com/containers/podman.git
synced 2025-05-22 17:46:52 +08:00

Automated for .go files via gomove [1]: `gomove github.com/containers/podman/v3 github.com/containers/podman/v4` Remaining files via vgrep [2]: `vgrep github.com/containers/podman/v3` [1] https://github.com/KSubedi/gomove [2] https://github.com/vrothberg/vgrep Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
183 lines
4.4 KiB
Go
183 lines
4.4 KiB
Go
package hook
|
|
|
|
import (
|
|
"testing"
|
|
|
|
current "github.com/containers/podman/v4/pkg/hooks/1.0.0"
|
|
rspec "github.com/opencontainers/runtime-spec/specs-go"
|
|
"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)
|
|
}
|