1package v2
2
3import (
4	"encoding/json"
5	"testing"
6
7	"github.com/stretchr/testify/assert"
8)
9
10func TestHookValidate(t *testing.T) {
11	var h Hook
12
13	// Invalid status
14	h.Status = -1
15	assert.Error(t, h.Validate())
16
17	// Invalid without config
18	h.Status = 0
19	assert.Error(t, h.Validate())
20
21	// Valid with valid config
22	h.HookConfig = HookConfig{
23		ObjectMeta: ObjectMeta{
24			Name:      "test",
25			Namespace: "default",
26		},
27		Command: "yes",
28		Timeout: 10,
29	}
30	assert.NoError(t, h.Validate())
31}
32
33func TestHookListValidate(t *testing.T) {
34	var h HookList
35
36	// Invalid hooks
37	h.Hooks = nil
38	assert.Error(t, h.Validate())
39
40	// Invalid hooks
41	h.Hooks = []string{}
42	assert.Error(t, h.Validate())
43
44	// Invalid without type
45	h.Hooks = append(h.Hooks, "hook")
46	assert.Error(t, h.Validate())
47
48	// Invalid type
49	h.Type = "invalid"
50	assert.Error(t, h.Validate())
51
52	// Valid
53	h.Type = "0"
54	assert.NoError(t, h.Validate())
55}
56
57func TestHookConfig(t *testing.T) {
58	var h HookConfig
59
60	// Invalid name
61	assert.Error(t, h.Validate())
62	h.Name = "foo"
63
64	// Invalid timeout
65	assert.Error(t, h.Validate())
66	h.Timeout = 60
67
68	// Invalid command
69	assert.Error(t, h.Validate())
70	h.Command = "echo 'foo'"
71
72	// Invalid Namespace
73	assert.Error(t, h.Validate())
74	h.Namespace = "default"
75
76	// Valid hook
77	assert.NoError(t, h.Validate())
78}
79
80func TestFixtureHookIsValid(t *testing.T) {
81	c := FixtureHook("hook")
82	config := c.HookConfig
83
84	assert.Equal(t, "hook", config.Name)
85	assert.NoError(t, config.Validate())
86}
87
88func TestHookUnmarshal_GH1520(t *testing.T) {
89	b := []byte(`{"metadata": {"name": "foo", "namespace":"default"},"command":"ps aux","timeout":60}`)
90	var h Hook
91	var err error
92	if err := json.Unmarshal(b, &h); err != nil {
93		t.Fatal(err)
94	}
95	if err := h.Validate(); err != nil {
96		t.Fatal(err)
97	}
98	b, err = json.Marshal(&h)
99	if err != nil {
100		t.Fatal(err)
101	}
102	var hc HookConfig
103	if err := json.Unmarshal(b, &hc); err != nil {
104		t.Fatal(err)
105	}
106	if err := hc.Validate(); err != nil {
107		t.Fatal(err)
108	}
109}
110