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  }