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