github.com/verrazzano/verrazzano@v1.7.0/tools/vz/cmd/helpers/operator_yaml_test.go (about) 1 // Copyright (c) 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package helpers 5 6 import ( 7 "bufio" 8 "fmt" 9 "os" 10 "strings" 11 "testing" 12 13 "github.com/stretchr/testify/assert" 14 "github.com/verrazzano/verrazzano/pkg/k8sutil" 15 vpoconst "github.com/verrazzano/verrazzano/platform-operator/constants" 16 "github.com/verrazzano/verrazzano/tools/vz/pkg/constants" 17 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" 18 ) 19 20 func TestUpdateOperatorYAMLPrivateRegistry(t *testing.T) { 21 myReg := "fra.ocir.io" 22 myPrefix := "mypref" 23 fname, err := updateOperatorYAMLPrivateRegistry("../../test/testdata/operator-file-fake.yaml", myReg, myPrefix) 24 assert.NoError(t, err) 25 fmt.Printf("finished processing file, wrote %s\n", fname) 26 editedOperatorFile, err := os.Open(fname) 27 assert.NoError(t, err) 28 defer func() { editedOperatorFile.Close() }() 29 opYAML, err := k8sutil.Unmarshall(bufio.NewReader(editedOperatorFile)) 30 assert.NoError(t, err) 31 assert.NotNil(t, opYAML) 32 vpoIdx, webhookIdx := findVPODeploymentIndices(opYAML) 33 assert.NotEqual(t, -1, vpoIdx) 34 assert.NotEqual(t, -1, webhookIdx) 35 vpoDeploy := opYAML[vpoIdx] 36 webhookDeploy := opYAML[webhookIdx] 37 expectedImagePrefix := fmt.Sprintf("%s/%s/verrazzano/verrazzano-platform-operator:", myReg, myPrefix) 38 assertAllPrivateRegImageNames(t, vpoDeploy, expectedImagePrefix) 39 assertAllPrivateRegImageNames(t, webhookDeploy, expectedImagePrefix) 40 assertPrivateRegEnvVars(t, vpoDeploy, myReg, myPrefix) 41 } 42 43 func assertPrivateRegEnvVars(t *testing.T, deployment unstructured.Unstructured, imageRegistry string, imagePrefix string) { 44 containers, _, err := unstructured.NestedSlice(deployment.Object, containersFields()...) 45 assert.NoError(t, err) 46 registryOk := false 47 prefixOk := false 48 for _, ctr := range containers { 49 container := ctr.(map[string]interface{}) 50 if container["name"] == constants.VerrazzanoPlatformOperator { 51 env := container["env"].([]interface{}) 52 for _, eachEnv := range env { 53 envVar := eachEnv.(map[string]interface{}) 54 varName := envVar["name"] 55 if varName == vpoconst.RegistryOverrideEnvVar { 56 val := envVar["value"] 57 assert.Equal(t, imageRegistry, val) 58 registryOk = true 59 continue 60 } 61 if varName == vpoconst.ImageRepoOverrideEnvVar { 62 val := envVar["value"] 63 assert.Equal(t, imagePrefix, val) 64 prefixOk = true 65 } 66 } 67 } 68 } 69 70 assert.True(t, registryOk && prefixOk, "Expected both registry and prefix env vars to be populated") 71 } 72 73 func assertAllPrivateRegImageNames(t *testing.T, deployment unstructured.Unstructured, expectedImagePrefix string) { 74 containers, _, err := unstructured.NestedSlice(deployment.Object, containersFields()...) 75 assert.NoError(t, err) 76 assertImageNamesStartWith(t, expectedImagePrefix, containers) 77 initContainers, _, err := unstructured.NestedSlice(deployment.Object, initContainersFields()...) 78 assert.NoError(t, err) 79 assertImageNamesStartWith(t, expectedImagePrefix, initContainers) 80 } 81 82 func assertImageNamesStartWith(t *testing.T, expectedImagePrefix string, containers []interface{}) { 83 for _, ctr := range containers { 84 container := ctr.(map[string]interface{}) 85 assert.Truef(t, strings.HasPrefix(container["image"].(string), expectedImagePrefix), 86 "Expected container %s to have image name starting with %s, but found %s", 87 container["name"], expectedImagePrefix, container["image"]) 88 } 89 }