github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/k8s/json_path_test.go (about) 1 package k8s 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "k8s.io/apimachinery/pkg/runtime" 9 10 "github.com/tilt-dev/tilt/internal/k8s/jsonpath" 11 "github.com/tilt-dev/tilt/internal/k8s/testyaml" 12 ) 13 14 func TestJSONPathOneMatch(t *testing.T) { 15 entities := MustParseYAMLFromString(t, testyaml.SanchoYAML) 16 deployment := entities[0] 17 path, err := NewJSONPath("{.spec.template.spec.containers[].image}") 18 assert.NoError(t, err) 19 result, err := path.FindStrings(deployment.Obj) 20 assert.NoError(t, err) 21 assert.Equal(t, []string{"gcr.io/some-project-162817/sancho"}, result) 22 } 23 24 func TestJSONPathReplace(t *testing.T) { 25 entities := MustParseYAMLFromString(t, testyaml.SanchoYAML) 26 deployment := entities[0] 27 path, err := NewJSONPath("{.spec.template.spec.containers[].image}") 28 assert.NoError(t, err) 29 30 err = path.VisitStrings(deployment.Obj, func(val jsonpath.Value, s string) error { 31 val.Set(reflect.ValueOf("injected-image")) 32 return nil 33 }) 34 assert.NoError(t, err) 35 36 result, err := path.FindStrings(deployment.Obj) 37 assert.NoError(t, err) 38 assert.Equal(t, []string{"injected-image"}, result) 39 } 40 41 func TestJSONPathMultipleMatches(t *testing.T) { 42 entities := MustParseYAMLFromString(t, testyaml.SanchoSidecarYAML) 43 deployment := entities[0] 44 path, err := NewJSONPath("{.spec.template.spec.containers[*].image}") 45 assert.NoError(t, err) 46 result, err := path.FindStrings(deployment.Obj) 47 assert.NoError(t, err) 48 assert.Equal(t, []string{ 49 "gcr.io/some-project-162817/sancho", 50 "gcr.io/some-project-162817/sancho-sidecar", 51 }, result) 52 } 53 54 func TestJSONPathCRD(t *testing.T) { 55 entities := MustParseYAMLFromString(t, testyaml.CRDYAML) 56 crd := entities[0] 57 path, err := NewJSONPath("{.spec.validation.openAPIV3Schema.properties.spec.properties.image}") 58 assert.NoError(t, err) 59 60 content := crd.Obj.(runtime.Unstructured).UnstructuredContent() 61 result, err := path.FindStrings(content) 62 assert.NoError(t, err) 63 assert.Equal(t, []string{"docker.io/bitnami/minideb:latest"}, result) 64 } 65 66 func TestJSONPathCRDReplace(t *testing.T) { 67 entities := MustParseYAMLFromString(t, testyaml.CRDYAML) 68 crd := entities[0] 69 path, err := NewJSONPath("{.spec.validation.openAPIV3Schema.properties.spec.properties.image}") 70 assert.NoError(t, err) 71 72 content := crd.Obj.(runtime.Unstructured).UnstructuredContent() 73 err = path.VisitStrings(content, func(val jsonpath.Value, s string) error { 74 val.Set(reflect.ValueOf("injected-image")) 75 return nil 76 }) 77 assert.NoError(t, err) 78 79 result, err := path.FindStrings(content) 80 assert.NoError(t, err) 81 assert.Equal(t, []string{"injected-image"}, result) 82 }